Uploaded by qi zhang

python实训测验

advertisement
Python 编程实训测验
基础篇
1. 从键盘输入两个数字,求这两个数字的最大公约数和最小公倍数。
import math
a,b =map(int,input('输入 a,b 空格隔开:').split())
print('最大公约数',math.gcd(a,b))
x=a*b//math.gcd(a,b)
print('最小公倍数',x)
2. 字符分类统计:从键盘输入一行字符串(字符串长度小于等于 1000),统计出
其中的英文字母、空格、数字和其它字符的个数。
str1= input('请输入字符串:')
alpha=0
num=0
space=0
ch=0
for i in str1:
if i.isalpha():
alpha+=1
elif i.isnumeric():
num+=1
elif i.isspace():
space+=1
else:
ch +=1
print('数字',num,'英文字母',alpha,'空格',space,'字符',ch)
3. 求 s=a+aa+aaa+aaaa+….的值,其中,a 是 0~9 范围内的一个数字。输入 n 和
a,其中 n 表示累加的项数。例如,当 n=5,a=2 时,
s=2+22+222+2222+22222。
a,n=map(int,input('输入 a,n 空格隔开:').split())
sum1=0
sum2=0
j=1
for i in range(1,n+1):
sum1=sum1+a*j
j*=10
sum2=sum2+sum1
print('sum=',sum2)
4. 利用随机函数产生 50 个 0-20 之间的随机整数,存放在序列中,再通过键盘
输入一个整数 key,查找 50 个随机整数中是否有 key 值,如果存在,则输出
他们所有的位置。
from random import randint
x=[randint(0,20) for i in range(50)]
list1=list(x)
key=int(input())
print(list1)
print('输出位置')
for i in range(0,50):
n=list1[i]
if n==key:
print(i,end=' ')
5. 回文数判断:设 n 是一任意自然数,如果 n 的各位数字反向排列所得自然数
与 n 相等,那么 n 就是一个回文数。从键盘输入一个数字,判断这个数字是
不是回文数。
str1=input()
str2=str1[::-1]
if (str1==str2):
print('yes')
else :
print('no')
6. 输入一句英文英语,求其中最长的单词长度。
x=input().split()
list1=list(x)
max1=0
for i in list1:
if max1<len(i):
max1=len(i)
print(max1)拓展篇
7. 判断[ k1,k2]之间有多少个素数(包含 k1 和 k2),并输出这些素数。 ( 1 <=
k1 < k2 <= 1000 )
def prime(x):
for i in range(2, x):
if x % i == 0:
return 2
#不是
return 1
#是
a,b=map(int,input('输入 a,b 空格隔开:').split())
for i in range(a,b+1):
if (prime(i)==1):
print(i)
8. 判断用户输入的变量名是否合法,要求如下:
①变量名可以由字母,数字或者下划线组成;
②变量名只能以字母或者下划线开头;
最后结果需要展示合法与不合法两种结果,另外实验截图时要求变量名中出现
自己名字的英文。
zhangjiaqi=input()
if zhangjiaqi[0].isnumeric():
print('no')
else:
for i in zhangjiaqi:
if i.isalpha() or i == '_':
print('True')
break
else:
print('False')
8. 为了加强居民的节水意识,某地区制定了以下生活用水收费标准:每户每月
用水未超过 7 吨时,每吨收费 1.0 元,并加收 0.2 元每吨的城市污水处理
费;用水若超过 7 吨(含 7 吨),则每吨收费 1.5 元,并加收 0.4 元每吨的
城市污水处理费(注:非分段计费)。编写一个水费计算函数,实现输入用
水量并计算应交水费的功能,并在主函数中调用验证。
def water(x):
if (x<7):
return x+0.2
elif (x>=7):
return 1.5*x+0.4
x=int(input())
print(water(x))
10. 编写代码实现快速排序,输入为自定义的一个列表,输出为经过排序后的
列表。
def mysort(list1):
n=len(list1)
for i in range(1,n):
temp=list1[i]
j=i-1
while (j>0 and list1[j]>temp):
list1[j+1]=list1[j]
j-=1
list1[j+1]=temp
list1=list(input())
mysort(list1)
print(list1)
11. 利用递归函数调用方式,输入自己的学号,以相反顺序打印出来。
def fun(list1,n):
if (n==0):
return 0;
print(list1[n-1],end=' ')
fun(list1,n-1)
list1=input()
n=len(list1)
fun(list1,n)
12. 编写程序,产生 20 个 0-100 之间的随机整数,打印出来,并将奇数存储在
f1.txt 中,将偶数存储在 f2.txt 中。
from random import randint
x=[randint(0,100) for i in range(20)]
list1=list(x)
list2=[]
list3=[]
for i in list1:
if i%2!=0:
list2.append(i)
else :
list3.append(i)
str2=" ".join('%s' %id for id in list2)
str3=" ".join('%s' %id for id in list3)
with open('f1.txt', 'w') as fp:
fp.write(str2)
with open('f2.txt', 'w') as fp:
fp.write(str3)
13. 创建文件 data.txt,文件共 1000 行,每行存放一个 1~100 之间的整数,写完
后读取文件内容。
import random
with open('data.txt', 'w') as fp:
for i in range(1,1001):
n=random.randint(1,100)
n=str(n)
fp.write(n+"\n")
with open('data.txt') as fp:
print(fp.read())
14. 输入一个二维嵌套列表,即矩阵,将其行和列互换(转置)后存放到另一个列
表中,并打印新的列表。例如:a=[[1,3,5],[2,4,6]],则转置后为 b=[[1,2],
[3,4],[5,6]]
a=[]
x=int(input('矩阵有几行'))
y=int(input('矩阵有几列'))
for i in range(0,x):
temp=[]
for j in range(0,y):
x=int(input('输入一个'))
temp.append(x)
a.append(temp)
b=[]
for i in range(0,x):
temp=[]
for j in range(0,y):
temp.append(a[j][i])
b.append(temp)
print(a)
print(b)
15. 编写一个程序,接受一系列空格分隔的单词作为输入,并在删除所有重复
的单词并按字母数字排序后打印这些单词。
假设向程序提供以下输入:
hello world and practice makes perfect and hello world again
则输出为:
again and hello makes perfect practice world
x=input().split()
list1=list(x)
list1.sort()
for i in list1:
if (list1.count(i)>1):
list1.remove(i)
print(list1)
16. 有一行电文,已经按下面的规律译成密码
A—>Z a—>z
B—>Y b—>y
C—>X c—>x
即把第一个字母变成第 26 个字母,第 i 个字母变成第(26-i+1)个字母,非字
母的字符保持不变。输入已经按上述方式加密的字符串电文(电文的长度不超
过 1000),要求输出其原文,其中可能有空格。
Sample Input
R droo erhrg Xsrmz mvcg dvvp.
Sample Output
I will visit China next week.
str1=input()
for i in str1:
if i.islower():
x=219-ord(i)
print(chr(x),end='')
elif i.isupper():
x=155-ord(i)
print(chr(x),end='')
else :
print(i,end='')
17. 对于一个十进制的正整数, 定义 f(n)为其各位数字的平方和,如:
f(13) = 1**2 + 3**2 = 10
f(207) = 2**2 + 0**2 + 7**2 = 53
下面给出三个正整数 k,a, b,你需要计算有多少个正整数 n 满足 a<=n<=b,
且 k*f(n)=n
范例:输入: 51 5000 10000,输出: 3
def f(n):
s=str(n)
sum1=0
for i in s:
sum1=sum1+int(i)**2
return sum1
a,b,c=map(int,input().split())
coun=0
for i in range (b,c+1):
if (a*f(i)==i):
coun+=1
print(coun)
应用篇
18. 创建两个文件 cats.txt 和 dogs.txt,在第一个文件中至少存储三只猫的名
字,在第二个文件中至少存储三条狗的名字。编写一个程序,尝试读取这些文
件,并将其内容打印到屏幕上。将这些代码放在一个 try-except 代码块中,以
便在文件不存在时捕获 FileNotFound 错误,并打印一条反馈消息。
filename=input()
try:
with open(filename) as fp:
content = fp.read()
print(content)
fp.close()
except FileNotFoundError:
print('cant find',filename)
19. 编写函数, 接收一个列表(包含 15 个整数)和一个整数 k, 返回一个新列表。
函数需求:
- 将列表下标 k 之前对应(不包含 k)的元素逆序;
- 将下标 k 及之后的元素逆序;
- 若 k 不合理,则返回 ’error key’;
在主函数中调用并验证编写的函数,将新列表打印。
def f(list1,x):
if (k<0 and k>15):
print('wrong')
a=[]
b=[]
a=list1[:k][::-1]
b=list1[k:][::-1]
print(a,'and',b)
k=int(input('输入 k'))
list1=map(int,input('输入 list').split())
list1=list(list1)
f(list1,k)
k=int(input('输入 k'))
list1=map(int,input('输入 list').split())
print(list1)
20. 二千多年前希腊的天文学家希巴克斯命名十二星座,它们是水瓶座、
双鱼座、白羊座、金牛座、双子座、巨蟹座、狮子座、处女座、天秤座、天蝎
座、射手座、魔蜗座。给出一个 CSV 文件(SunSign.csv),内容示例如下:
序号,星座,开始月日,结束月日, Unicode
1,水瓶座,120,218,9810
2,双鱼座,219,320,9811
3,白羊座,321,419,9800
4,金牛座,420,520,9801
5,双子座,521,621,9802
…(略)
以第 1 行为例,120 表示 1 月 20 日,218 表示 2 月 18 日, 9810 是
Unicode 码。
(1) 编写代码,读入 CSV 文件中数据,获得用户输入。根据用户输入的星
座名称,输出此星座的出生日期范围。
参考输入和输出示例格式如下:
请输入星座中文名称(例如,双子座):双子座
双子座的生日位于 521-621 之间
(2) 编写代码,读入 CSV 文件中数据,获得用户输入。用户键盘输入一组
范围是 1-12 的整数作为序号,序号间采用空格分隔,以回车结束。屏幕输出这
些序号对应的星座的名称、字符编码以及出生日期范围,每个星座的信息、一
行。本次屏幕显示完成后,重新回到输入序号的状态。
参考输入和输出示例格式如下:
请输入星座序号(例如,5):5 10
双子座(9802)的生日是 5 月 21 日至 6 月 21 日之间
天蝎座(9807)的生日是 10 月 24 日至 11 月 22 日之间
请输入星座序号(例如,5 ) :
(3) 在问题(2)的基础上,修改代码,对键盘输入的每个序号做合法性处理。
如果输入的数字不不合法,请输出”输入星座编号有误!",继续输出后续信
息,然后重新回到输入序号的状态。
Download