這些練習題是在神經網路與深度學習課程上老師提供的,原因是有些同學沒學過python,作為簡單的練手習題。題目都很簡單,加上python本身也比較簡單,有些題目的作答可以一行代碼實現(雖然可讀性就下降了)。 ...
使用版本:python 3.6.8
IDE:pycharm
前言
這些練習題是在神經網路與深度學習課程上老師提供的,原因是有些同學沒學過python,作為簡單的練手習題。
題目都很簡單,加上python本身也比較簡單,有些題目的作答可以一行代碼實現(雖然可讀性就下降了)。
練習題
2.1 數位之和
編寫程式,輸入一個正整數,然後輸出各位數字之和。
例如,輸入字元串1234,輸出10。
from functools import reduce
from operator import add
print(reduce(add, map(int, list(input()))))
2.2 字元串翻轉
編寫程式,輸入一個字元串,輸出翻轉(首尾交換)後的字元串,要求使用內置函數實現。
例如,輸入字元串12345,輸出54321。
print(''.join(reversed(input())))
2.3 最大值
編寫程式,輸入一個包含若幹整數的列表,輸出列表中的最大值。
例如,輸入[1, 2, 3, 4, 5, 888],輸出888。
print(max(eval(input())))
2.4 類型轉換——整數轉字元串
編寫程式,輸入一個包含若幹整數的列表,把列表中所有整數轉換為字元串,然後輸出包含這些字元串的列表。
例如,輸入[1, 2, 3, 4, 5, 888],輸出['1', '2', '3', '4', '5', '888']
print(list(map(str, eval(input()))))
2.5 filter
編寫程式,輸入一個包含若幹任意數據的列表,輸出該列表中等價於True的元素組成的列表。
例如,輸入[1, 2, 0, None, False, 'a'],輸出[1, 2, 'a']。
print(list(filter(None, eval(input()))))
2.6 指定key排序
編寫程式,輸入一個包含若幹整數的列表,輸出一個新列表,新列表中奇數在前偶數在後,並且奇數之間的相對順序不變,偶數之間的相對順序也不變。
nums = eval(input())
print(sorted(nums, key=(lambda x: x%2), reverse=True))
3.1 列表推導式與列表求和
阿凡提與國王比賽下棋,國王說要是自己輸了的話阿凡提想要什麼他都可以拿得出來。阿凡提說那就要點米吧,棋盤一共64個小格子,在第一個格子里放1粒米,第二個格子里放2粒米,第三個格子里放4粒米,第四個格子里放8粒米,以此類推,後面每個格子里的米都是前一個格子里的2倍,一直把64個格子都放滿。編寫程式,生成一個列表,其中元素為每個棋盤格子里米的粒數,並輸出這些數字的和,也就是一共需要多少粒米。
要求使用列表推導式。
from functools import reduce
from operator import add
print(reduce(add, [2**x for x in range(64)]))
3.2 列表推導式if篩選
編寫程式,輸入一個包含若幹整數的列表,輸出由其中的奇數組成的新列表。
例如,輸入[1,2,3,4,5,6,7,8],輸出[1, 3, 5, 7]。
要求使用列表推導式。
data = eval(input())
print([x for x in data if x%2==1])
3.3 向量內積
編寫程式,輸入兩個包含若幹整數的等長列表表示兩個向量,輸出這兩個向量的內積。
例如,輸入[1,2,3]和[4,5,6],內積計算方法為1*4 + 2*5 + 3*6 = 32,輸出32。
要求使用列表推導式。
from functools import reduce
from operator import add
x1 = eval(input())
x2 = eval(input())
print(reduce(add, [a*b for (a, b) in zip(x1, x2)]))
3.4 找最大值與其下標
編寫程式,輸入一個包含若幹整數的列表,輸出其中的最大值,以及所有最大值的下標組成的列表。
例如,輸入[1,2,3,1,2,3,3],輸出3和[2, 5, 6]。
要求使用列表推導式。
data = eval(input())
max_num = max(data)
print(max_num, [idx for idx in range(len(data)) if data[idx]==max_num])
3.5 生成隨機序列與計數
編寫程式,首先生成包含1000個隨機數字字元的字元串,然後統計每個數字的出現次數。
from random import choices
import string
s = ''.join(choices(string.digits, k=1000))
print(s)
cnt = {}
for x in s:
cnt[x] = cnt.get(x, 0) + 1
print(cnt)
3.6 字元串去重(保持順序)
編寫程式,輸入一個字元串,輸出其中唯一字元組成的新字元串,要求新字元串中的
字元順序與其在原字元串中的相對順序一樣。
例如,輸入'1122a3344',輸出'12a34'。
s = input()
ss = list(set(s))
ss.sort(key=s.index)
print(''.join(ss))
3.7 集合運算
編寫程式,輸入兩個集合A和B,輸出它們的並集、交集、對稱差集以及差集A-B和B-A。
要求使用集合運算符。
A = set(eval(input()))
B = set(eval(input()))
print(A | B)
print(A & B)
print(A ^ B)
print(A - B)
print(B - A)
3.8 空格去重
編寫程式,輸入一個字元串,刪除其中的重覆空格,也就是如果有連續的多個空格的話就只保留一個,然後輸出處理後的字元串。
s = input()
print(''.join([s[idx] for idx in range(len(s)) if idx==0 or s[idx]!=' ' or s[idx-1]!=' ']))
3.9 母音字母大寫
編寫程式,輸入一個字元串,把其中的母音字母i、o、a、e和u替換成對應的大寫字母,然後輸出新字元串。
vowel = ('a', 'e', 'i', 'o', 'u')
s = input()
print(''.join(list(map(
(lambda x: x.upper() if x in vowel else x),
s
))))
3.10 檢查列表是否存在相同整數
編寫程式,測試列表中的若幹整數之間是否有重覆。
data = eval(input())
print("沒有重覆") if len(data) == len(list(set(data))) else print("存在重覆")
4.7 遞歸實現數位求和
使用遞歸法計算自然數各位數字之和。
def sum_by_digit(num):
return num%10 + sum_by_digit(num//10) if num > 10 else num
test_data = (1234, 6789, 6379)
for test in test_data:
print(f"{test} --> {sum_by_digit(test)}")
4.8 猜數游戲
通過參數可以指定一個整數範圍和猜測的最大次數,系統在指定範圍內隨機產生一個整數,然後讓用戶猜測該數的值,系統根據玩家的猜測進行提示(例如,猜大了,猜小了,猜對了),玩家則可以根據系統的提示對下一次的猜測進行適當調整,直到猜對或次數用完。
from random import choice
config = {
'max_num': 1000,
'min_num': 0,
'max_guess_times': 20
}
answer = choice(range(config['min_num'], config['max_num']+1))
guess_times = 0
while guess_times < config['max_guess_times']:
print(f"猜數游戲,請輸入一個數字,\n範圍是[{config['min_num']}, {config['max_num']}]: ") \
if guess_times == 0 else print("再猜一次: ")
guess = int(input())
guess_times += 1
if guess == answer:
print("猜對了!")
break
elif guess > answer:
print("猜大了")
else:
print("猜小了")
if guess_times >= config['max_guess_times']:
print("--- 機會用完了 ---")