值得苦練的100道Python經(jīng)典練手題,(附詳細(xì)答案)建議收藏!
嗨嘍大家好卷子又來(lái)了,100道Python經(jīng)典練手題奉上
花了一周的時(shí)間,整理了100道Python的練習(xí)題,如果你是一位初學(xué)者,那么這一份練習(xí)題將會(huì)給你帶來(lái)極大的幫助,如果你能夠完全獨(dú)立的完成這份練習(xí)題,你已經(jīng)入門的Python了,練習(xí)題涵蓋Python基礎(chǔ)的大部分內(nèi)容:【PDF文末拿!】
問(wèn)題1
問(wèn)題:
編寫一個(gè)程序,查找所有此類數(shù)字,它們可以被7整除,但不能是5的倍數(shù)(在2000和3200之間(均包括在內(nèi)))。獲得的數(shù)字應(yīng)以逗號(hào)分隔的順序打印在一行上。
提示:
考慮使用范圍(#begin,#end)方法。
我的解決方案:Python 3
使用for循環(huán)
l=[]
for i in range(2000, 3201):
? ?if (i%7==0) and (i%5!=0):
? ? ? ?l.append(str(i))
print ','.join(l)
使用生成器和列表理解
print(*(i for i in range(2000, 3201) if i%7 == 0 and i%5 != 0), sep=",")
問(wèn)題2
問(wèn)題:
編寫一個(gè)程序,可以計(jì)算給定數(shù)字的階乘,結(jié)果應(yīng)以逗號(hào)分隔的順序打印在一行上,假設(shè)向程序提供了以下輸入:8然后,輸出應(yīng)為:40320
提示:
如果將輸入數(shù)據(jù)提供給問(wèn)題,則應(yīng)假定它是控制臺(tái)輸入。
我的解決方案:Python 3
使用While循環(huán)
n = int(input()) #input() function takes input as string type
#int() converts it to integer type
fact = 1
i = 1
while i <= n:
fact = fact * i;
i = i + 1
print(fact)使用For循環(huán)
n = int(input()) #input() function takes input as string type
#int() converts it to integer type
fact = 1
for i in range(1,n+1):
fact = fact * i
print(fact)使用Lambda函數(shù)
n = int(input())
def shortFact(x): return 1 if x <= 1 else x*shortFact(x-1)
print(shortFact(n))
while True:
try:
? ?num = int(input("Enter a number: "))
? ?break
except ValueError as err:
? ?print(err)
org = num
fact = 1
while num:
? ?fact = num * fact
? ?num = num - 1
print(f'the factorial of {org} is {fact}')
from functools import reduce
def fun(acc, item):
? ?return acc*item
num = int(input())
print(reduce(fun,range(1, num+1), 1))
問(wèn)題3
問(wèn)題:
使用給定的整數(shù)n,編寫程序以生成包含(i,ixi)的字典,該字典為1到n之間的整數(shù)(都包括在內(nèi))。然后程序應(yīng)打印字典。假設(shè)向程序提供了以下輸入:8\
然后,輸出應(yīng)為:
{1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64}
提示:
如果將輸入數(shù)據(jù)提供給問(wèn)題,則應(yīng)假定它是控制臺(tái)輸入。考慮使用dict()
我的解決方案:Python 3:
使用for循環(huán)
n = int(input())
ans = {}
for i in range (1,n+1):
? ?ans[i] = i * i
print(ans)
使用字典理解
n = int(input())
ans={i : i*i for i in range(1,n+1)}
print(ans)
# 演進(jìn)
try:
? ?num = int(input("Enter a number: "))
except ValueError as err:
? ?print(err)
dictio = dict()
for item in range(num+1):
? ?if item == 0:
? ? ? ?continue
? ?else:
dictio[item] = item * item
print(dictio)
num = int(input("Number: "))
print(dict(enumerate([i*i for i in range(1, num+1)], 1)))
這些是第一天解決的問(wèn)題。對(duì)于基本的初學(xué)者學(xué)習(xí)者來(lái)說(shuō),上述問(wèn)題非常容易。我在解決方案中展示了一些簡(jiǎn)單的編碼方法。讓我們看看第二天如何面對(duì)和應(yīng)對(duì)新問(wèn)題。




問(wèn)題
編寫一個(gè)程序,該程序接受以逗號(hào)分隔的4位二進(jìn)制數(shù)字序列作為輸入,然后檢查它們是否可被5整除。被5整除的數(shù)字將以逗號(hào)分隔的順序打印。
例子:
0100,0011,1010,1001
然后輸出應(yīng)為:
1010
注意:假設(shè)數(shù)據(jù)是通過(guò)控制臺(tái)輸入的。
提示:
如果將輸入數(shù)據(jù)提供給問(wèn)題,則應(yīng)假定它是控制臺(tái)輸入。
def check(x): ? ? ? ? ? ? ? ? ? ? ? #轉(zhuǎn)換二進(jìn)制整數(shù)&返回由5零中頻整除
? ?total, pw = 0, 1
? ?reversed(x)
? ?for i in x:
? ? ? ?total+=pw * (ord(i) - 48) ? ?#ORD()函數(shù)返回ASCII值
? ? ? ?pw*=2
? ?return total % 5
data = input().split(",") ? ? ? ? ? #輸入此處,并在','位置分割
lst = []
for i in data:
? ?if check(i) == 0: ? ? ? ? ? ? ?#如果零發(fā)現(xiàn)它是指由零整除并添加到列 lst.append(i)
print(",".join(lst))
或者
def ?check(x):#如果被5整除,則check函數(shù)返回true
? ?return ?int(x,2)%5 ?== ?0 ? ? ? #int(x,b)將x作為字符串,將b作為基數(shù),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#將其轉(zhuǎn)換為十進(jìn)制
數(shù)據(jù) = 輸入()。分割(',')
data ?= ?list(filter(check(data)))#在filter(func,object)函數(shù)中,如果通過(guò)'check'函數(shù)
print(“,”。join(data)找到True,則從'data'中選取元素。
或者
data = input().split(',')
data = [num for num in data if int(num, 2) % 5 == 0]
print(','.join(data))
問(wèn)題12
問(wèn)題:
編寫一個(gè)程序,查找所有介于1000和3000之間的數(shù)字(都包括在內(nèi)),以使數(shù)字的每個(gè)數(shù)字均為偶數(shù)。獲得的數(shù)字應(yīng)以逗號(hào)分隔的順序打印在一行上。
提示:
如果將輸入數(shù)據(jù)提供給問(wèn)題,則應(yīng)假定它是控制臺(tái)輸入。
我的解決方案:Python 3
lst = []
for i in range(1000,3001):
? ?flag = 1
? ?for j in str(i): ? ? ? ? #每個(gè)整數(shù)編號(hào)i被轉(zhuǎn)換成字符串
? ?
? ? ? ?if ord(j)%2 != 0: ? ? #ORD返回ASCII值并且j是i
? ? ? ? ? ?flag = 0 ? ? ? ? ?
? ?if flag == 1:
? ? ? ?lst.append(str(i)) ? #i作為字符串存儲(chǔ)在列表中
print(",".join(lst))
或者
def check(element):
? ?return all(ord(i)%2 == 0 for i in element) ?#所有返回true如果所有的數(shù)字,i是即使在元件
lst = [str(i) for i in range(1000,3001)] ? ? ? ?#創(chuàng)建所有給定數(shù)字的列表,其字符串?dāng)?shù)據(jù)類型為
lst = list(filter(check,lst)) ? ? ? ? ? ? ? ? ? #如果檢查條件失敗,則過(guò)濾器從列表中刪除元素
print(",".join(lst))
lst = [str(i) for i in range(1000,3001)]
lst = list(filter(lambda i:all(ord(j)%2 == 0 for j in i), lst)) ? #使用lambda來(lái)在過(guò)濾器功能內(nèi)部定義函數(shù)
print(",".join(lst))
問(wèn)題13
問(wèn)題:
編寫一個(gè)接受句子并計(jì)算字母和數(shù)字?jǐn)?shù)量的程序。
假設(shè)將以下輸入提供給程序:
hello world! 123
然后,輸出應(yīng)為:
LETTERS 10
DIGITS 3
提示:
如果將輸入數(shù)據(jù)提供給問(wèn)題,則應(yīng)假定它是控制臺(tái)輸入。
word = input()
letter,digit = 0,0
for i in word:
? ?if ('a'<=i and i<='z') or ('A'<=i and i<='Z'):
? ? ? ?letter+=1
? ?if '0'<=i and i<='9':
? ? ? ?digit+=1
print("LETTERS {0}\nDIGITS {1}".format(letter,digit))
或者
word = input()
letter, digit = 0,0
for i in word:
? ?if i.isalpha(): #返回true如果字母表
? ? ? ?letter += 1
? ?elif i.isnumeric(): #返回true如果數(shù)字
? ? ? ?digit += 1
print(f"LETTERS {letter}\n{digits}") #兩種解決方案均顯示兩種不同類型的格式化方法
10-13以上所有問(wèn)題大多是與字符串有關(guān)的問(wèn)題。解決方案的主要部分包括字符串替換函數(shù)和理解方法,以更短的形式寫下代碼。
問(wèn)題14
問(wèn)題:
編寫一個(gè)接受句子的程序,并計(jì)算大寫字母和小寫字母的數(shù)量。
假設(shè)將以下輸入提供給程序:
Hello world!
然后,輸出應(yīng)為:
UPPER CASE 1
LOWER CASE 9
提示:
如果將輸入數(shù)據(jù)提供給問(wèn)題,則應(yīng)假定它是控制臺(tái)輸入。
我的解決方案:Python 3
word = input()
upper,lower = 0,0
for i in word:
? ?if 'a'<=i and i<='z' :
? ? ? ?lower+=1
? ?if 'A'<=i and i<='Z':
? ? ? ?upper+=1
print("UPPER CASE {0}\nLOWER CASE {1}".format(upper,lower))
或者
word = input()
upper,lower = 0,0
for i in word:
? ? ? ?lower+=i.islower()
? ? ? ?upper+=i.isupper()
print("UPPER CASE {0}\nLOWER CASE {1}".format(upper,lower))
或者
string = input("Enter the sentense")
upper = 0
lower = 0
for x in string:
? ?if x.isupper() == True:
? ? ? ?upper += 1
? ?if x.islower() == True:
? ? ? ?lower += 1
print("UPPER CASE: ", upper)
print("LOWER CASE: ", lower)
完整版值得苦練的100道Python經(jīng)典練手題PDF已經(jīng)打包完畢,需要的伙伴可以多多點(diǎn)贊 轉(zhuǎn)發(fā) 讓更多的人看到? 后臺(tái)內(nèi)扣 "學(xué)習(xí)"即可帶走