匠心精神 - 良心品质腾讯认可的专业机构-IT人的高薪实战学院

咨询电话:4000806560

Python 面试必备:50 道经典编程题

Python 面试必备:50 道经典编程题

作为一名 Python 开发者,我们不仅需要掌握 Python 语言的基础知识,还需要掌握一些算法和数据结构的知识,这样才能在面试中更好地展示自己的技能。在这篇文章中,我们将分享一些 Python 面试中常见的编程题和解答,以帮助读者更好地准备面试并提高自己的编程技能。

1. 编写一个 Python 程序,判断一个字符串是否为回文字符串。

回文字符串是指正着读和反着读都一样的字符串。例如,'racecar' 就是一个回文字符串。

解答:

```python
def is_palindrome(s):
    return s == s[::-1]

s = 'racecar'
print(is_palindrome(s)) 
```

2. 编写一个 Python 程序,找出一个列表中的所有素数。

素数是指只能被 1 和本身整除的自然数。例如,2、3、5、7、11 等都是素数。

解答:

```python
def is_prime(n):
    if n <= 1:
        return False
    for i in range(2, int(n**0.5)+1):
        if n%i == 0:
            return False
    return True

def find_primes(lst):
    return [x for x in lst if is_prime(x)]

lst = [2,3,4,5,6,7,8,9,10,11]
print(find_primes(lst)) 
```

3. 编写一个 Python 程序,将一个字符串中的大写字母转换成小写字母。

解答:

```python
s = 'HELLO World'
print(s.lower()) 
```

4. 编写一个 Python 程序,找出一个列表中的最大值和最小值。

解答:

```python
lst = [2,3,4,5,6,7,8,9,10,11]
print('Max:', max(lst))
print('Min:', min(lst))
```

5. 编写一个 Python 程序,将一个列表中的所有元素反转。

解答:

```python
lst = [2,3,4,5,6,7,8,9,10,11]
print(lst[::-1])
```

6. 编写一个 Python 程序,将一个列表中的所有偶数移到列表末尾。

解答:

```python
lst = [2,3,4,5,6,7,8,9,10,11]
lst = [x for x in lst if x%2!=0] + [x for x in lst if x%2==0]
print(lst)
```

7. 编写一个 Python 程序,输入两个正整数,计算它们的最大公约数和最小公倍数。

解答:

```python
def get_gcd(a, b):
    if b == 0:
        return a
    return get_gcd(b, a%b)

def get_lcm(a, b):
    return a*b//get_gcd(a, b)

a, b = 12, 18
print(get_gcd(a, b))
print(get_lcm(a, b))
```

8. 编写一个 Python 程序,将首字母大写。

解答:

```python
s = 'hello world'
print(s.title())
```

9. 编写一个 Python 程序,检查一个字符串是否由数字组成。

解答:

```python
s = '123456'
print(s.isdigit())
```

10. 编写一个 Python 程序,将一个字符串中的所有单词首字母大写。

解答:

```python
s = 'hello world'
print(s.title())
```

11. 编写一个 Python 程序,判断两个字符串是否为变位词。

变位词是指两个字符串中的字母相同,但排列不同。例如,'silent' 和 'listen' 就是一对变位词。

解答:

```python
from collections import Counter

def is_anagram(s1, s2):
    return Counter(s1) == Counter(s2)

s1 = 'silent'
s2 = 'listen'
print(is_anagram(s1, s2)) 
```

12. 编写一个 Python 程序,找出一个字符串中最长的回文字符串。

解答:

```python
def longest_palindrome(s):
    n = len(s)
    max_len = 0
    start = 0
    for i in range(n):
        for j in range(i, n):
            if s[i:j+1] == s[i:j+1][::-1]:
                if j-i+1 > max_len:
                    max_len = j-i+1
                    start = i
    return s[start:start+max_len]

s = 'bananas'
print(longest_palindrome(s)) 
```

13. 编写一个 Python 程序,将一个字符串中的所有空格替换成下划线。

解答:

```python
s = 'hello world'
s = s.replace(' ', '_')
print(s)
```

14. 编写一个 Python 程序,计算字符串中所有字母出现的次数。

解答:

```python
s = 'hello world'
print({x: s.count(x) for x in set(s)})
```

15. 编写一个 Python 程序,找出一个列表中第 k 小的元素。

解答:

```python
def find_kth(lst, k):
    lst_sorted = sorted(lst)
    return lst_sorted[k-1]

lst = [2,3,4,5,6,7,8,9,10,11]
print(find_kth(lst, 4)) 
```

16. 编写一个 Python 程序,交换两个变量的值。

解答:

```python
a, b = 1, 2
a, b = b, a
print(a, b) 
```

17. 编写一个 Python 程序,删除一个字符串中的所有元音字母。

解答:

```python
s = 'hello world'
s = ''.join([x for x in s if x not in 'aeiouAEIOU'])
print(s)
```

18. 编写一个 Python 程序,找出一个列表中第一个不重复的元素。

解答:

```python
def find_unique(lst):
    return [x for x in lst if lst.count(x)==1][0]

lst = [2,3,4,5,6,7,8,9,10,11,10]
print(find_unique(lst)) 
```

19. 编写一个 Python 程序,找出一个列表中第一个重复的元素。

解答:

```python
def find_duplicate(lst):
    for i in lst:
        if lst.count(i) > 1:
            return i
    return None

lst = [2,3,4,5,6,7,8,9,10,11,10]
print(find_duplicate(lst)) 
```

20. 编写一个 Python 程序,将一个列表中的所有元素合并成一个字符串。

解答:

```python
lst = ['hello', 'world']
print(' '.join(lst))
```

21. 编写一个 Python 程序,查找一个字符串中出现次数最多的字符。

解答:

```python
s = 'hello world'
print(Counter(s).most_common(1)[0][0])
```

22. 编写一个 Python 程序,实现二分查找算法。

解答:

```python
def binary_search(lst, target):
    start, end = 0, len(lst)-1
    while start <= end:
        mid = (start+end)//2
        if lst[mid] == target:
            return mid
        elif lst[mid] < target:
            start = mid+1
        else:
            end = mid-1
    return -1

lst = [2,3,4,5,6,7,8,9,10,11]
print(binary_search(lst, 5))
```

23. 编写一个 Python 程序,实现选择排序算法。

解答:

```python
def selection_sort(lst):
    n = len(lst)
    for i in range(n):
        min_index = i
        for j in range(i+1, n):
            if lst[j] < lst[min_index]:
                min_index = j
        lst[i], lst[min_index] = lst[min_index], lst[i]
    return lst

lst = [2,3,4,5,6,7,8,9,10,11]
print(selection_sort(lst))
```

24. 编写一个 Python 程序,实现插入排序算法。

解答:

```python
def insertion_sort(lst):
    n = len(lst)
    for i in range(1, n):
        j = i-1
        key = lst[i]
        while j>=0 and lst[j]>key:
            lst[j+1] = lst[j]
            j -= 1
        lst[j+1] = key
    return lst

lst = [2,3,4,5,6,7,8,9,10,11]
print(insertion_sort(lst))
```

25. 编写一个 Python 程序,实现归并排序算法。

解答:

```python
def merge_sort(lst):
    if len(lst) <= 1:
        return lst
    mid = len(lst)//2
    left = merge_sort(lst[:mid])
    right = merge_sort(lst[mid:])
    return merge(left, right)

def merge(left, right):
    result = []
    i, j = 0, 0
    while ilst[largest]:
        largest = left
    if rightlst[largest]:
        largest = right
    if largest != i:
        lst[i], lst[largest] = lst[largest], lst[i]
        heapify(lst, n, largest)

lst = [2,3,4,5,6,7,8,9,10,11]
print(heap_sort(lst))
```

28. 编写一个 Python 程序,实现希尔排序算法。

解答:

```python
def shell_sort(lst):
    n = len(lst)
    gap = n//2
    while gap > 0:
        for i in range(gap, n):
            temp = lst[i]
            j = i
            while j >= gap and lst[j-gap] > temp:
                lst[j] = lst[j-gap]
                j -= gap
            lst[j] = temp
        gap //= 2
    return lst

lst = [2,3,4,5,6,7,8,9,10,11]
print(shell_sort(lst))
```

29. 编写一个 Python 程序,实现计数排序算法。

解答:

```python
def counting_sort(lst):
    n = len(lst)
    max_val = max(lst)
    count = [0]*(max_val+1)
    for i in range(n):
        count[lst[i]] += 1
    for i in range(1, max_val+1):
        count[i] += count[i-1]
    result = [0]*n
    for i in range(n-1, -1, -1):
        result[count[lst[i]]-1] = lst[i]
        count[lst[i]] -= 1
    return result

lst = [2,3,4,5,6,7,8,9,10,11]
print(counting_sort(lst))
```

30. 编写一个 Python 程序,实现基数排序算法。

解答:

```python
def radix_sort(lst):
    max_val = max(lst)
    exp = 1
    while max_val//exp > 0:
        lst = counting_sort_by_digit(lst, exp)
        exp *= 10
    return lst

def counting_sort_by_digit(lst, exp):
    n = len(lst)
    count = [0]*(10)
    for i in range(n):
        index = (lst[i]//exp)%10
        count[index] += 1
    for i in range(1, 10):
        count[i] += count[i-1]
    result = [0]*n
    for i in range(n-1, -1, -1):
        index = (lst[i]//exp)%10
        result[count[index]-1] = lst[i]
        count[index] -= 1
    return result

lst = [2,3,4,5,6,7,8,9,10,11]
print(radix_sort(lst))
```

31. 编写一个 Python 程序,实现斐波那契数列。

解答:

```python
def fibonacci(n):
    if n == 1 or n == 2:
        return 1
    return fibonacci(n-1) + fibonacci(n-2)

print([fibonacci(n) for n in range(1, 10)])
```

32. 编写一个 Python 程序,实现阶乘函数。

解答:

```python
def factorial(n):
    if n == 0:
        return 1
    return n * factorial(n-1)

print(factorial(5))
```

33. 编写一个 Python 程序,实现斐波那契数列的优化解法。

解