纯当复习练习用,发出来供大家参考。华中农业大学习题记录,有些题可能有其他的简洁做法,错误欢迎指正。
目录
目录
输入一个星期数字,返回对应星期的名称缩写前2个字母。
dict1={"1":"MO","2":"TU","3":"WE","4":"Th","5":"Fr","6":"Sa","7":"Su"}
X=input()
print(dict1.get(X))
OR
#week
weeks="MoTuWeThFrSaSu"
n=input()
pos=(int(n)-1)*2
b=weeks[pos:pos+2]
print(b)
5.1猴子吃桃问题
【问题描述】猴子吃桃问题:
猴子摘下若干个桃子,第一天吃了桃子的一半多一个,以后每天吃了前一天剩下的一半多一个,到第n天吃以前发现只剩下一个桃子,
编写程序实现:据输入的天数计算并输出猴子共摘了几个桃子
【输入形式】输入的一行为一个非负整数,表示一共吃的天数。
【输出形式】输出的一行为一个非负整数,表示共摘了几个桃子,若输入的数据不合法(如:负数或小数),则输出"illegal data"。
【样例输入】3
【样例输出】10
【样例输入2】0
【样例输出2】0
x=eval(input())
n=1
if x>0 and int(x)==x:
for i in range(x-1,0,-1): #倒推 i表示第i天
n=(n+1)*2
print(n)
#n1=n0/2-1
elif x==0:
print(0)
else:
print("illegal data")
5.2韩信点兵
【问题描述】
有一群士兵,人数不超过n。韩信将其按照一行3人排队,余2人;按照一行5人排队,余1人;按照一行7人排队,刚好排成若干行。编写程序 计算士兵的人数。
n=eval(input())
for x in range(n+1):
if x%3==2 and x%5==1 and x%7==0:
print(x,end=" ")
5.3随机密码
【问题描述】
请编写程序,生成随机密码。具体要求如下:
(1)使用 random 库,采用 10作为随机数种子。
提示:random.seed(10),不能用sample函数这是不放回抽样。
(2)密码允许字符如下:
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
(3)密码长度为输入的数字。
【样例输入】
5
【样例输出】
KcBEK
import random
random.seed(10)
a=eval(input())
s="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
code=""
for i in range(a):
code+=random.choice(s)
print(code)
5.4循环编程题
【问题描述】
已知y=1+1/3+1/5+…+1/2n-1:
求y<3时的最大n值以及最大n值对应的y值(y值保留小数点后2位)。
n=0
y=0
while y<=3:
n=n+1
y=y+1/(2*n-1)
y=y-1/(2*n-1)
n-=1
print("n=%.d,y=%.2f"%(n,y))
6.1画三角形
n=int(input())
for i in range(1,n+1):
print(" "*(n-i),end="")
print("*"*(2*i-1))
6.2字符串中字母大小写互换
【问题描述】编写程序,功能是把输入的字符串的大写字母变成小写字母,小写字母变成大写字母,非字母的字符不作变换。输出变换后的结果。
n=input()
for i in n:
if i.islower():
print(i.upper(),end="")
elif i.isupper():
print(i.lower(),end="")
else:
print(i,end="")
6.3小鱼的航程
【问题描述】
有一只小鱼,它上午游泳150公里,下午游泳100公里,晚上和周末都休息(实行双休日),假设从周x(1<=x<=7)开始算起,请问这样过了n天以后,小鱼一共累计游泳了多少公里呢?
【输入形式】
输入两个整数x,n(表示从周x算起,经过n天)。
【输出形式】
输出一个整数,表示小鱼累计游泳了多少公里。
x=eval(input())
n=eval(input())
s=0
for i in range(n):
if (x+i)%7!=0 or (x+i)%7!=6:
s=s+250
else:
s=s+0
print(s)
6.4解密码
【问题描述】
有一行电文,已按下面规律译成密码:
A--Z a--z
B--Y b--y
C--X c--x
......
即第1个字母变成第26个字母,第i个字母变成第(26-i+1)个字母; 非字母字符不变。编写程序把密码译回原文,并输出密码和原文。
【输入形式】
输入一串密码(长度为10,可包含数字、字母)
【输出形式】
首先输出密码,然后换行后输出原文
【样例输入】
4sdf&13TBD
【样例输出】
4sdf&13TBD
4hwu&13GYW
【样例说明】ord()和chr()函数可进行字符和asc码之间的相互转换
x=input()
news=""
for i in range(len(x)):
if 65<=ord(x[i])<=90:
pos=90-ord(x[i])+65
new=chr(pos) # 将码转回成字母
elif 97<=ord(x[i])<=122:
pos=122-ord(x[i])+97
new = chr(pos)
else:
new=x[i]
news+=new
print(news)
6.5密码正确吗
【问题描述】试编写一个程序判断6位密码是否正确,若密码正确输出right,密码不正确输出wrong,如果输入的密码有非数字字符则输出wrong(用字符串的isdigit()方法判断是否是纯数字字符串)。密码规则是: 第i位数字是第i-1位数字加1后的3次方的个位数( 2<=i<=6)。
【输入形式】一个六位密码
【输出形式】"right" 或者"wrong"
【样例输入】272727
【样例输出】right
【样例说明】密码272727中第2位的7是第1位的2加1后的3次方的个位数。又,(7+1)的3次方为512,其个位数为2),以此类推。
x=input()
if x.isdigit():
for i in range(1,6):
if eval(x[i])!=(eval(x[i-1])+1)**3%10:
print("wrong")
break
else:
print("right")
else:
print("wrong")
7文件
将文本换行删除并输出
x=open("score1.txt","r")
a=x.readlines()
for s in a:
s=s.strip()
print(s,end="")
x.close()
7.1文件-加减法
对文件内算式进行加减运算并将结果写入新文件
文件-加减法
f=open("jisuan.txt","r")
data1=f.readlines()
data1=[data.strip()for data in data1]
#删除data1中换行
list1=[]
for data in data1:
m=data.find("+")
n=data.find("-")
#find函数a.find(""):若存在查找字符,显示字符位置,否则返回-1
if m!=-1:
s=eval(data[:m])+eval(data[m+1:])
else:
s=eval(data[:n])-eval(data[n+1:])
list1.append("{:.2f}".format(s)+"\n")#结果保留两位小数
f.close()
f2=open("jieguo.txt","w")
f2.writelines(list1)
f2.close()
7.2文件-成绩
将含有学生成绩文件读入,并在新文件中写入成绩最大值、最小值、平均值
with open("grade.txt", 'r') as f:
ls = []
for s in f:
s = s.strip("\n")
ls.append(int(s))
a=max(ls)
b=min(ls)
c=sum(ls)/len(ls)
f=open("result.txt","w")
f.write(str(a)+"\n")
f.write(str(b)+"\n")
f.write(str("{:.1f}".format(c))+"\n")
8.列表-逆序排列
【问题描述】编写程序对标准输入的10个整数置逆序排列.并输出。
【输入形式】标准输入的前十行代表参与计算的十个整数。
【输出形式】标准输出的一行表示逆序后的数组,以空格作为间隔。
【样例输入】
1
2
3
4
5
6
7
8
9
10
【样例输出】
10 9 8 7 6 5 4 3 2 1
list1=[]
for i in range(10):
i=eval(input())
list1.append(i)
list1.reverse()
print(" ".join(str(i) for i in list1))
#或者
for i in list1:
print(i,end=" ")
9.1字典-找不同
【问题描述】
9个同学一起做游戏,每个人报一个[1,20]区间上的正整数,请你编程求出有多少个不同的数。
【输入形式】
输入1行,输入9个[1,20]区间上的整数,每个整数之间以空格为分隔符
【输出形式】
输出1个数,表示输入的9个数中不同数的个数。
【样例输入】
1 2 3 3 2 2 7 8 9
【样例输出】
6
list1=input().split()
list2=[]
for i in list1:
if i not in list2:
list2.append(i)
print(len(list2))
#or
set1=set(list1)
print(len(set1))
9.2出现最多次的整数
【问题描述】
输入一组无序的整数,编程输出其中出现次数最多的整数及其出现次数。
【输入形式】
先从标准输入读入整数的个数(大于等于1,小于等于100),然后在下一行输入这些整数,各整数之间以一个空格分隔。
【输出形式】
在标准输出上输出出现次数最多的整数及其出现次数,两者以一个空格分隔;若出现次数最多的整数有多个,则按照整数升序分行输出。
【样例输入】
10
0 -50 0 632 5813 -50 9 -50 0 632
【样例输出】
-50 3
0 3
n=int(input())
list1=input().split()
dict1={}
for i in list1:
dict1[i]=dict1.get(i,0)+1
list1=list(dict1.items())
list1.sort()
for i in range(n):#相同次数升序
if list1[i][1]==list1[0][1]:
print(list1[i][0], list1[i][1])
9.3餐厅服务评价【问题描述】假设有10个学生被邀请来给餐厅的饮食和服务质量打分,分数划分为1~9这9个等级(1表示最低分,9表示最高分)编程统计输出餐饮服务质量调查结果。 【输入形式】输入1行,输入10个1到10之间的整数,每个整数之间以空格为分隔符 【输出形式】输出9行,每行两个数(以空格为分隔符),一个为1到9之间的整数,表示等级;一个为这个等级对应的票数。 【样例输入】 1 2 3 3 3 2 2 7 8 9 【样例输出】 1 1 2 3 3 3 4 0 5 0 6 0 7 1 8 1 9 1 |
list1=input().split()
list1=[eval(i) for i in list1]
dict1={}
for i in range(1,10):
dict1[i]=0
for i in list1:
dict1[i]=dict1.get(i,0)+1
list1=list(dict1.items())
for i in list1:
print(i[0],i[1])
9.4数字出现次数排序
【问题描述】
给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。
【输入形式】
第一行包含一个整数n,表示给定数字的个数; 第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。
【输出形式】
输出有多行,每行包含两个整数,分别表示一个给定的整数和它出现的次数。按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则先输出值较小的,然后输出值较大的。
【样例输入】
12
5 2 3 3 1 3 4 2 5 2 3 5
【样例输出】
3 4
2 3
5 3
1 1
4 1
n=int(input())
a=input().split()
a=[eval(i) for i in a]
dict1={}
for i in a:
dict1[i]=dict1.get(i,0)+1
a=list(dict1.items())
a.sort(key=lambda x:(-x[1],x[0]))
for i in a:
print(i[0],i[1])
10.1找对称数
【问题描述】已知10个四位数输出所有对称数及个数 n,例如1221、2332都是对称数
【输入形式】10个四位数,以空格分隔开
【输出形式】输入的四位数中的所有对称数,对称数个数
【样例输入】1221 2243 2332 1435 1236 5623 4321 4356 6754 3234
【样例输出】1221 2332 2
【样例说明】为测试程序健壮性,输入数中可能包括3位数、5位数等
a=input().split()
b=[]
for i in a:
if len(i)!=4:
continue
elif i[0]==i[3] and i[1]==i[2]:
b.append(i)
for i in b:
print(i,end=" ")
print(len(b))
11.1函数-根据用户输入的日期计算天数
【问题描述】
编写函数isLeap(year)用于判断year是否是闰年,若是闰年则返回True,否则返回False。
编写函数days(year,month)用于计算year所在的month的天数,days(year,month)函数需要调用isLeap()函数以帮助判断2月份的天数(year若不是闰年,返回28,否则返回29) 要求程序能根据用户输入的日期,计算该日期是这一年的第几天。
【输入形式】
输入某个日期(格式为year/month/day)
【输出形式】
该日期是一年的第几天
【样例输入】
2019/3/18
【样例输出】
77
def isLeap(y):
if y%4==0 and y%100!=0 or y%400==0:
return True
return False
list1=[31,28,31,30,31,30,31,31,30,31,30,31]
list2=[31,29,31,30,31,30,31,31,30,31,30,31]
def days(y,m):
if isLeap(y):
return list2[m]
else:
return list1[m]
a=input().split("/")
year=int(a[0])
month=int(a[1])
day=int(a[2])
d=0
for i in range(month-1):
d+=days(year,i)
day=day+d
print(day)
不用函数
#不用函数
y,m,d=input().split("/")
list1=[31,28,31,30,31,30,31,31,30,31,30,31]
list2=[31,29,31,30,31,30,31,31,30,31,30,31]
x=0
if (int(y)%4==0 and int(y)%100!=0) or int(y)%400==0:
for i in range(int(m)-1):
x=x+list2[i]
else:
for i in range(int(m)-1):
x=x+list1[i]
d=int(d)
x=x+d
print(x)
11.2函数CountC
编写函数CountC用来统计字符串中各字母字符(“A”~“Z”,“a”~“z”)出现的个数。
【输入形式】
一个字符串
【输出形式】
字符串中字母字符的个数
【样例输入】
wer123456#$%
【样例输出】
3
def CountC(x):
n=0
for i in range(len(x)):
if x[i].isalpha():
n+=1
return n
m=input()
print(CountC(m))
11.3统计一共出现了多少个3
【问题描述】输入任意一个正整数,从1开始到这个数字的奇数序列里,统计一共出现了多少个3。
编写函数sumThree(),实现功能是,输入一个正整数,返回该数中3出现的个数。
【输入形式】
【输出形式】
【样例输入】
number:25
【样例输出】
3
def sumThree(x):
n=0
for i in range(1,x+1,2):
if str(i).count("3")!=0:
n=n+1
return n
m=int(input("number:"))
print(sumThree(m))
11.4函数isRepeated(v)
【问题描述】
编写一个函数isRepeated(v),用于判断一个列表中的元素是否存在重复元素,若有重复则返回True,否则返回False。
根据输入的数据生成列表,再将列表作为实参调用该函数,打印函数的返回值。
【输入形式】
【输出形式】
True或False
【样例输入】
1,2,3,2,5
【样例输出】
True
def isRepeated(v):
x=set(v)
if len(x)==len(v):
return False
return True
n=input().split(",")
print(isRepeated(n))
11.5循环和函数_亲密数
【问题描述】
求整数n以内(含n)的全部亲密数。
说明:如果正整数A的全部因子(包括1,不包括A本身)之和等于B;且正整数B的全部因子(包括1,不包括B本身)之和等于A,A不等于B,则将正整数A和B称为亲密数。
1不和其他数形成亲密数。
编写函数sumElem(),实现统计一个数字的因子之和(包括1,不包括A本身)
【输入形式】
输入整数n
【输出形式】
每一行输出一对亲密数,中间用一个空格隔开。
每一对亲密数只输出一次,小的在前。
各对亲密数按序排序,按亲密数中小的那个数从小到大排序。
【样例输入】
3000
【样例输出】
220 284
1184 1210
2620 2924
def sumElem(x):
n=0
for i in range(1,x):
if x%i==0:
n=n+i
return n
n=int(input())
for a in range(2,n+1):
b=sumElem(a) #正整数A的全部因子之和等于B
c=sumElem(b) #正整数B的全部因子
if c==a and a!=b:
if a>b:
a,b=b,a #每一对小的在前
print(a,b)
11.6计算平均数与中位数
a=input().split(",")
a=[eval(i) for i in a]
sum=sum(a)
avg=sum/len(a)
print("%0.2f"%avg)
def midNum(n):
n.sort()
l=len(n)
if l%2==0:
return (n[l//2-1]+n[l//2])/2
else:
m=(l-1)//2
return n[m]
print(midNum(a))
11.7素数
任意大于或等于6的偶数,可表示成两个奇素数之和,输出100内的所有结果。
def sushu(n):
for i in range(2,n):
if n%i==0:
return False
return True
for i in range(6,101,2):
for x in range(3,i,2):
if sushu(x):
y=i-x
if sushu(y):
print(i,x,y)
break
12.1位置码加密
【问题描述】
导入随机数库产生随机数时设置固定seed(10)。
为给定的字符串原码用随机产生位置码的方式进行加密。例如原码:010512,则位置码为由1-6这6个数字随机产生的数字序列:362415,位置码的生成取决于原码的长度L,每一位都不重复。根据位置码调整原码的顺序得到加密结果:021501,将原码的第3位0放到加密后的第1位,将原码的第6位2放到加密后的第2位,以此类推。
提示注意:对于样例打乱原码位置码123456时如果使用random库中的sample,choice等方法时需要用reverse方法对列表逆序才能和结果一致,用shuffle就不用逆序。
【样例输入】
010512
【样例输出】
362415
021501
import random
random.seed(10)
list1=[1,2,3,4,5,6,7,8,9,0]
a=input()
l=len(a)
list2=list1[0:l]
random.shuffle(list2)
for i in range(l):
print(list2[i],end="" )
print("")
s=""
for i in list2:
m=a[i-1]
s+=m
print(s)
12.2杨辉三角
n=int(input())
list1=[[]for i in range(n)]#创建n个空列表
for i in range(n):
list1[i]=[0 for i in range(n)] #[[0],[0],[0],...]
for i in range(n):
for j in range(n):
if j==0 or i==j:#首尾 i为行 j为列
list1[i][j]=1
else:
list1[i][j]=list1[i-1][j-1]+list1[i-1][j] #某数为上面两数之和
for i in range(n):
print(" "*(2*(n-i)),end="") #去掉输出为下三角
for j in range(i+1):
print(str(list1[i][j]).ljust(4),end="") #字符宽度为4,对齐
print()
文件
《命运》是著名科幻作家倪匡的作品。这里给出《命运》的一个网络本文件,文件名为“命运.txt”
在右侧修改代码,对“命运.txt”文件进行字符频次统计,输出频次最高的中文字符(不包括标点符号)及其频次,字符与频次之间采用英文冒号“:”分隔,示例格式如下:
理:224
txt = open("命运.txt", "r")
for ch in ",。?:":
txt = txt.replace(ch, "")
d = {}
for ch in txt:
d[ch] = d.get(ch, 0) + 1 #统计次数
ls = list(d.items())
ls.sort(key=lambda x: x[1], reverse=True) #按频数从高到低排序
a, b = ls[0]
print("{}:{}".format(a, b))
在右侧的编程模板中修改代码,对“命运.txt”文件进行字符频次统计,按照频次由高到低,在屏幕输出前10个频次最高的字符,不包含回车符,字符之间无间隔,连续输出
txt = open("命运.txt", "r", encoding="utf-8").read()
for ch in '\n':
txt = txt.replace(ch, "")
d = {}
for ch in txt:
d[ch] = d.get(ch, 0) + 1
ls = list(d.items())
ls.sort(key=lambda x: x[1], reverse=True) # 此行可以按照词频由高到低排序
for i in range(10):
print(str(ls[i])[2], end="")
在右侧修改代码,对“命运.txt”文件进行字符频次统计,将所有字符按照频次从高到低排序,字符包括中文、标点、英文等符号,但不包含空格和回车。将排序后的字符及频次输出到考生文件夹下,文件名为“命运-频次排序.txt”。 字符与频次之间采用英文冒号“:”分隔,各字符之间采用英文逗号“,”分隔,参考CSV格式,最后无逗号,文件内部示例格式如下:
理:224,斯:120,卫:100
xt = open("命运.txt", "r", encoding="utf-8").read()
for ch in ' \n':
txt = txt.replace(ch, "")
d = {}
for ch in txt:
d[ch] = d.get(ch, 0) + 1
ls = list(d.items())
ls.sort(key=lambda x: x[1], reverse=True)
string = ""
for i in range(len(ls)):
s = str(ls[i]).strip("()")
if i < len(ls) - 1:
string = string + s[1] + ':' + s[5:] + ','
else:
string = string + s[1] + ':' + s[5:]
f = open("命运-频次排序.txt", "w", encoding="utf-8")
f.write(string)
f.close()
K均值聚类分析
更新一个最近课上的小作业,随机形成10个二维数据进行K均值聚类
#K均值聚类
import random
import numpy as np
#随机输入10个二维样本
data = [[np.random.randint(1, 10) for j in range(1, 10)] for i in range(1, 11)]
data=np.array(data)
k = 2 # 设置聚类中心
n = len(data)
dist = np.zeros([n, k + 1])
# 1.选中心
center = data[:k, :]
center_new = np.zeros([k, data.shape[1]])
while True:
# 2.求距离
for i in range(n):
for j in range(k):
dist[i, j] = np.sqrt(sum((data[i, :] - center[j, :]) ** 2))
dist[i, k] = np.argmin(dist[i, :k]) # 求最小值的位置,并归类
# 4.求新类中心
for i in range(k):
index = dist[:, k] == i # 找到不同类类索引
center_new[i, :] = data[index, :].mean(axis=0) # 求同类的新样本中心
# 5.判定结果
if np.all(center == center_new):
break
center = center_new
print(dist) # 查看聚类结果
这是一篇关于Python编程的习题集,涵盖了从基础的循环编程到复杂的算法问题,包括猴子吃桃问题、随机密码生成、文件操作、列表处理、字典应用和函数设计等,适合学习和巩固Python知识。
2万+

被折叠的 条评论
为什么被折叠?



