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