Python教材
习题3-基本数据类型1.获得用户输入的一个整数,输出该整数百位及以上的数字。 i = input('请输入一个整数:')
print( i[:-2] )
2.获得用户输入的一个字符串,将字符串按照空格分割,然后逐行打印出来。
3.程序读入一个表示星期几的数字(1—7),输出对应的星期字符串名称。例如:输入3,返回“星期三”。 num = '1234567'
date = '一二三四五六七'
i = input('请输入任意数字1~7中的一个:')
if i in num:
a = date[num.index(i)]
print('星期{}'.format(a))
4.设n是一任意自然数,如果n的各个数字反向排列所得自然数与n相等,则n被称为回文数。从键盘输入一个5位数字,请编写程序判断这个数字是不是回文数。
5.输入一个十进制整数,分别输出其二进制、八进制、十六进制字符串。 i = eval(input('请输入一个十进制整数:'))
print('二进制:{:b}'.format(i))
print('八进制:{:o}'.format(i))
print('十六进制:{:x}'.format(i))
习题4-程序的控制结构1.输入一个年份,输出是否为闰年。#闰年条件:能被4整除但不能被100整除,或者能被400整除的年份都是闰年。
2.最大公约数计算。获得两个整数,求出这两个整数的最大公约数和最小公倍数。最大公约数的计算一般使用辗转相除法,最小公倍数则使用两个数的乘积除以最大公约数 def gcd(a , b) :
i = a % b
if i == 0 :
return b
else :
return gcd(b , i)
def main() :
s1 = eval(input('请输入较大的数:'))
s2 = eval(input('请输入较小的数:'))
x = gcd(s1,s2)
print('最大公约数:{},最小公倍数:{}'.format(x , s1*s2/x))
main()
3.统计不同字符的个数。用户从键盘键入一行字符,编写一个程序,统计并输出其中的英文字符、数字、空格和其他字符的个数。
4.猜数字游戏续。当用户输入的不是整数(如字母、浮点数等)时,程序会终止执行退出。改编题目1中的程序,当用户输入出错时给出“输入内容必须为整数!”的提示,并让用户重新输入。 import random
target = random.randint(1,1000)
count = 0
while True :
try :
guess = eval(input('请输入一个猜测的整数(1至1000):'))
except :
print('输入有误,程序已退出!')
break
count = 1
if guess > target :
print('猜大了!')
elif guess < target :
print('猜小了!')
else :
print('猜对了!好棒!~~~')
print('此轮的猜测次数是:',count)
break
5.羊车门问题。有三扇关闭的门,一扇门后面停着汽车,其余门后是山羊,只有主持人知道每扇门后面是什么。参赛者可以选择一扇门,在开启它之前,主持人会开启另外一扇门,露出门后面的山羊,然后允许参赛者更换自己的选择。请问,参赛者更换后能否增加猜中汽车的机会?——这是一个经典问题。请使用random库对这个随机事件进行预测,分别输出参赛者改变选择和坚持选择获胜的概率。 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))
习题5-函数和代码复用1.实现 isNum() 函数,参数为一个字符串。如果这个字符串属于整数、浮点数或者复数的表示,则返回 True,否则返回 False。
2.实现 isPrime() 函数,参数为整数,要有异常处理。如果整数是质数,返回 True,否则返回 False。 def isPrime(mun) :
while True :
try :
if type(eval(mun)) != type(123) :
mun = input('输入有误,请输入一个整数:')
else :
break
except :
mun = input('输入有误,请输入一个整数:')
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('请输入一个整数:')
print(isPrime(i))
main()
3.编写一个函数计算传入字符串中数字、字母、空格以及其他字符的个数。
4.编写一个函数,打印200以内的所有素数,以空格分割。 def suSHU(n) :
Is = ['2']
a = eval(n)
if a == 1 :
print('1以内的素数是:(None)')
elif a == 2 :
print('2以内的素数是: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('{}以内的素数是:{}'.format(n,m))
def main() :
a = input('请输入一个整数以确定素数范围:')
suSHU(a)
main()
5.编写一个函数,参数为一个整数 n。利用递归获取斐波那契数列中的第 n 个数并返回。
习题6-组合数据类型1.英文字符频率统计。编写一个程序,对给定字符串中出现的 a~z 字母频率进行分析,忽略大小写,采用降序方式输出。 txt = input('请输入一段英文文本:')
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.中文字符频率统计。编写一个程序,对给定字符串中出现的全部字符(含中文字符)频率进行分析,采用降序方式输出。
3.随机密码生成。编写程序在26个字母大小写和9个数字组成的列表中随机生成10个8位数密码。 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.重复元素判断。编写一个函数,接收列表作为参数,如果一个元素在列表中出现了不止一次,则返回True,但不改变原来列表的值。同时编写调用这个函数和输出测试结果的程序。
5.重复元素判定续。利用集合的无重复性改编上一个程序,获得一个更快更简洁的版本。 def repeat(txt):
ls = eval(txt)
st = set(ls)
if len(ls) != len(st):
return True
def main():
txt = input('请输入一个列表:')
print(repeat(txt))
main()
习题7-文件的数据格式化1.输入一个文件和一个字符,统计该字符在文件中出现的次数。
2.假设有一个英文文本文件,编写一个程序读取其内容并将里面的大写字母变成小写字母,小写字母变成大写字母。 def SwitchTxt(fname):
file = fname '.txt'
tem_fo = open(file, 'r', encoding='utf-8')
new_fo = open('{}转化后.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('请输入英文文本txt的名称:')
SwitchTxt(fname)
main()
3.编写一个程序,生成一个10x10的随机矩阵并保存为文件(空格分隔行向量、换行分隔列向量),在写程序将刚才保存的矩阵文件另存为CSV格式,用Excel或文本编辑器打开看看结果对不对。
# 使用numpy库生成随机矩阵
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('请输入随机数的取值范围<low , high>:'))
file_txt = input('请将要保存的txt文件命名:')
save_txt(low, high, file_txt)
file_csv = input('请将要保存的csv文件命名:')
save_csv(file_txt, file_csv)
main()
4.编写一个程序,读取一个Python源代码文件,将文件中所有除保留字外的小写字母替换成大写字母,生成后的文件要能够被Python解释器正确执行。
5.编写一个程序,要求能够将元素为任意Python支持的类型(包括含有半角逗号的字符串)的列表转储为CSV,并能够重新正确解析为列表。 def save_csv(ls, fname):
# 向列表中逐个添加元素
value = input('请向列表总添加一个元素:')
while value != '':
ls.append(value)
value = input('请向列表总添加一个元素:')
print('您输入的列表为:{}'.format(ls))
# 若元素中有半角逗号,将其替换成点
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(',')
# 将替换后的点换成半角逗号
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('请将列表文件命名:')
save_csv(ls, fname)
lt = []
read_csv(lt,fname)
main()
巴尔扎克很忙.jpg
|
|