https://zhuanlan.zhihu.com/p/112165822python
看书,看视频均可以帮助你学习代码,但都只是辅助做用,学好 Python,最重要的仍是 多敲代码,多刷题。面试
不知道怎么找题刷题的小伙伴,能够看看咱们今天带来的《Python 百题大冲关》。覆盖了基本语法,数据结构,算法等多个方面,并附有答案。算法
100 道 Python 练习题,刷起来!!!数组
Python 百题大冲关 www.shiyanlou.com
如下是前四道题目:数据结构
1、肯定字符串是否包含惟一字符
题目介绍:app
实现一个算法:识别一个字符串中,是否包含惟一的字符。less
- 若是字符串中的字符都是惟一的,则返回
True
,如 '123'。 - 若是字符串中的字符有重复,则返回
False
,如 '1223'。
考核点:集合的用法:set()学习
解题思路:flex
看到这个题目,你的第一反应多是:先把字符串中每一个字符都拆分出来,放入一个列表,再统计列表中是否有数量为 1 的字符。但这么作不但费时,并且要循环屡次,效率极低,有一个方法可让你超过 99 % 的面试者:url
记得 Python 的 Set (集合) 概念吗?在集合中,全部的元素都是惟一的。你能够使用 set() 方法将字符串、列表等任何「可迭代对象」转换为集合,转换后会删除重复的元素,继而长度会发生变化。
因此,咱们只须要将字符串转换为集合,而后比较转换先后的长度便可,代码以下。
参考答案:
class UniqueChars(object):
def has_unique_chars(self, string):
if string is None:
return False
return len(set(string)) == len(string)
2、肯定字符串是不是另外一个的排列
题目介绍:
实现一个算法来识别一个字符串 str2 是不是另外一个字符串 str1 的排列。排列的解释以下:
- 若是将 str1 的字符拆分开,从新排列后再拼接起来,可以获得 str2 ,那么就说字符串 str2 是字符串 str1 的排列。例如:123 是 321 的排列,abc 是 cba 的排列。
- 若是 str2 字符串是 str1 字符串的排列,则返回 True;反之则返回 False;
考核点:sorted()方法
解题思路:
同样是看起来复杂,但只需一行核心代码就能搞定的题目。在其余语言中,你可能要手动写一个排序算法,而后比较两个字符串排序后是否同样。但 Python 自带的 sorted() 方法,能够自动对全部可迭代的对象进行排序操做。
参考答案:
class Permutations(object):
def is_permutation(self, str1, str2):
if str1 is None or str2 is None:
return False
return sorted(str1) == sorted(str2)
附加知识点:
sort() 和 sorted() 的区别:sort() 应用在 list 列表中,而 sorted() 能够对全部可迭代的对象进行排序操做。
3、反转字符串中的字符
题目介绍:
实现一个算法来实现反转字符数组的功能。反转的要求以下:
- 将字符数组的字符进行反转,例如 ['b', ' ', 'a', 'r'] 变成 ['r', 'a', ' ', 'b']。
- 将字符数组替换为反转后的数组。
考核点:使用 a,b = b,a 交换变量
解题思路:
常规的解法是建立一个相同长度的新数组,而后把第一个数组中的元素,按倒序放入新数组中。但更简单的方法是:利用 Python 交换变量的特性,不须要新建数组,直接在原数组里便可完成,代码以下。
参考答案:
class ReverseString(object):
def reverse(self, chars):
if chars:
size = len(chars)
for i in range(size // 2):
chars[i], chars[size - 1 - i] = \
chars[size - 1 - i], chars[i]
return chars
4、Fizz Buzz 经典问题
题目介绍:
给定一个整数 num,从 1 到 num 按照下面的规则返回每一个数:
- 若是这个数被 3 整除,返回 'Fizz'。
- 若是这个数被 5 整除,返回 'Buzz'。
- 若是这个数能同时被 3 和 5 整除,返回 'FizzBuzz'。
- 若是这个数既不能被 3 也不能被 5 整除,返回这个数字的字符串格式。
考核点:Python 基础语法中的条件判断
解题思路:
有趣又比较简单的一道题,写一个循环便可。当数字被 3 整除时返回 'Fizz',被 5 整除,返回 'Buzz',同时被 3 和 5 整除,返回 'FizzBuzz'……代码以下。
参考答案:
class Solution(object):
def fizz_buzz(self, num):
if num is None:
raise TypeError('num cannot be None')
if num < 1:
raise ValueError('num cannot be less than one')
results = []
for i in range(1, num + 1):
if i % 3 == 0 and i % 5 == 0:
results.append('FizzBuzz')
elif i % 3 == 0:
results.append('Fizz')
elif i % 5 == 0:
results.append('Buzz')
else:
results.append(str(i))
return results
更多题目,欢迎进入课程学习~
如何免费学习:新注册实验楼,会赠送 10 元训练营代金券,而后在支付时使用代金券,便可免费学习该课程。
Python 百题大冲关 www.shiyanlou.com