習(xí)題3-基本數(shù)據(jù)類型
1.獲得用戶輸入的一個(gè)整數(shù)逢倍,輸出該整數(shù)百位及以上的數(shù)字怔鳖。
i = input("請(qǐng)輸入一個(gè)整數(shù):")
print( i[:-2] )
2.獲得用戶輸入的一個(gè)字符串摹菠,將字符串按照空格分割盒卸,然后逐行打印出來。
i = input("請(qǐng)輸入一個(gè)帶空格的字符串:")
Is = i.split()
a = len(Is)
for i in range(a) :
print(Is[i])
3.程序讀入一個(gè)表示星期幾的數(shù)字(1—7)次氨,輸出對(duì)應(yīng)的星期字符串名稱蔽介。例如:輸入3,返回“星期三”煮寡。
num = '1234567'
date = '一二三四五六七'
i = input("請(qǐng)輸入任意數(shù)字1~7中的一個(gè):")
if i in num:
a = date[num.index(i)]
print("星期{}".format(a))
4.設(shè)n是一任意自然數(shù)虹蓄,如果n的各個(gè)數(shù)字反向排列所得自然數(shù)與n相等,則n被稱為回文數(shù)幸撕。從鍵盤輸入一個(gè)5位數(shù)字薇组,請(qǐng)編寫程序判斷這個(gè)數(shù)字是不是回文數(shù)。
i = input("輸入一個(gè)5位數(shù)字:")
a = i[::-1]
if a == i :
print("恭喜坐儿,您輸入的是回文數(shù)律胀!")
else :
print("很遺憾宋光,您輸入的不是回文數(shù)!")
5.輸入一個(gè)十進(jìn)制整數(shù)炭菌,分別輸出其二進(jìn)制罪佳、八進(jìn)制、十六進(jìn)制字符串黑低。
i = eval(input("請(qǐng)輸入一個(gè)十進(jìn)制整數(shù):"))
print("二進(jìn)制:{:b}".format(i))
print("八進(jìn)制:{:o}".format(i))
print("十六進(jìn)制:{:x}".format(i))
習(xí)題4-程序的控制結(jié)構(gòu)
1.輸入一個(gè)年份赘艳,輸出是否為閏年。#閏年條件:能被4整除但不能被100整除克握,或者能被400整除的年份都是閏年蕾管。
i = eval(input("請(qǐng)輸入一個(gè)年份:"))
if ((i % 4 == 0) and (i % 100 != 0)) or (i % 400 == 0) :
print("閏年")
else :
print("非閏年")
2.最大公約數(shù)計(jì)算。獲得兩個(gè)整數(shù)菩暗,求出這兩個(gè)整數(shù)的最大公約數(shù)和最小公倍數(shù)掰曾。最大公約數(shù)的計(jì)算一般使用輾轉(zhuǎn)相除法,最小公倍數(shù)則使用兩個(gè)數(shù)的乘積除以最大公約數(shù)
def gcd(a , b) :
i = a % b
if i == 0 :
return b
else :
return gcd(b , i)
def main() :
s1 = eval(input("請(qǐng)輸入較大的數(shù):"))
s2 = eval(input("請(qǐng)輸入較小的數(shù):"))
x = gcd(s1,s2)
print("最大公約數(shù):{}勋眯,最小公倍數(shù):{}".format(x , s1*s2/x))
main()
3.統(tǒng)計(jì)不同字符的個(gè)數(shù)婴梧。用戶從鍵盤鍵入一行字符下梢,編寫一個(gè)程序客蹋,統(tǒng)計(jì)并輸出其中的英文字符、數(shù)字孽江、空格和其他字符的個(gè)數(shù)讶坯。
a = input("請(qǐng)輸入一行字符:")
yw , sz , kg , qt = 0 , 0 , 0 , 0
for i in range(len(a)) :
if a[i] in "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTYUVWXYZ" :
yw += 1
elif a[i] in "0123456789" :
sz += 1
elif a[i] == " " :
kg += 1
else :
qt += 1
print("英文字符:{},數(shù)字字符:{}岗屏,空格字符:{}辆琅,其他字符:{}".format(yw,sz,kg,qt))
4.猜數(shù)字游戲續(xù)。當(dāng)用戶輸入的不是整數(shù)(如字母这刷、浮點(diǎn)數(shù)等)時(shí)婉烟,程序會(huì)終止執(zhí)行退出。改編題目1中的程序暇屋,當(dāng)用戶輸入出錯(cuò)時(shí)給出“輸入內(nèi)容必須為整數(shù)似袁!”的提示,并讓用戶重新輸入咐刨。
import random
target = random.randint(1,1000)
count = 0
while True :
try :
guess = eval(input("請(qǐng)輸入一個(gè)猜測(cè)的整數(shù)(1至1000):"))
except :
print("輸入有誤昙衅,程序已退出!")
break
count += 1
if guess > target :
print("猜大了定鸟!")
elif guess < target :
print("猜小了而涉!")
else :
print("猜對(duì)了!好棒联予!~~~")
print("此輪的猜測(cè)次數(shù)是:",count)
break
while True :
a = input("請(qǐng)輸入一個(gè)年份:")
if a.isdigit() :
break
else :
print("輸入內(nèi)容必須為整數(shù)啼县!")
b = eval(a)
if ((b % 4 == 0) and (b % 100 != 0)) or (b % 400 == 0) :
print("閏年")
else :
print("非閏年")
5.羊車門問題材原。有三扇關(guān)閉的門,一扇門后面停著汽車谭羔,其余門后是山羊华糖,只有主持人知道每扇門后面是什么。參賽者可以選擇一扇門瘟裸,在開啟它之前客叉,主持人會(huì)開啟另外一扇門,露出門后面的山羊话告,然后允許參賽者更換自己的選擇兼搏。請(qǐng)問,參賽者更換后能否增加猜中汽車的機(jī)會(huì)沙郭?——這是一個(gè)經(jīng)典問題佛呻。請(qǐng)使用random庫對(duì)這個(gè)隨機(jī)事件進(jìn)行預(yù)測(cè),分別輸出參賽者改變選擇和堅(jiān)持選擇獲勝的概率病线。
import random
x = random.randint(5000 , 10000)
change = 0
nochange = 0
for i in range(1 , x + 1) :
a = random.randrange(1 , 4)
b = random.randrange(1 , 4)
if a == b :
nochange = nochange + 1
else :
change = change + 1
print("不換吓著,得到汽車的概率為{}".format(nochange / x))
print("換,得到汽車的概率為{}".format(change / x))
習(xí)題5-函數(shù)和代碼復(fù)用
1.實(shí)現(xiàn) isNum() 函數(shù)送挑,參數(shù)為一個(gè)字符串绑莺。如果這個(gè)字符串屬于整數(shù)、浮點(diǎn)數(shù)或者復(fù)數(shù)的表示惕耕,則返回 True纺裁,否則返回 False。
def isNum(i) :
try:
if type(eval(i)) == type(123) or\
type(eval(i)) == type(12.3) or\
type(eval(i)) == type(12.3+3j) :
return True
except :
return False
def main() :
i = input("請(qǐng)輸入一個(gè)字符串:")
print(isNum(i))
main()
2.實(shí)現(xiàn) isPrime() 函數(shù)司澎,參數(shù)為整數(shù)欺缘,要有異常處理。如果整數(shù)是質(zhì)數(shù)挤安,返回 True谚殊,否則返回 False。
def isPrime(mun) :
while True :
try :
if type(eval(mun)) != type(123) :
mun = input("輸入有誤蛤铜,請(qǐng)輸入一個(gè)整數(shù):")
else :
break
except :
mun = input("輸入有誤嫩絮,請(qǐng)輸入一個(gè)整數(shù):")
n = eval(mun)
if n == 1 :
return False
for i in range(2 , n) :
if n % i == 0 :
return False
break
else :
return True
def main() :
i = input("請(qǐng)輸入一個(gè)整數(shù):")
print(isPrime(i))
main()
3.編寫一個(gè)函數(shù)計(jì)算傳入字符串中數(shù)字、字母昂羡、空格以及其他字符的個(gè)數(shù)絮记。
def heFG(a) :
sz , zm , kg , qt = 0 , 0 , 0 , 0
for i in range(len(a)) :
if a[i] in "0123456789" :
sz += 1
elif a[i] in "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTYUVWXYZ" :
zm += 1
elif a[i] == " " :
kg += 1
else :
qt += 1
print("數(shù)字字符:{},字母字符:{}虐先,空格字符:{}怨愤,其他字符:{}".format(sz,zm,kg,qt))
def main() :
a = input("請(qǐng)輸入一行字符串:")
heFG(a)
main()
4.編寫一個(gè)函數(shù),打印200以內(nèi)的所有素?cái)?shù)蛹批,以空格分割撰洗。
def suSHU(n) :
Is = ['2']
a = eval(n)
if a == 1 :
print("1以內(nèi)的素?cái)?shù)是:(None)")
elif a == 2 :
print("2以內(nèi)的素?cái)?shù)是:2")
else :
for mun in range(3,a+1) :
for i in range(2,mun) :
if mun % i == 0 :
break
else :
Is.append(str(mun))
m = " ".join(Is)
print("{}以內(nèi)的素?cái)?shù)是:{}".format(n,m))
def main() :
a = input("請(qǐng)輸入一個(gè)整數(shù)以確定素?cái)?shù)范圍:")
suSHU(a)
main()
5.編寫一個(gè)函數(shù)篮愉,參數(shù)為一個(gè)整數(shù) n。利用遞歸獲取斐波那契數(shù)列中的第 n 個(gè)數(shù)并返回差导。
def guiFEI(n) :
if n == 1 :
return 1
elif n == 2 :
return 1
else :
return guiFEI(n-1) + guiFEI(n-2)
def main() :
n = eval(input("請(qǐng)輸入整數(shù)n:"))
print("斐波那契數(shù)列中第{}個(gè)數(shù)為:{}".format(n,guiFEI(n)))
main()
習(xí)題6-組合數(shù)據(jù)類型
1.英文字符頻率統(tǒng)計(jì)试躏。編寫一個(gè)程序,對(duì)給定字符串中出現(xiàn)的 a~z 字母頻率進(jìn)行分析设褐,忽略大小寫颠蕴,采用降序方式輸出。
txt = input("請(qǐng)輸入一段英文文本:")
txt = txt.lower()
counts = {}
for i in txt:
if i in 'abcdefghijklmnopqrstuvwxyz':
counts[i] = counts.get(i, 0) + 1
ls = list(counts.items())
ls.sort(key=lambda x:x[1], reverse=True)
#指定列表中那一列作為排序的列
for i in range(len(counts)):
word, count = ls[i]
print ("{0:<10}{1:>5}".format(word, count))
2.中文字符頻率統(tǒng)計(jì)助析。編寫一個(gè)程序犀被,對(duì)給定字符串中出現(xiàn)的全部字符(含中文字符)頻率進(jìn)行分析,采用降序方式輸出外冀。
txt = input("請(qǐng)輸入一段中文文本:")
counts = {}
for i in txt:
counts[i] = counts.get(i, 0) + 1
ls = list(counts.items())
ls.sort(key=lambda x:x[1], reverse=True)
#指定列表中那一列作為排序的列
for i in range(len(counts)):
word, count = ls[i]
print ("{0:<10}{1:>5}".format(word, count))
3.隨機(jī)密碼生成寡键。編寫程序在26個(gè)字母大小寫和9個(gè)數(shù)字組成的列表中隨機(jī)生成10個(gè)8位數(shù)密碼。
import random
txt = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
ls = list(txt)
for i in range(10):
a = ""
for i in range(8):
a = random.choice(ls) + a
print(a)
4.重復(fù)元素判斷雪隧。編寫一個(gè)函數(shù)西轩,接收列表作為參數(shù),如果一個(gè)元素在列表中出現(xiàn)了不止一次脑沿,則返回True藕畔,但不改變?cè)瓉砹斜淼闹怠M瑫r(shí)編寫調(diào)用這個(gè)函數(shù)和輸出測(cè)試結(jié)果的程序捅伤。
def repeat(txt):
ls = eval(txt)
counts = {}
for i in ls:
counts[i] = counts.get(i, 0) + 1
if counts[i] > 1:
return True
def main():
txt = input('請(qǐng)輸入一個(gè)列表:')
print(repeat(txt))
main()
5.重復(fù)元素判定續(xù)劫流。利用集合的無重復(fù)性改編上一個(gè)程序巫玻,獲得一個(gè)更快更簡潔的版本丛忆。
def repeat(txt):
ls = eval(txt)
st = set(ls)
if len(ls) != len(st):
return True
def main():
txt = input('請(qǐng)輸入一個(gè)列表:')
print(repeat(txt))
main()
習(xí)題7-文件的數(shù)據(jù)格式化
1.輸入一個(gè)文件和一個(gè)字符,統(tǒng)計(jì)該字符在文件中出現(xiàn)的次數(shù)仍秤。
def countStr(fname, a_str, count):
file = fname + '.txt'
fo = open(file, 'r', encoding='utf-8')
for line in fo:
# 逐行讀入熄诡,逐行處理
for i in line:
if i == a_str:
count = count + 1
print('“{}”字符在《{}》中出現(xiàn)的的次數(shù)是:{}次'.format(a_str, fname, count))
def main():
fname = input('請(qǐng)輸入txt文件名稱:')
a_str = input('請(qǐng)輸入一個(gè)字符:')
count = 0
countStr(fname, a_str, count)
main()
2.假設(shè)有一個(gè)英文文本文件,編寫一個(gè)程序讀取其內(nèi)容并將里面的大寫字母變成小寫字母诗力,小寫字母變成大寫字母凰浮。
def SwitchTxt(fname):
file = fname + '.txt'
tem_fo = open(file, 'r', encoding='utf-8')
new_fo = open('{}轉(zhuǎn)化后.txt'.format(fname), 'w', encoding='utf-8')
for line in tem_fo:
for i in line:
if i in 'abvdefghijklmnopqrstuvwxyz':
i = i.upper()
elif i in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ':
i = i.lower()
new_fo.write(i)
tem_fo.close()
new_fo.close()
def main():
fname = input('請(qǐng)輸入英文文本txt的名稱:')
SwitchTxt(fname)
main()
3.編寫一個(gè)程序,生成一個(gè)10x10的隨機(jī)矩陣并保存為文件(空格分隔行向量苇本、換行分隔列向量)袜茧,在寫程序?qū)偛疟4娴木仃囄募泶鏋镃SV格式,用Excel或文本編輯器打開看看結(jié)果對(duì)不對(duì)瓣窄。
import random
def save_txt(low, high, file_txt):
file = open('{}.txt'.format(file_txt), 'w', encoding='utf-8')
for line in range(10):
a = ''
for row in range(10):
b = str(random.randrange(start=low, stop=high))
a = a + b + ' '
file.write(a + '\n')
file.close()
print('已成功保存 {}.txt 文件笛厦!'.format(file_txt))
def save_csv(file_txt, file_csv):
file_tem = open('{}.txt'.format(file_txt), 'r', encoding='utf-8')
file_new = open('{}.csv'.format(file_csv), 'w', encoding='utf-8')
for line in file_tem:
a = line.replace(' ', ',')
file_new.write(a)
file_tem.close()
file_new.close()
print('已成功保存 {}.csv 文件!'.format(file_csv))
def main():
low, high = eval(input('請(qǐng)輸入隨機(jī)數(shù)的取值范圍<low , high>:'))
file_txt = input('請(qǐng)將要保存的txt文件命名:')
save_txt(low, high, file_txt)
file_csv = input('請(qǐng)將要保存的csv文件命名:')
save_csv(file_txt, file_csv)
main()
# 使用numpy庫生成隨機(jī)矩陣
mport numpy as np
def save_txt(low, high, file_txt):
# np.random.seed(1)
a = np.random.randint(low, high, (10,10))
np.savetxt('{}.txt'.format(file_txt), a, fmt='%d')
print('已成功保存 {}.txt 文件俺夕!'.format(file_txt))
def save_csv(file_txt, file_csv):
b = np.loadtxt('{}.txt'.format(file_txt))
np.savetxt('{}.csv'.format(file_csv), b, fmt='%d', delimiter=',')
print('已成功保存 {}.csv 文件裳凸!'.format(file_csv))
def main():
low, high = eval(input('請(qǐng)輸入隨機(jī)數(shù)的取值范圍<low , high>:'))
file_txt = input('請(qǐng)將要保存的txt文件命名:')
save_txt(low, high, file_txt)
file_csv = input('請(qǐng)將要保存的csv文件命名:')
save_csv(file_txt, file_csv)
main()
4.編寫一個(gè)程序贱鄙,讀取一個(gè)Python源代碼文件,將文件中所有除保留字外的小寫字母替換成大寫字母姨谷,生成后的文件要能夠被Python解釋器正確執(zhí)行逗宁。
- 由于Python源文件對(duì)縮進(jìn)有要求,且大小寫敏感
- 故先將文件保留字全部替換成其他字符梦湘,保存為字典
- 再將源文件全部變?yōu)榇髮?/li>
- 最后利用該字典瞎颗,將替換后的保留字逐個(gè)換回來
- p.s:由于python的大小寫敏感,若源文件引入第三方庫捌议,此方法生成的Python文件解釋器不能正確執(zhí)行
- p.p.s:由于筆者初學(xué)Python言缤,暫時(shí)沒能解決這個(gè)問題,如果大家有更好方法歡迎交流禁灼,共同學(xué)習(xí)進(jìn)步~
keep_words =['and', 'as', 'assert', 'break', 'class', 'continue',
'def', 'del', 'elif', 'else', 'except', 'finally',
'for', 'from', 'global', 'if', 'import', 'in', 'is',
'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise',
'return', 'try', 'while', 'time', 'with', 'yield', 'True',
'False', 'None']
def upper_word(fname_tem, num, keep):
file_tem = open('{}.py'.format(format(fname_tem)), 'r', encoding='utf-8')
file_new = open('{}_changed.py'.format(format(fname_tem)), 'w', encoding='utf-8')
# 逐行讀取管挟,逐行處理,逐行寫入
for line in file_tem:
for word in keep_words:
if word in line:
num = num + 1
keep['編號(hào)%s'%str(num)] = word
line = line.replace(word, '編號(hào)%s'%str(num))
else:
continue
line = line.upper()
for key in keep.keys():
if key in line:
line = line.replace(key, keep[key])
file_new.write(line)
file_tem.close()
file_new.close()
def main():
num = 100
keep = {}
fname_tem = input('請(qǐng)輸入Python源代碼文件名:')
upper_word(fname_tem, num, keep)
main()
5.編寫一個(gè)程序弄捕,要求能夠?qū)⒃貫槿我釶ython支持的類型(包括含有半角逗號(hào)的字符串)的列表轉(zhuǎn)儲(chǔ)為CSV僻孝,并能夠重新正確解析為列表。
def save_csv(ls, fname):
# 向列表中逐個(gè)添加元素
value = input('請(qǐng)向列表總添加一個(gè)元素:')
while value != '':
ls.append(value)
value = input('請(qǐng)向列表總添加一個(gè)元素:')
print('您輸入的列表為:{}'.format(ls))
# 若元素中有半角逗號(hào)守谓,將其替換成點(diǎn)
for i in range(len(ls)):
if ',' in ls[i]:
ls[i] = ls[i].replace(',', '.')
file_csv = open('{}.csv'.format(fname), 'w', encoding='utf-8')
file_csv.write(','.join(ls) + '\n')
file_csv.close()
print('恭喜穿铆!已成功保存<{}.csv>文件!'.format(fname))
def read_csv(lt, fname):
f = open('{}.csv'.format(fname), 'r', encoding='utf-8')
lt = f.read().strip('\n').split(',')
# 將替換后的點(diǎn)換成半角逗號(hào)
for i in range(len(lt)):
if '.' in lt[i]:
lt[i] = lt[i].replace('.', ',')
f.close()
print('<{}.csv>文件讀取中...'.format(fname))
print(lt)
def main():
ls = []
fname = input('請(qǐng)將列表文件命名:')
save_csv(ls, fname)
lt = []
read_csv(lt,fname)
main()
1.此帖僅為學(xué)習(xí)筆記斋荞,答案僅供參考
2.有錯(cuò)誤之處荞雏,歡迎指出,也歡迎學(xué)習(xí)交流
3.不定期更新(然而并沒有人想看) 心塞.jpg (′-ω?`)