Bẻ khóa cuộc phỏng vấn mã hóa Python
Bạn đã hoàn thành cuộc gọi điện thoại với nhà tuyển dụng và giờ là lúc thể hiện rằng bạn biết cách giải quyết vấn đề với mã thực tế. Cho dù đó là bài tập HackerRank, bài tập về nhà hay cuộc phỏng vấn trên bảng trắng tại chỗ, đây là thời điểm để bạn chứng minh kỹ năng phỏng vấn lập trình của mình Show
Nhưng các cuộc phỏng vấn không chỉ là giải quyết vấn đề. họ cũng muốn chứng minh rằng bạn có thể viết mã sản xuất sạch. Điều này có nghĩa là bạn có kiến thức sâu rộng về các thư viện và chức năng tích hợp sẵn của Python. Kiến thức này cho các công ty thấy rằng bạn có thể di chuyển nhanh chóng và sẽ không sao chép chức năng đi kèm với ngôn ngữ chỉ vì bạn không biết nó tồn tại Ghi chú. Để có cảm nhận về một cuộc phỏng vấn lập trình có thể diễn ra như thế nào và để tìm hiểu các phương pháp hay nhất cho các thử thách viết mã, hãy xem khóa học video Viết và kiểm tra hàm Python. Thực hành phỏng vấn Tại Real Python, chúng tôi đã cùng nhau thảo luận và thảo luận về những công cụ mà chúng tôi luôn ấn tượng khi thấy trong các cuộc phỏng vấn viết mã. Bài viết này sẽ hướng dẫn bạn cách tốt nhất về chức năng đó, bắt đầu với Python tích hợp sẵn, sau đó là hỗ trợ gốc của Python cho cấu trúc dữ liệu và cuối cùng là thư viện chuẩn mạnh mẽ (và thường bị đánh giá thấp) của Python Trong bài viết này, bạn sẽ học cách
Tiền thưởng miễn phí. 5 Suy nghĩ về Làm chủ Python, một khóa học miễn phí dành cho các nhà phát triển Python cho bạn thấy lộ trình và tư duy mà bạn sẽ cần để đưa các kỹ năng Python của mình lên một tầm cao mới Chọn chức năng tích hợp phù hợp cho công việcPython có một thư viện tiêu chuẩn lớn nhưng chỉ có một thư viện nhỏ chứa các hàm dựng sẵn, luôn có sẵn và không cần phải nhập. Bạn nên xem qua từng chức năng, nhưng cho đến khi bạn có cơ hội thực hiện, đây là một số chức năng tích hợp sẵn đáng để hiểu cách sử dụng và trong trường hợp của một số chức năng đó, bạn nên sử dụng những giải pháp thay thế nào Loại bỏ các quảng cáoLặp lại với >>> numbers = [45, 22, 14, 65, 97, 72] >>> for i, num in enumerate(numbers, start=52): .. print(i, num) ... 52 45 53 22 54 14 55 65 56 97 57 72 7 thay vì >>> numbers = [4, 2, 1, 6, 9, 7] >>> def square(x): .. return x*x ... >>> list(map(square, numbers)) [16, 4, 1, 36, 81, 49] >>> [square(x) for x in numbers] [16, 4, 1, 36, 81, 49] 1Kịch bản này có thể xuất hiện nhiều hơn bất kỳ kịch bản nào khác trong các cuộc phỏng vấn viết mã. bạn có một danh sách các phần tử và bạn cần lặp lại danh sách với quyền truy cập vào cả chỉ số và giá trị Có một câu hỏi phỏng vấn mã hóa cổ điển tên là FizzBuzz có thể được giải bằng cách lặp qua cả chỉ số và giá trị. Trong FizzBuzz, bạn được cung cấp một danh sách các số nguyên. Nhiệm vụ của bạn là làm như sau
Thông thường, các nhà phát triển sẽ giải quyết vấn đề này với 1>>>
Phạm vi cho phép bạn truy cập các phần tử của 0 theo chỉ mục và là một công cụ hữu ích trong một số trường hợp. Nhưng trong trường hợp này, khi bạn muốn nhận chỉ số và giá trị của từng phần tử cùng một lúc, một giải pháp tinh tế hơn sẽ sử dụng 7>>>
Đối với mỗi phần tử, 7 trả về một bộ đếm và giá trị phần tử. Bộ đếm mặc định là 3, thuận tiện cũng là chỉ mục của phần tử. Bạn không muốn bắt đầu đếm từ ngày 3? >>>
Bằng cách sử dụng tham số 5, chúng tôi truy cập tất cả các phần tử giống nhau, bắt đầu với chỉ mục đầu tiên, nhưng bây giờ số lượng của chúng tôi bắt đầu từ giá trị số nguyên đã chỉ địnhSử dụng Danh sách Hiểu thay vì >>> def is_odd(x): .. return bool(x % 2) ... >>> list(filter(is_odd, numbers)) [1, 9, 7] >>> [x for x in numbers if is_odd(x)] [1, 9, 7] 7 và >>> def is_odd(x): .. return bool(x % 2) ... >>> list(filter(is_odd, numbers)) [1, 9, 7] >>> [x for x in numbers if is_odd(x)] [1, 9, 7] 8
Anh ấy có thể đã sai khi cho rằng nó không gây tranh cãi, nhưng Guido có lý do chính đáng để muốn xóa 7 và 8 khỏi Python. Một lý do là Python hỗ trợ khả năng hiểu danh sách, thường dễ đọc hơn và hỗ trợ chức năng tương tự như 7 và 8Trước tiên, hãy xem cách chúng ta cấu trúc một cuộc gọi đến 7 và cách hiểu danh sách tương đương>>>
Cả hai cách tiếp cận, sử dụng 7 và cách hiểu danh sách, đều trả về các giá trị giống nhau, nhưng cách hiểu danh sách dễ đọc và dễ hiểu hơnBây giờ chúng ta có thể làm điều tương tự cho 8 và cách hiểu danh sách tương đương của nó>>>
Giống như chúng ta đã thấy với 7, cách tiếp cận hiểu danh sách và 8 trả về cùng một giá trị, nhưng cách hiểu danh sách dễ theo dõi hơnCác nhà phát triển đến từ các ngôn ngữ khác có thể không đồng ý rằng việc hiểu danh sách dễ đọc hơn 7 và 8, nhưng theo kinh nghiệm của tôi, những người mới bắt đầu có thể hiểu được danh sách một cách trực quan hơn nhiềuDù bằng cách nào, bạn sẽ hiếm khi mắc lỗi khi sử dụng khả năng hiểu danh sách trong một cuộc phỏng vấn viết mã, vì nó sẽ truyền đạt rằng bạn biết điều gì phổ biến nhất trong Python Loại bỏ các quảng cáoGỡ lỗi với >>> numbers = [45, 22, 14, 65, 97, 72] >>> for i, num in enumerate(numbers, start=52): .. print(i, num) ... 52 45 53 22 54 14 55 65 56 97 57 72 8 thay vì import pdb; pdb.set_trace() 1Bạn có thể đã gỡ lỗi một vấn đề nhỏ bằng cách thêm 1 vào mã của mình và xem nội dung được in ra. Cách tiếp cận này hoạt động tốt lúc đầu nhưng nhanh chóng trở nên cồng kềnh. Ngoài ra, trong môi trường phỏng vấn viết mã, bạn hầu như không muốn các cuộc gọi 1 xuất hiện trong mã của bạnThay vào đó, bạn nên sử dụng trình gỡ lỗi. Đối với các lỗi không tầm thường, hầu như luôn nhanh hơn so với sử dụng 1 và do việc gỡ lỗi là một phần quan trọng trong quá trình viết phần mềm, điều đó cho thấy bạn biết cách sử dụng các công cụ cho phép bạn phát triển nhanh chóng trong công việcNếu bạn đang sử dụng Python 3. 7, bạn không cần nhập bất cứ thứ gì và chỉ có thể gọi tại vị trí trong mã nơi bạn muốn đưa vào trình gỡ lỗi
Gọi 8 sẽ đưa bạn vào 7, đây là trình gỡ lỗi mặc định của Python. Trên Python 3. 6 tuổi trở lên, bạn có thể làm tương tự bằng cách nhập rõ ràng 7
Giống như 8, 0 sẽ đưa bạn vào trình gỡ lỗi 7. Nó không hoàn toàn sạch sẽ và cần nhớ thêm một chútCó sẵn các trình sửa lỗi khác mà bạn có thể muốn thử, nhưng 7 là một phần của thư viện tiêu chuẩn, vì vậy nó luôn có sẵn. Dù bạn thích trình gỡ lỗi nào hơn, bạn nên dùng thử chúng để làm quen với quy trình làm việc trước khi tham gia phỏng vấn lập trìnhĐịnh dạng chuỗi Với f-StringsPython có rất nhiều cách khác nhau để xử lý định dạng chuỗi và thật khó để biết cách sử dụng. Trên thực tế, chúng tôi giải quyết vấn đề định dạng chuyên sâu trong hai bài viết riêng biệt. một về định dạng chuỗi nói chung và một tập trung cụ thể vào chuỗi f. Trong một cuộc phỏng vấn viết mã, nơi bạn (hy vọng) đang sử dụng Python 3. 6+, phương pháp định dạng được đề xuất là chuỗi f của Python f-strings hỗ trợ sử dụng phép nội suy chuỗi , cũng như mạnh mẽ. Các tính năng này cho phép bạn thêm các biến hoặc thậm chí các biểu thức Python hợp lệ và đánh giá chúng trong thời gian chạy trước khi được thêm vào chuỗi
Chuỗi f cho phép bạn đặt 3 vào chuỗi và thêm tuổi của cô ấy với định dạng mong muốn trong một thao tác ngắn gọnMột rủi ro cần lưu ý là nếu bạn đang xuất các giá trị do người dùng tạo, thì điều đó có thể gây ra rủi ro bảo mật, trong trường hợp đó có thể là một lựa chọn an toàn hơn Sắp xếp danh sách phức tạp với >>> def get_name_and_decades(name, age): .. return f"My name is {name} and I'm {age / 10:.5f} decades old." ... >>> get_name_and_decades("Maria", 31) My name is Maria and I'm 3.10000 decades old. 4Rất nhiều câu hỏi phỏng vấn viết mã yêu cầu một số kiểu sắp xếp và có nhiều cách hợp lệ để bạn có thể sắp xếp các mục. Trừ khi người phỏng vấn muốn bạn thực hiện thuật toán sắp xếp của riêng bạn, tốt nhất bạn nên sử dụng 4Bạn có thể đã thấy những cách sử dụng sắp xếp đơn giản nhất, chẳng hạn như sắp xếp danh sách các số hoặc chuỗi theo thứ tự tăng dần hoặc giảm dần >>>
Theo mặc định, 4 đã sắp xếp đầu vào theo thứ tự tăng dần và đối số từ khóa 7 khiến nó sắp xếp theo thứ tự giảm dầnBạn nên biết về đối số từ khóa tùy chọn 8 cho phép bạn chỉ định một hàm sẽ được gọi trên mọi phần tử trước khi sắp xếp. Việc thêm một hàm cho phép các quy tắc sắp xếp tùy chỉnh, đặc biệt hữu ích nếu bạn muốn sắp xếp các loại dữ liệu phức tạp hơn
Bằng cách chuyển vào hàm lambda trả về tuổi của từng phần tử, bạn có thể dễ dàng sắp xếp danh sách từ điển theo một giá trị duy nhất của từng từ điển đó. Trong trường hợp này, từ điển hiện được sắp xếp theo thứ tự tăng dần theo độ tuổi Loại bỏ các quảng cáoTận dụng cấu trúc dữ liệu hiệu quảCác thuật toán nhận được nhiều sự chú ý trong các cuộc phỏng vấn viết mã, nhưng cấu trúc dữ liệu thậm chí còn quan trọng hơn. Trong bối cảnh phỏng vấn mã hóa, việc chọn cấu trúc dữ liệu phù hợp có thể có tác động lớn đến hiệu suất Ngoài các cấu trúc dữ liệu lý thuyết, Python có chức năng mạnh mẽ và tiện lợi được tích hợp trong các triển khai cấu trúc dữ liệu tiêu chuẩn của nó. Các cấu trúc dữ liệu này cực kỳ hữu ích trong các cuộc phỏng vấn mã hóa vì chúng cung cấp cho bạn rất nhiều chức năng theo mặc định và cho phép bạn tập trung thời gian vào các phần khác của vấn đề Lưu trữ các giá trị duy nhất với các bộBạn sẽ thường xuyên cần xóa các phần tử trùng lặp khỏi tập dữ liệu hiện có. Các nhà phát triển mới đôi khi sẽ làm như vậy với các danh sách khi họ nên sử dụng các tập hợp để đảm bảo tính duy nhất của tất cả các phần tử Giả sử bạn có một hàm tên là 9. Nó sẽ luôn trả về một lựa chọn ngẫu nhiên từ một nhóm từ nhỏ>>> 0Bạn phải gọi 9 nhiều lần để nhận 1000 từ ngẫu nhiên và sau đó trả về cấu trúc dữ liệu chứa mỗi từ duy nhất. Dưới đây là hai cách tiếp cận phổ biến, dưới mức tối ưu và một cách tiếp cận tốtCách tiếp cận tồi 1 lưu trữ các giá trị trong danh sách sau đó chuyển đổi danh sách thành một tập hợp>>> 1Cách tiếp cận này không tệ, nhưng nó tạo ra một danh sách một cách không cần thiết và sau đó chuyển đổi nó thành một tập hợp. Người phỏng vấn hầu như luôn chú ý (và hỏi về) kiểu lựa chọn thiết kế này Cách tiếp cận tồi tệ hơn Để tránh chuyển đổi từ danh sách thành tập hợp, giờ đây bạn lưu trữ các giá trị trong danh sách mà không sử dụng bất kỳ cấu trúc dữ liệu nào khác. Sau đó, bạn kiểm tra tính duy nhất bằng cách so sánh các giá trị mới với tất cả các phần tử hiện có trong danh sách >>> 2Cách này tệ hơn cách tiếp cận đầu tiên, bởi vì bạn phải so sánh mọi từ mới với mọi từ đã có trong danh sách. Điều đó có nghĩa là khi số lượng từ tăng lên, số lượng tra cứu tăng theo phương trình bậc hai. Nói cách khác, độ phức tạp thời gian tăng theo thứ tự O(N²) Cách tiếp cận tốt Bây giờ, bạn bỏ qua việc sử dụng danh sách hoàn toàn và thay vào đó sử dụng bộ ngay từ đầu >>> 3Điều này có thể trông không khác nhiều so với các phương pháp khác ngoại trừ việc sử dụng một tập hợp ngay từ đầu. Nếu bạn xem xét những gì đang xảy ra trong 2, nó thậm chí còn giống như cách tiếp cận thứ hai. lấy từ, kiểm tra xem nó đã có trong bộ chưa và nếu chưa, hãy thêm nó vào cấu trúc dữ liệuVậy tại sao sử dụng một bộ khác với cách tiếp cận thứ hai? Nó khác vì đặt các phần tử lưu trữ theo cách cho phép kiểm tra thời gian gần như không đổi xem giá trị có nằm trong tập hợp hay không, không giống như danh sách, yêu cầu tra cứu theo thời gian tuyến tính. Sự khác biệt về thời gian tra cứu có nghĩa là độ phức tạp về thời gian để thêm vào một tập hợp tăng với tốc độ O(N), tốt hơn nhiều so với O(N²) từ cách tiếp cận thứ hai trong hầu hết các trường hợp Loại bỏ các quảng cáoTiết kiệm bộ nhớ với máy phát điệnKhả năng hiểu danh sách là công cụ tiện lợi nhưng đôi khi có thể dẫn đến việc sử dụng bộ nhớ không cần thiết Hãy tưởng tượng bạn được yêu cầu tìm tổng của 1000 ô vuông hoàn hảo đầu tiên, bắt đầu bằng 1. Bạn biết về khả năng hiểu danh sách, vì vậy bạn nhanh chóng viết ra một giải pháp hiệu quả >>> 4Giải pháp của bạn tạo một danh sách mọi ô vuông hoàn hảo trong khoảng từ 1 đến 1.000.000 và tính tổng các giá trị. Mã của bạn trả về câu trả lời đúng, nhưng sau đó người phỏng vấn của bạn bắt đầu tăng số ô vuông hoàn hảo mà bạn cần tính tổng Lúc đầu, chức năng của bạn liên tục đưa ra câu trả lời đúng, nhưng chẳng mấy chốc, nó bắt đầu chậm lại cho đến khi cuối cùng quá trình này dường như bị treo vĩnh viễn. Đây là điều cuối cùng bạn muốn xảy ra trong một cuộc phỏng vấn viết mã Những gì đang xảy ra ở đây? Nó đang lập danh sách mọi hình vuông hoàn hảo mà bạn đã yêu cầu và tổng hợp tất cả chúng. Một danh sách có 1000 ô vuông hoàn hảo có thể không lớn về mặt máy tính, nhưng 100 triệu hoặc 1 tỷ là khá ít thông tin và có thể dễ dàng lấn át tài nguyên bộ nhớ khả dụng của máy tính của bạn. Đó là những gì đang xảy ra ở đây Rất may, có một cách nhanh chóng để giải quyết vấn đề về bộ nhớ. Bạn chỉ cần thay thế dấu ngoặc đơn bằng dấu ngoặc đơn >>> 5Hoán đổi dấu ngoặc sẽ thay đổi cách hiểu danh sách của bạn thành biểu thức trình tạo. Biểu thức trình tạo hoàn hảo khi bạn biết mình muốn truy xuất dữ liệu từ một chuỗi, nhưng bạn không cần phải truy cập tất cả dữ liệu đó cùng một lúc Thay vì tạo một danh sách, biểu thức trình tạo trả về một đối tượng 3. Đối tượng đó biết nó đang ở đâu trong trạng thái hiện tại (ví dụ: 4) và chỉ tính toán giá trị tiếp theo khi nó được yêu cầuVì vậy, khi 5 lặp lại đối tượng trình tạo bằng cách gọi liên tục 6, trình tạo sẽ kiểm tra xem 7 bằng bao nhiêu, tính toán 8, tăng nội bộ 7 và trả về giá trị phù hợp cho 5. Thiết kế cho phép các trình tạo được sử dụng trên các chuỗi dữ liệu lớn, bởi vì chỉ có một phần tử tồn tại trong bộ nhớ tại một thời điểmXác định giá trị mặc định trong từ điển với >>> animals = [ .. {'type': 'penguin', 'name': 'Stephanie', 'age': 8}, .. {'type': 'elephant', 'name': 'Devon', 'age': 3}, .. {'type': 'puma', 'name': 'Moe', 'age': 5}, .. ] >>> sorted(animals, key=lambda animal: animal['age']) [ {'type': 'elephant', 'name': 'Devon', 'age': 3}, {'type': 'puma', 'name': 'Moe', 'age': 5}, {'type': 'penguin', 'name': 'Stephanie, 'age': 8}, ] 1 và >>> animals = [ .. {'type': 'penguin', 'name': 'Stephanie', 'age': 8}, .. {'type': 'elephant', 'name': 'Devon', 'age': 3}, .. {'type': 'puma', 'name': 'Moe', 'age': 5}, .. ] >>> sorted(animals, key=lambda animal: animal['age']) [ {'type': 'elephant', 'name': 'Devon', 'age': 3}, {'type': 'puma', 'name': 'Moe', 'age': 5}, {'type': 'penguin', 'name': 'Stephanie, 'age': 8}, ] 2Một trong những nhiệm vụ lập trình phổ biến nhất liên quan đến việc thêm, sửa đổi hoặc truy xuất một mục có thể có hoặc không có trong từ điển. Từ điển Python có chức năng thanh lịch để làm cho các tác vụ này trở nên rõ ràng và dễ dàng, nhưng các nhà phát triển thường kiểm tra rõ ràng các giá trị khi không cần thiết Hãy tưởng tượng bạn có một cuốn từ điển tên là 3, và bạn muốn lấy tên của chàng cao bồi đó. Một cách tiếp cận là kiểm tra rõ ràng khóa có điều kiện>>> 6Cách tiếp cận này trước tiên kiểm tra xem khóa 4 có tồn tại trong từ điển hay không và nếu có, nó sẽ trả về giá trị tương ứng. Nếu không, nó trả về một giá trị mặc địnhMặc dù việc kiểm tra rõ ràng các phím vẫn hoạt động, nhưng nó có thể dễ dàng được thay thế bằng một dòng nếu bạn sử dụng 1>>> 7 6 thực hiện các thao tác tương tự đã được thực hiện trong cách tiếp cận đầu tiên, nhưng giờ chúng được xử lý tự động. Nếu khóa tồn tại, thì giá trị phù hợp sẽ được trả về. Nếu không, giá trị mặc định sẽ được trả vềNhưng nếu bạn muốn cập nhật từ điển với giá trị mặc định trong khi vẫn truy cập khóa 4 thì sao? >>> 8Kiểm tra giá trị và đặt mặc định là một cách tiếp cận hợp lệ và dễ đọc, nhưng một lần nữa Python đưa ra một phương thức tinh tế hơn với ____60_______2 >>> 9 2 hoàn thành chính xác điều tương tự như đoạn mã trên. Nó kiểm tra xem 4 có tồn tại trong 3 hay không và nếu có thì nó trả về giá trị đó. Mặt khác, nó đặt 03 thành 04 và trả về giá trị mớiTận dụng thư viện chuẩn của PythonTheo mặc định, Python đi kèm với rất nhiều chức năng chỉ cần một câu lệnh 05. Bản thân nó rất mạnh, nhưng biết cách tận dụng thư viện tiêu chuẩn có thể nâng cao kỹ năng phỏng vấn mã hóa của bạnThật khó để chọn ra những phần hữu ích nhất từ tất cả các mô-đun có sẵn, vì vậy phần này sẽ chỉ tập trung vào một tập hợp con nhỏ các chức năng tiện ích của nó. Hy vọng rằng những điều này sẽ hữu ích cho bạn trong các cuộc phỏng vấn viết mã và cũng kích thích bạn muốn tìm hiểu thêm về chức năng nâng cao của các mô-đun này và các mô-đun khác Xử lý các khóa từ điển bị thiếu với >>> numbers = [45, 22, 14, 65, 97, 72] >>> for i, num in enumerate(numbers): .. if num % 3 == 0 and num % 5 == 0: .. numbers[i] = 'fizzbuzz' .. elif num % 3 == 0: .. numbers[i] = 'fizz' .. elif num % 5 == 0: .. numbers[i] = 'buzz' ... >>> numbers ['fizzbuzz', 22, 14, 'buzz', 97, 'fizz'] 06 1 và 2 hoạt động tốt khi bạn đặt giá trị mặc định cho một khóa duy nhất, nhưng bạn thường muốn có một giá trị mặc định cho tất cả các khóa có thể chưa đặt, đặc biệt là khi lập trình trong bối cảnh phỏng vấn viết mãGiả sử bạn có một nhóm học sinh và bạn cần theo dõi điểm của họ trong bài tập về nhà. Giá trị đầu vào là một danh sách các bộ dữ liệu có định dạng 09, nhưng bạn muốn dễ dàng tra cứu tất cả các điểm của một học sinh mà không cần lặp lại danh sáchMột cách để lưu trữ dữ liệu điểm là sử dụng từ điển ánh xạ tên học sinh vào danh sách điểm >>> 0Trong cách tiếp cận này, bạn lặp lại các sinh viên và kiểm tra xem tên của họ đã là thuộc tính trong từ điển chưa. Nếu không, bạn thêm chúng vào từ điển với một danh sách trống làm giá trị mặc định. Sau đó, bạn nối điểm thực tế của họ vào danh sách điểm của học sinh đó Nhưng có một cách tiếp cận thậm chí còn gọn gàng hơn, đó là sử dụng một 10, mở rộng chức năng tiêu chuẩn của 11 để cho phép bạn đặt một giá trị mặc định sẽ được vận hành nếu khóa không tồn tại>>> 1Trong trường hợp này, bạn đang tạo một 10 sử dụng hàm tạo 13 không có đối số làm phương thức xuất xưởng mặc định. 13 không có đối số trả về một danh sách trống, vì vậy, 10 gọi 13 nếu tên không tồn tại và sau đó cho phép thêm điểm. Nếu bạn muốn trở nên lạ mắt, bạn cũng có thể sử dụng hàm lambda làm giá trị xuất xưởng của mình để trả về một hằng số tùy ýTận dụng một 10 có thể dẫn đến mã ứng dụng sạch hơn vì bạn không phải lo lắng về các giá trị mặc định ở cấp khóa. Thay vào đó, bạn có thể xử lý chúng một lần ở cấp độ 10 và sau đó hành động như thể chìa khóa luôn hiện hữu. Để biết thêm thông tin về kỹ thuật này, hãy xem Sử dụng Loại ký tự mặc định của Python để xử lý các khóa bị thiếuĐếm các đối tượng có thể băm với >>> numbers = [45, 22, 14, 65, 97, 72] >>> for i, num in enumerate(numbers, start=52): .. print(i, num) ... 52 45 53 22 54 14 55 65 56 97 57 72 9Bạn có một chuỗi dài các từ không có dấu chấm câu hoặc chữ in hoa và bạn muốn đếm xem mỗi từ xuất hiện bao nhiêu lần Bạn có thể sử dụng từ điển hoặc 10 và tăng số lượng, nhưng 9 cung cấp một cách rõ ràng và thuận tiện hơn để thực hiện chính xác điều đó. Bộ đếm là một lớp con của 11 sử dụng 3 làm giá trị mặc định cho bất kỳ phần tử nào bị thiếu và giúp đếm số lần xuất hiện của các đối tượng dễ dàng hơn>>> 2Khi bạn chuyển danh sách các từ tới 24, nó sẽ lưu từng từ cùng với số lần từ đó xuất hiện trong danh sáchBạn có tò mò hai từ phổ biến nhất là gì không? >>> 3 25 là một phương thức thuận tiện và chỉ cần trả về giá trị đầu vào thường xuyên nhất của 27 theo số lượngLoại bỏ các quảng cáoTruy cập các nhóm chuỗi chung với các hằng số >>> numbers = [45, 22, 14, 65, 97, 72] >>> for i, num in enumerate(numbers): .. if num % 3 == 0 and num % 5 == 0: .. numbers[i] = 'fizzbuzz' .. elif num % 3 == 0: .. numbers[i] = 'fizz' .. elif num % 5 == 0: .. numbers[i] = 'buzz' ... >>> numbers ['fizzbuzz', 22, 14, 'buzz', 97, 'fizz'] 28Đó là thời gian đố. 29 đúng hay sai?Đó là sai, vì mã ASCII của 30 là 65, nhưng 31 là 97 và 65 không lớn hơn 97Tại sao câu trả lời lại quan trọng? Kiểm tra mã ASCII hoạt động nhưng vụng về và dễ gây nhầm lẫn trong các cuộc phỏng vấn mã hóa, đặc biệt nếu bạn không thể nhớ liệu ký tự ASCII chữ thường hay chữ hoa có trước. Việc sử dụng các hằng số được định nghĩa là một phần của mô-đun 28 sẽ dễ dàng hơn nhiềuBạn có thể thấy một ký tự được sử dụng trong 35, trả về liệu tất cả các ký tự trong một chuỗi có phải là chữ in hoa hay không>>> 4 35 lặp lại các chữ cái trong 37 và kiểm tra xem các chữ cái đó có phải là một phần của 38 không. Nếu bạn in ra 38, bạn sẽ thấy nó chỉ là một chuỗi tầm thường. Giá trị được đặt thành chữ 40Tất cả các hằng số 28 chỉ là các chuỗi giá trị chuỗi được tham chiếu thường xuyên. Chúng bao gồm những điều sau đây
Chúng dễ sử dụng hơn và thậm chí quan trọng hơn là dễ đọc hơn Tạo các hoán vị và kết hợp với >>> numbers = [45, 22, 14, 65, 97, 72] >>> for i, num in enumerate(numbers): .. if num % 3 == 0 and num % 5 == 0: .. numbers[i] = 'fizzbuzz' .. elif num % 3 == 0: .. numbers[i] = 'fizz' .. elif num % 5 == 0: .. numbers[i] = 'buzz' ... >>> numbers ['fizzbuzz', 22, 14, 'buzz', 97, 'fizz'] 51Người phỏng vấn thích đưa ra các tình huống thực tế để làm cho các cuộc phỏng vấn mã hóa có vẻ bớt đáng sợ hơn, vì vậy đây là một ví dụ giả định. bạn đến một công viên giải trí và quyết định tìm ra từng cặp bạn có thể ngồi cùng nhau trên tàu lượn siêu tốc Trừ khi tạo ra các cặp này là mục đích chính của câu hỏi phỏng vấn, có khả năng tạo ra tất cả các cặp có thể chỉ là một bước tẻ nhạt trên con đường hướng tới một thuật toán hoạt động. Bạn có thể tự tính toán chúng bằng các vòng lặp for lồng nhau hoặc bạn có thể sử dụng thư viện 51 mạnh mẽ 51 có nhiều công cụ để tạo các chuỗi dữ liệu đầu vào có thể lặp lại, nhưng ngay bây giờ chúng ta sẽ chỉ tập trung vào hai chức năng phổ biến. 54 và 55 54 tạo danh sách tất cả các hoán vị, nghĩa là danh sách mọi nhóm giá trị đầu vào có thể có với độ dài khớp với tham số 57. Đối số từ khóa 58 cho phép chúng tôi chỉ định có bao nhiêu giá trị trong mỗi nhóm>>> 5Với hoán vị, thứ tự của các phần tử rất quan trọng, do đó, 59 đại diện cho một cặp khác với 60, nghĩa là cả hai sẽ được đưa vào danh sách 55 kết hợp xây dựng. Đây cũng là những nhóm có thể có của các giá trị đầu vào, nhưng bây giờ thứ tự của các giá trị không thành vấn đề. Bởi vì 59 và 60 đại diện cho cùng một cặp, nên chỉ một trong số chúng sẽ được đưa vào danh sách đầu ra>>> 6Vì thứ tự của các giá trị không quan trọng với các kết hợp, nên có ít kết hợp hơn so với hoán vị cho cùng một danh sách đầu vào. Một lần nữa, bởi vì chúng tôi đặt 58 thành 2, mỗi nhóm có hai tên trong đó 65 và 66 chỉ là những ví dụ nhỏ về một thư viện mạnh mẽ, nhưng ngay cả hai hàm này cũng có thể khá hữu ích khi bạn đang cố gắng giải một bài toán thuật toán một cách nhanh chóngLoại bỏ các quảng cáoPhần kết luận. Siêu năng lực phỏng vấn mã hóaGiờ đây, bạn có thể cảm thấy thoải mái khi sử dụng một số tính năng tiêu chuẩn ít phổ biến hơn nhưng mạnh mẽ hơn của Python trong cuộc phỏng vấn mã hóa tiếp theo của mình. Có rất nhiều điều để tìm hiểu về ngôn ngữ nói chung nhưng bài viết này sẽ cung cấp cho bạn điểm khởi đầu để tìm hiểu sâu hơn đồng thời cho phép bạn sử dụng Python hiệu quả hơn khi phỏng vấn Trong bài viết này, bạn đã học được các loại công cụ tiêu chuẩn khác nhau để nâng cao kỹ năng phỏng vấn mã hóa của mình
Phỏng vấn có thể không phải là cách tốt nhất để phát triển phần mềm thực sự, nhưng bạn nên biết cách thành công trong bất kỳ môi trường lập trình nào, kể cả phỏng vấn. Rất may, học cách sử dụng Python trong các cuộc phỏng vấn viết mã có thể giúp bạn hiểu sâu hơn về ngôn ngữ này, điều này sẽ mang lại lợi ích trong quá trình phát triển hàng ngày Đánh dấu là đã hoàn thành Xem ngay Hướng dẫn này có một khóa học video liên quan do nhóm Real Python tạo. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn. Phỏng vấn lập trình Python. Mẹo & Phương pháp hay nhất 🐍 Thủ thuật Python 💌 Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python Gửi cho tôi thủ thuật Python » Giới thiệu về James Timmins James là nhà tư vấn phần mềm và nhà phát triển Python. Khi anh ấy không viết Python, anh ấy thường viết về nó dưới dạng blog hoặc sách » Thông tin thêm về JamesMỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là Aldren Geir Arne Joanna Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia Nâng cao kỹ năng Python của bạn » Chuyên gia Kỹ năng Python trong thế giới thực Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia Nâng cao kỹ năng Python của bạn » Bạn nghĩ sao? Đánh giá bài viết này Tweet Chia sẻ Chia sẻ EmailBài học số 1 hoặc điều yêu thích mà bạn đã học được là gì? Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi Cracking the Coding Interview có sẵn trong Python không?Đây là các giải pháp Python cho cuốn sách Cracking the Coding Interview, 6th Edition của Gayle Laakmann McDowell.
Làm cách nào để bẻ khóa các bài kiểm tra Python phỏng vấn mã hóa?Làm thế nào để bạn trả lời các câu hỏi phỏng vấn viết mã Python? . Thử thử nghiệm mô hình, tìm hiểu mọi chi tiết trong khi viết mã, vẽ một ví dụ cụ thể, thiết kế thuật toán, tối ưu hóa thuật toán, viết mã và kiểm tra thuật toán .
Cracking the Coding Interview có đáng mua không?Nếu bạn đã sẵn sàng bắt đầu phỏng vấn với các công ty FAANG, Cracking the Coding Interview đáng để bạn dành thời gian và đầu tư . Nó bao gồm mọi thứ từ quy trình phỏng vấn đến các tình huống đặc biệt, chuẩn bị trước khi phỏng vấn đến các câu hỏi về hành vi, Big O đến các câu hỏi kỹ thuật, đến 189 câu hỏi lập trình trong thế giới thực.
Cracking the Coding Interview có khó không?Khi bạn tham gia một cuộc phỏng vấn lập trình, rất ít khả năng bạn sẽ gặp phải một vấn đề mà bạn đã gặp trước đây. Các câu hỏi kỹ thuật mà bạn gặp phải sẽ trừu tượng và rất khó giải quyết . |