Python có phù hợp cho cuộc phỏng vấn viết mã không?

Bất kỳ cuộc phỏng vấn lập trình nào cũng là một bài kiểm tra chủ yếu tập trung vào các kỹ năng kỹ thuật và kiến ​​thức về thuật toán của bạn. Tuy nhiên, nếu bạn muốn nổi bật giữa hàng trăm ứng viên được phỏng vấn, bạn nên biết cách sử dụng các chức năng phổ biến của Python một cách thuận tiện.

Trước khi tiếp tục, hãy đọc về Self in Python và markdown là gì

Loại phỏng vấn mà bạn có thể phải đối mặt có thể là thử thách mã hóa từ xa, thử thách bảng trắng hoặc phỏng vấn tại chỗ cả ngày. Vì vậy, nếu bạn có thể chứng minh kỹ năng viết mã đã học trong các lớp lập trình python của mình trong cuộc phỏng vấn. Bạn có thể xem qua một số câu hỏi và câu trả lời phỏng vấn Python hàng đầu do các chuyên gia cung cấp, được chia thành ba cấp độ - người mới bắt đầu, trung cấp và cao cấp. Thực hành kỹ lưỡng những câu hỏi và câu trả lời này trên Python chắc chắn sẽ giúp bạn đạt được công việc mơ ước với tư cách là Nhà phát triển Python, kỹ sư Full Stack và các hồ sơ hàng đầu khác

Một cuộc phỏng vấn mã hóa Python về cơ bản là một cuộc phỏng vấn kỹ thuật. Chúng không chỉ là giải quyết vấn đề, chúng còn quan trọng hơn về trình độ kỹ thuật của bạn và cách bạn có thể viết mã Python hiệu quả. Điều này sẽ cho thấy kiến ​​thức chuyên sâu của bạn về Python và cách bạn có thể sử dụng các hàm và thư viện tích hợp sẵn của Python để triển khai mã của mình. Xem qua khóa học về python nâng cao tốt nhất của chúng tôi để tìm hiểu thêm về các khái niệm liên quan đến Python. Chúng ta hãy xem xét một số hàm tích hợp do Python cung cấp và cách chọn hàm đúng, tìm hiểu về cách sử dụng hiệu quả các cấu trúc dữ liệu, cách sử dụng các thư viện tiêu chuẩn trong Python, v.v.

Làm thế nào để chọn chức năng tích hợp chính xác?

Thư viện các hàm dựng sẵn của Python nhỏ so với thư viện tiêu chuẩn. Các chức năng tích hợp sẵn luôn có sẵn và không cần phải nhập. Nên tìm hiểu từng chức năng trước khi phỏng vấn. Cho đến lúc đó, chúng ta hãy tìm hiểu một vài chức năng tích hợp và cách sử dụng chúng cũng như những lựa chọn thay thế nào có thể được sử dụng

Thực hiện phép lặp với enumerate[] thay vì range[]

Xem xét một tình huống trong một cuộc phỏng vấn mã hóa. Bạn có một danh sách các phần tử và bạn phải lặp lại danh sách với quyền truy cập vào cả chỉ số và giá trị.  

Để phân biệt giữa phép lặp với enumerate[]  và phép lặp với phạm vi[], chúng ta hãy xem câu hỏi phỏng vấn viết mã cổ điển FizzBuzz. Nó có thể được giải quyết bằng cách lặp lại cả chỉ số và giá trị. Bạn sẽ được cung cấp một danh sách các số nguyên và nhiệm vụ của bạn sẽ như sau

  1. Thay thế tất cả các số nguyên được phân phối đều cho 3 bằng “fizz”
  2. Thay thế tất cả các số nguyên chia hết cho 5 bằng “buzz”
  3. Thay thế tất cả các số nguyên chia hết cho 3 và 5 bằng “fizzbuzz”

Các nhà phát triển sử dụng range[] trong những trường hợp này để có thể truy cập các phần tử theo chỉ mục

>>> list_num = [30, 29, 10, 65, 95, 99]
>>> for i in range[len[list_num]]:
      if list_num[i] % 3 == 0 and list_num[i] % 5 == 0:
          list_num[i] = 'fizzbuzz'
      elif list_num[i] % 3 == 0:
          list_num[i] = 'fizz'
      elif list_num[i] % 5 == 0:
          list_num[i] = 'buzz'
 
>>> list_num
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']

Mặc dù phạm vi [] có thể được sử dụng trong nhiều phương pháp lặp, nhưng tốt hơn là sử dụng kiểu liệt kê [] trong trường hợp này vì nó có thể truy cập vào chỉ mục và giá trị của phần tử cùng một lúc

>>> list_num = [30, 29, 10, 65, 95, 99]
>>> for i,num in enumerate[list_num]:
      if list_num[i] % 3 == 0 and list_num[i] % 5 == 0:
          list_num[i] = 'fizzbuzz'
      elif list_num[i] % 3 == 0:
          list_num[i] = 'fizz'
      elif list_num[i] % 5 == 0:
          list_num[i] = 'buzz'

>>> list_num
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']

Hàm enumerate[] trả về một bộ đếm và giá trị phần tử cho mỗi phần tử. Bộ đếm được đặt thành 0 theo mặc định, đây cũng là chỉ mục của phần tử.  

Tuy nhiên, nếu bạn không sẵn sàng bắt đầu bộ đếm của mình từ 0, bạn có thể đặt giá trị bù bằng tham số bắt đầu

>>> list_num = [30, 29, 10, 65, 95, 99]
>>> for i, num in enumerate[list_num, start=11]:
      print[i, num] 
11 30
12 29
13 10
14 65
14 95
16 99

Bạn có thể truy cập tất cả các phần tử giống nhau bằng cách sử dụng tham số bắt đầu. Tuy nhiên, số lượng sẽ bắt đầu từ giá trị số nguyên được chỉ định

Sử dụng Khả năng hiểu danh sách thay cho map[] và filter[]

Python hỗ trợ khả năng hiểu danh sách dễ đọc hơn và có chức năng tương tự như map[] và filter[]. Đây là một trong những lý do tại sao Guido van Rossum, người tạo ra Python cảm thấy rằng việc loại bỏ map[] và filter[] là điều hoàn toàn không gây tranh cãi

Một ví dụ để hiển thị  map[] cùng với cách hiểu danh sách tương đương này

>>> list_num = [1, 2, 3, 4, 5, 6]
>>> def square_num[z]:
..    return z*z
...
>>> list[map[square_num, list_num]]
[1, 4, 9, 16, 25, 36]

>>> [square_num[z] for z in numbers]
[1, 4, 9, 16, 25, 36]

Mặc dù bản đồ [] và khả năng hiểu danh sách trả về cùng một giá trị nhưng phần hiểu danh sách dễ đọc và dễ hiểu hơn

Một ví dụ để hiển thị  filter[] và khả năng hiểu danh sách tương đương của nó

>>> def odd_num_check[z]:
      return bool[z % 2]
 
>>> list[filter[odd_num_check, num_list]]
[1, 3, 5]

>>> [z for z in numbers if odd_num_check[z]]
[1, 3, 5]

Tương tự với filter[] cũng như với map[]. Các giá trị trả về giống nhau nhưng việc hiểu danh sách dễ theo dõi hơn

Việc hiểu danh sách dễ đọc hơn và người mới bắt đầu có thể nắm bắt nó một cách trực quan hơn

Mặc dù các nhà phát triển ngôn ngữ lập trình khác có thể tranh luận về thực tế nhưng nếu bạn sử dụng khả năng hiểu danh sách trong cuộc phỏng vấn mã hóa của mình, thì có nhiều khả năng bạn sẽ truyền đạt kiến ​​thức của mình về các chức năng phổ biến cho nhà tuyển dụng

Gỡ lỗi Với breakpoint[] thay vì print[]

Gỡ lỗi là một phần thiết yếu của việc viết phần mềm và nó cho thấy kiến ​​thức của bạn về các công cụ Python sẽ hữu ích trong việc phát triển nhanh chóng trong công việc của bạn về lâu dài. Tuy nhiên, sử dụng print[] để gỡ lỗi một vấn đề nhỏ ban đầu có thể tốt nhưng mã của bạn sẽ trở nên vụng về. Mặt khác, nếu bạn sử dụng trình sửa lỗi như breakpoint[], nó sẽ luôn hoạt động nhanh hơn print[]

Nếu bạn đang sử dụng Python 3. 7, bạn có thể chỉ cần gọi breakpoint[] tại điểm trong mã mà bạn muốn gỡ lỗi mà không cần nhập bất kỳ thứ gì

# Complicated Code With Bugs
...
...
...
breakpoint[]

Bất cứ khi nào bạn gọi breakpoint[], bạn sẽ được đưa vào Trình gỡ lỗi Python - pdb. Tuy nhiên, nếu bạn đang sử dụng Python 3. 6 trở lên, bạn có thể thực hiện nhập rõ ràng giống hệt như gọi điểm dừng []

import pdb; pdb.set_trace[]

Trong ví dụ này, bạn đang được pdb đưa vào pdb. set_trace[]. Vì hơi khó nhớ nên nên dùng breakpoint[] mỗi khi cần debug. Ngoài ra còn có các trình gỡ lỗi khác mà bạn có thể thử. Làm quen với trình sửa lỗi trước cuộc phỏng vấn của bạn sẽ là một lợi thế lớn nhưng bạn luôn có thể quay lại pdb vì nó là một phần của Thư viện chuẩn Python và luôn có sẵn.  

Định dạng chuỗi với sự trợ giúp của chuỗi f

Có thể gây nhầm lẫn khi biết chúng ta nên sử dụng loại định dạng chuỗi nào vì Python bao gồm một số kỹ thuật định dạng chuỗi khác nhau. Tuy nhiên, đó là một cách tiếp cận tốt và được đề xuất sử dụng chuỗi f của Python trong cuộc phỏng vấn viết mã cho Python 3. 6 hoặc cao hơn

Nội suy chuỗi ký tự hoặc chuỗi f là một kỹ thuật định dạng chuỗi mạnh mẽ, dễ đọc hơn, ngắn gọn hơn, nhanh hơn và ít bị lỗi hơn các kỹ thuật định dạng khác. Nó hỗ trợ ngôn ngữ mini định dạng chuỗi giúp phép nội suy chuỗi đơn giản hơn. Bạn cũng có tùy chọn thêm các biến và biểu thức Python mới và chúng có thể được đánh giá trước thời gian chạy

________số 8

Chuỗi f cho phép bạn thêm tên Alex vào chuỗi và tuổi tương ứng của anh ấy với kiểu định dạng bạn muốn trong một thao tác duy nhất

Lưu ý rằng nên sử dụng Chuỗi mẫu nếu đầu ra bao gồm các giá trị do người dùng tạo

Sắp xếp danh sách phức tạp với sorted[]

Có rất nhiều câu hỏi phỏng vấn chủ yếu dựa trên việc sắp xếp và đó là một trong những khái niệm quan trọng nhất mà bạn nên hiểu rõ trước khi tham gia một cuộc phỏng vấn viết mã. Tuy nhiên, sử dụng sorted[] luôn là một lựa chọn tốt hơn trừ khi người phỏng vấn yêu cầu bạn tạo thuật toán sắp xếp của riêng mình

Mã ví dụ để minh họa cách sử dụng sắp xếp đơn giản như sắp xếp số hoặc chuỗi

>>> sorted[[6,5,3,7,2,4,1]]
[1, 2, 3, 4, 5, 6, 7]

>>> sorted[['IronMan', 'Batman', 'Thor', 'CaptainAmerica', 'DoctorStrange'], reverse=False]
['Batman', 'CaptainAmerica', 'DoctorStrange', 'IronMan', 'Thor']

sorted[] thực hiện sắp xếp theo thứ tự tăng dần theo mặc định và cả khi đối số đảo ngược được đặt thành Sai.  

Nếu bạn sắp xếp các loại dữ liệu phức tạp, bạn có thể muốn thêm một chức năng cho phép các quy tắc sắp xếp tùy chỉnh

>>> list_num = [30, 29, 10, 65, 95, 99]
>>> for i,num in enumerate[list_num]:
      if list_num[i] % 3 == 0 and list_num[i] % 5 == 0:
          list_num[i] = 'fizzbuzz'
      elif list_num[i] % 3 == 0:
          list_num[i] = 'fizz'
      elif list_num[i] % 5 == 0:
          list_num[i] = 'buzz'

>>> list_num
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
0

Bạn có thể dễ dàng sắp xếp danh sách từ điển bằng từ khóa lambda. Trong ví dụ trên, lambda trả về tuổi của từng phần tử và từ điển được sắp xếp theo thứ tự tăng dần theo tuổi

Sử dụng hiệu quả cấu trúc dữ liệu

Cấu trúc dữ liệu là một trong những khái niệm quan trọng nhất bạn nên biết trước khi tham gia phỏng vấn và nếu bạn chọn cấu trúc dữ liệu hoàn hảo trong bối cảnh phỏng vấn, nó chắc chắn sẽ ảnh hưởng đến hiệu suất của bạn.  

Việc triển khai cấu trúc dữ liệu tiêu chuẩn của Python cực kỳ mạnh mẽ và cung cấp nhiều chức năng mặc định chắc chắn sẽ hữu ích trong các cuộc phỏng vấn viết mã

Lưu trữ giá trị với Sets

Sử dụng bộ thay vì danh sách bất cứ khi nào bạn muốn xóa các phần tử trùng lặp khỏi tập dữ liệu hiện có

Hãy xem xét một hàm random_word luôn trả về một từ ngẫu nhiên trong một tập hợp các từ

>>> list_num = [30, 29, 10, 65, 95, 99]
>>> for i,num in enumerate[list_num]:
      if list_num[i] % 3 == 0 and list_num[i] % 5 == 0:
          list_num[i] = 'fizzbuzz'
      elif list_num[i] % 3 == 0:
          list_num[i] = 'fizz'
      elif list_num[i] % 5 == 0:
          list_num[i] = 'buzz'

>>> list_num
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
1

Trong ví dụ trên, bạn cần gọi random_word nhiều lần để nhận 1000 lựa chọn ngẫu nhiên và sau đó trả về cấu trúc dữ liệu sẽ chứa mọi từ duy nhất

Chúng ta hãy xem xét ba cách tiếp cận để thực hiện điều này – hai cách tiếp cận dưới mức tối ưu và một cách tiếp cận tốt

Cách tiếp cận tồi

Một ví dụ để lưu trữ các giá trị trong một danh sách và sau đó chuyển đổi chúng thành một tập hợp

>>> list_num = [30, 29, 10, 65, 95, 99]
>>> for i,num in enumerate[list_num]:
      if list_num[i] % 3 == 0 and list_num[i] % 5 == 0:
          list_num[i] = 'fizzbuzz'
      elif list_num[i] % 3 == 0:
          list_num[i] = 'fizz'
      elif list_num[i] % 5 == 0:
          list_num[i] = 'buzz'

>>> list_num
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
2

Trong ví dụ này, tạo một danh sách và sau đó chuyển đổi nó thành một tập hợp là cách tiếp cận không cần thiết. Người phỏng vấn nhận thấy loại thiết kế này và đặt câu hỏi chung về nó

Cách tiếp cận tồi tệ hơn

Bạn có thể lưu trữ các giá trị vào danh sách để tránh chuyển đổi từ danh sách thành tập hợp. Sau đó, bạn có thể 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 tại trong danh sách

>>> list_num = [30, 29, 10, 65, 95, 99]
>>> for i,num in enumerate[list_num]:
      if list_num[i] % 3 == 0 and list_num[i] % 5 == 0:
          list_num[i] = 'fizzbuzz'
      elif list_num[i] % 3 == 0:
          list_num[i] = 'fizz'
      elif list_num[i] % 5 == 0:
          list_num[i] = 'buzz'

>>> list_num
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
3

Cách tiếp cận này tệ hơn nhiều so với cách trước vì bạn phải so sánh từng từ với từng từ khác đã có trong danh sách. Nói một cách đơn giản, độ phức tạp về thời gian trong trường hợp này lớn hơn nhiều so với ví dụ trước đó

Cách tiếp cận tốt

Trong ví dụ này, bạn có thể bỏ qua các danh sách và sử dụng các bộ hoàn toàn ngay từ đầu

>>> list_num = [30, 29, 10, 65, 95, 99]
>>> for i,num in enumerate[list_num]:
      if list_num[i] % 3 == 0 and list_num[i] % 5 == 0:
          list_num[i] = 'fizzbuzz'
      elif list_num[i] % 3 == 0:
          list_num[i] = 'fizz'
      elif list_num[i] % 5 == 0:
          list_num[i] = 'buzz'

>>> list_num
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
4

This approach differs from the second approach as the storing of elements in this approach allows near-constant-time-checks whether a value is present in the set or not whereas linear time-lookups were required when lists were used. The time complexity for this approach is O[N] which is much better than the second approach whose time complexity grew at the rate of O[N²]

Saving Memory with Generators

Though lists comprehensions are convenient tools, it may lead to excessive use of memory

Consider a situation where you need to find the sum of the first 1000 squares starting with 1 using list comprehensions

>>> list_num = [30, 29, 10, 65, 95, 99]
>>> for i,num in enumerate[list_num]:
      if list_num[i] % 3 == 0 and list_num[i] % 5 == 0:
          list_num[i] = 'fizzbuzz'
      elif list_num[i] % 3 == 0:
          list_num[i] = 'fizz'
      elif list_num[i] % 5 == 0:
          list_num[i] = 'buzz'

>>> list_num
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
5
>>> list_num = [30, 29, 10, 65, 95, 99]
>>> for i,num in enumerate[list_num]:
      if list_num[i] % 3 == 0 and list_num[i] % 5 == 0:
          list_num[i] = 'fizzbuzz'
      elif list_num[i] % 3 == 0:
          list_num[i] = 'fizz'
      elif list_num[i] % 5 == 0:
          list_num[i] = 'buzz'

>>> list_num
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
6

Your solution returns the correct answer by making a list of every perfect square and then sums the values. However, the interviewer asks you to increase the number of perfect squares.  

Initially, your program might work well but it will gradually slow down and the process will be changed completely.  

However, you can resolve this memory issue just by replacing the brackets with parentheses

>>> list_num = [30, 29, 10, 65, 95, 99]
>>> for i,num in enumerate[list_num]:
      if list_num[i] % 3 == 0 and list_num[i] % 5 == 0:
          list_num[i] = 'fizzbuzz'
      elif list_num[i] % 3 == 0:
          list_num[i] = 'fizz'
      elif list_num[i] % 5 == 0:
          list_num[i] = 'buzz'

>>> list_num
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
7
>>> list_num = [30, 29, 10, 65, 95, 99]
>>> for i,num in enumerate[list_num]:
      if list_num[i] % 3 == 0 and list_num[i] % 5 == 0:
          list_num[i] = 'fizzbuzz'
      elif list_num[i] % 3 == 0:
          list_num[i] = 'fizz'
      elif list_num[i] % 5 == 0:
          list_num[i] = 'buzz'

>>> list_num
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
6

When you make the change from brackets to parentheses, the list comprehension changes to generator expressions. It returns a generator object. The object calculates the next value only when asked.  

Generators are mainly used on massive sequences of data and in situations when you want to retrieve data from a sequence but don’t want to access all of it at the same time

Defining Default Values in Dictionaries with . get[] and . setdefault[]

Adding, modifying, or retrieving an item from a dictionary is one of the most primitive tasks of programming and it is easy to perform with Python functionalities. However, developers often check explicitly for values even its not necessary

Consider a situation where a dictionary named shepherd exists and you want to get that cowboy’s name by explicitly checking for the key with a conditional

>>> list_num = [30, 29, 10, 65, 95, 99]
>>> for i,num in enumerate[list_num]:
      if list_num[i] % 3 == 0 and list_num[i] % 5 == 0:
          list_num[i] = 'fizzbuzz'
      elif list_num[i] % 3 == 0:
          list_num[i] = 'fizz'
      elif list_num[i] % 5 == 0:
          list_num[i] = 'buzz'

>>> list_num
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
9

In this example, the key name is searched in the dictionary and the corresponding value is returned otherwise a default value is returned

You can use . get[] in a single line instead of checking keys explicitly

>>> list_num = [30, 29, 10, 65, 95, 99]
>>> for i, num in enumerate[list_num, start=11]:
      print[i, num] 
0

The get[] performs the same operation as the first approach does, but they are now handled automatically.  

However, . get[] function does not help in situations where you need to update the dictionary with a default value while still accessing the same key. In such a case, you again need to use explicit checking

>>> list_num = [30, 29, 10, 65, 95, 99]
>>> for i, num in enumerate[list_num, start=11]:
      print[i, num] 
1

However, Python still offers a more elegant way of performing this approach using . setdefault[]

>>> list_num = [30, 29, 10, 65, 95, 99]
>>> for i, num in enumerate[list_num, start=11]:
      print[i, num] 
2

The . setdefault[] function performs the same operation as the previous approach did. If name exists in shepherd, it returns a value otherwise it sets shepherd[‘name’]  to The Man with No Name and returns a new value

Taking Advantage of the Python Standard Library

Python functionalities are powerful on their own and all the things can be accessed just by using the import statement. If you know how to make good use of the standard library, it will boost your coding interview skills

How to handle missing dictionaries?

You can use . get[] and . setdefault[] when you want to set a default for a single key. However, there will be situations where you will need to set a default value for all possible unset keys, especially during the context of a coding interview

Consider you have a  group of students and your task is to keep track of their grades on assignments. The input value is a tuple with student_name and grade. You want to look upon all the grades for a single student without iterating over the whole list.  

An example to store grade data using a dictionary

>>> list_num = [30, 29, 10, 65, 95, 99]
>>> for i, num in enumerate[list_num, start=11]:
      print[i, num] 
3
>>> list_num = [30, 29, 10, 65, 95, 99]
>>> for i, num in enumerate[list_num, start=11]:
      print[i, num] 
4

In the example above, you iterate over the list and check if the names are already present in the dictionary or not. If it isn’t, then you add them to the dictionary with an empty list and then append their actual grades to the student’s list of grades

However, the previous approach is good but there is a cleaner approach for such cases using the defaultdict

>>> list_num = [30, 29, 10, 65, 95, 99]
>>> for i, num in enumerate[list_num, start=11]:
      print[i, num] 
5

In this approach, a defaultdict is created that uses the list[] with no arguments. The list[]returns an empty list. defaultdict calls the list[] if the name does not exist and then appends the grade

Using the defaultdict, you can handle all the common default values at once and need not worry about default values at the key level. Moreover, it generates a much cleaner application code

How to Count Hashable Objects?

Pretend you have a long string of words with no punctuation or capital letters and you are asked to count the number of the appearance of each word. In this case, you can use collections. Counter that uses 0 as the default value for any missing element and makes it easier and cleaner to count the occurrence of different objects

>>> list_num = [30, 29, 10, 65, 95, 99]
>>> for i, num in enumerate[list_num, start=11]:
      print[i, num] 
6
>>> list_num = [30, 29, 10, 65, 95, 99]
>>> for i, num in enumerate[list_num, start=11]:
      print[i, num] 
7

When the list is passed to Counter, it stores each word and also the number of occurrences of that word in the list

If you want to know the two most common words in a list of strings like above, you can use . most_common[] which simply returns the n most frequently inputs by count

>>> list_num = [30, 29, 10, 65, 95, 99]
>>> for i, num in enumerate[list_num, start=11]:
      print[i, num] 
8
>>> list_num = [30, 29, 10, 65, 95, 99]
>>> for i, num in enumerate[list_num, start=11]:
      print[i, num] 
9

If you want to check whether ‘A’ > ‘a’ or not, you have to do it using the ASCII chart. The answer will be false since the ASCII value for A is 65 and a is 97, which is clearly greater.  

However, it would be a difficult task to remember the ASCII code when it comes to lowercase and uppercase ASCII characters and also this method is a bit clumsy. You can use the much easier and more convenient constants which are a part of the string module.  

An example to check whether all the characters in a string are uppercase or not

11 30
12 29
13 10
14 65
14 95
16 99
0

The function check_if_upper iterates over the letters in words and checks whether the letters are part of string. ascii_uppercase. It is set to the literal ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ’

There are a number of string constants that are frequently used for referencing string values that are easy to read and use. Some of which are as follows

  • string. ascii_letters
  • string. ascii_upercase
  • string. ascii_lowercase
  • string. ascii_digits
  • string. ascii_hexdigits
  • string. ascii_octdigits
  • string. ascii_punctuation
  • string. ascii_printable
  • string. ascii_whitespace

Conclusion

Clearing interview with confidence and panache is a skill. You might be a good programmer but it’s only a small part of the picture. You might fail to clear a few interviews, but if you follow a good process, it will certainly help you in the long run. Being enthusiastic is an important factor that will have a huge impact on your interview results. In addition to that is practice. Practice always helps. Brush up on all the common interview concepts and then head off to practicing different interview questions. Interviewers also help during interviews if you can communicate properly and interact. Ask questions and always talk through brute-force and optimized solution

Let us now sum up what we have learned in this article so far

  • To use enumerate[] to iterate over both indices and values
  • To debug problematic code with breakpoint[]
  • To format strings effectively with f-strings
  • To sort lists with custom arguments
  • To use generators instead of list comprehensions to save memory
  • To define default values when looking up dictionary keys
  • To count hashable objects with collections. Counter class

Hope you have learned about most of the powerful Python’s built-in functions, data structures, and standard library packages that will help you in writing better, faster, and cleaner code. Though there are a lot of other things to learn about the language, join Knowledgehut python programming classes to gain more skills and knowledge.  

Can I use Python for Google coding interview?

Can I use Python in Google interviews? Yes, you can use Python in your Google interview .

What is the best language for programming interviews?

Here are the top 5 programming languages that you need to master for cracking FAANG interviews . .
Java. Java is a strong object-oriented programming language that may also be used for general-purpose programming. .
Golang. .
Python. .
Kotlin. .
JavaScript

Chủ Đề