华中农业大学python实验题,持续更新中
作业1:序列,字典和集合类型
1.找数对
【问题描述】
输入一组数到列表nums,请找到列表中任意两个元素相加能够等于9的元素,形成一个元组,使其小数在前大数在后,如:(2,7), (1,8)。重复的元组元素只保留一个,结果按元组第一个元素从小到大顺序输出。
【样例输入】
numbers:3,4,5,7,2,8,1
【样例输出】
[(1, 8), (2, 7), (4, 5)]
【难点解析】可以一开始定义一个空列表Lst,然后每次将符合要求的,例如Lst.append((1,8))追加一个元组的方式(看清楚里面(1,8)的写法),把元组作为列表的元素插入列表。
lis=list(map(int,input("numbers:").split(',')))
lis.sort()
lis1=[]
for i in range(len(lis)):
for j in range(i,len(lis)):
if lis[i]+lis[j]==9:
if (lis[i],lis[j]) not in lis1:
lis1.append((lis[i],lis[j]))
print(lis1)
2.字母计数
【问题描述】
输入字符串,输出字符串中出现次数最多的字母及其出现次数。如果有多个字母出现次数一样,则按字符从小到大顺序输出字母及其出现次数。
【输入形式】
一个字符串。
【输出形式】
出现次数最多的字母及其出现次数
【样例输入】
abcccd
【样例输出】
c 3
s=input()
dic={}
dic1={}
for i in s:
if i in dic:
dic[i]+=1
else:
dic[i]=1
max1=max(dic.values())
for key in dic:
if dic[key]==max1:
dic1[key]=dic[key]
for i,j in dic1.items():
print("%s %d"%(i,j))
3.餐厅服务评价
【问题描述】假设有10个学生被邀请来给餐厅的饮食和服务质量打分,分数划分为1~9这9个等级(1表示最低分,9表示最高分)编程统计输出餐饮服务质量调查结果。
【输入形式】输入1行,输入10个1到9之间的整数,每个整数之间以空格为分隔符
【输出形式】输出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
【样例说明】
【评分标准】
10.00
lis=list(map(int,input().split()))
dic={}
for i in range(1,10):
dic[i]=0
for num in lis:
dic[num]+=1
for i in range(1,10):#range函数也是前开后壁的
print("%d %d"%(i,dic[i]))
4.找不同
【问题描述】
9个同学一起做游戏,每个人报一个[1,20]区间上的正整数,请你编程求出有多少个不同的数。
【输入形式】
输入1行,输入9个[1,20]区间上的整数,每个整数之间以空格为分隔符
【输出形式】
输出1个数,表示输入的9个数中不同数的个数。
【样例输入】
1 2 3 3 2 2 7 8 9
【样例输出】
6
【样例说明】可以使用字符串的split()方法将一个字符串按照指定字符切割成字符列表
【评分标准】
lis=list(map(int,input().split()))
lis1=[]
for i in lis:
if i not in lis1:
lis1.append(i)
print(len(lis1))
5.读者第几次出现
【问题描述】
涛涛最近要负责图书馆的管理工作,需要记录下每天读者的到访情况。每位读者有一个编号,每条记录用读者的编号来表示。给出读者的来访记录,请问每一条记录中的读者是第几次出现。
【输入形式】
输入的第一行包含一个整数n,表示涛涛的记录条数。
第二行包含n个整数,依次表示涛涛的记录中每位读者的编号。
【输出形式】
输出一行,包含n个整数,由空格分隔,依次表示每条记录中的读者编号是第几次出现。
【样例输入】
5
1 2 1 1 3
【样例输出】
1 1 2 3 1
n1=int(input())
lis=list(map(int,input().split()))
dic={}
for num in lis:
if num in dic:
dic[num]+=1
print(dic[num],end=' ')
else:
dic[num]=1
print(dic[num],end=' ')
6.整除问题
- 有如下结论:如果一个整数的奇数位上的数字之和与偶数位上的数字之和的差能被11整除,那么这个数能被11整除;(注:每个整数从个位开始计算位数;以123456为例,奇数位之和为6+4+2=12,偶数位之和为5+3+1=9)
请利用上述结论,任意给出一个n位正整数,输出其奇数位上数字之和,偶数位上数字之和,并判断其能否被11整数。
【输入形式】
任意输入一个正整数;
【输出形式】
按顺序输出一个奇数位之和、偶数位之和,输出最终的判断能否被11整除;
【样例输入】
Please input a integer:654321
【样例输出】
9
12
FALSE
【样例说明】输出FALSE或TRUE
【评分标准】
n=input("Please input a integer:")
num1=num2=0
a=len(n)
i=1
while a:
if i%2==0:
num2+=int(n[a-1])
else:
num1+=int(n[a-1])
i = i + 1
a = a - 1
print("%d\n%d"%(num1,num2))
if (num1-num2)%11!=0:
print("FALSE")
else:
print("TRUE")
7.找因子
【问题描述】
输入一个大于1的整数,返回一个列表,包含所有能够整除该整数的因子(不包含1和它本身),并且从小到大排序。如果这个数是素数,则输出“(整数) is prime”。
【样例输入】
number:6
【样例输出】
[2, 3]
【样例输入】
number:5
【样例输出】
5 is prime
n=int(input("number:"))
lis=[]
for i in range(2,n-1):
if(n%i==0):
lis.append(i)
if lis==[]:
print("%d is prime"%(n))
else:
print(lis)
8.翻译密码
【问题描述】翻译密码。为了保密,常不采用明文,而用密文,即按一定规则将字符转换为另一字符,收报人则按相反的规律转换得到原来的字符。本程序规则为:字母ascii码加5,其他字符不变,对原文进行加密,并显示密文。字母的最后5个加5不是字母了,处理规则为循环成前5个。比如“X”的密文为“C”。
【样例输入】
please input text:I love haha.
【样例输出】
N qtaj mfmf.
【样例说明】ord()函数主要用来返回对应字符的ascii码,chr()主要用来表示ascii码对应的字符
【评分标准】
n=input("please input text:")
lis=[]
for i in range(len(n)):
x=ord(n[i])
if 97 <= x <= 117:
lis.append(chr(x+5))
elif 117 < x <= 122:
lis.append(chr(97+5-(122-x+1)))
elif 65<=x<=85:
lis.append(chr(x + 5))
elif 85<x<=90:
lis.append(chr(65+5 - (90 - x + 1)))
else:
lis.append(n[i])
lis1=''.join(lis)
print(lis1)
9.积最大的分解
【问题描述】从键盘输入一个正整数n(n>1),该正整数可以分解成两个正整数k1和k2之和(允许k1和k2相等)。请编写一个函数求使两个正整数的乘积最大的分解方案,并返回乘积max。
【输入形式】标准输入的一行表示正整数n
【输出形式】标准输出的一行表示最大乘积max,若输入的数据不合法(如:负整数、0或1),输出"illegal input"。
【样例输入】20
【样例输出】100
【样例说明】20=10 + 10,此时积最大,为100。
n=int(input())
if n<=1:
print("illegal input")
else:
max1=0
for i in range(1,n):
j=n-i
if i*j>=max1:
max1=i*j
print(max1)
10.小玉游泳
【问题描述】
小玉开心的在游泳,可是她很快难过的发现,自己的力气不够,游泳好累哦。已知小玉第一步能游2米,可是随着越来越累,力气越来越小,她接下来的每一步都只能游出上一步距离的98%。现在小玉想知道,如果要游到距离x米的地方,她需要游多少步呢。请你编程解决这个问题。
【输入形式】输入一个数字(不一定是整数,小于100m),表示要游的目标距离。。
【输出形式】输出一个整数,表示小玉一共需要游多少步。。
【样例输入】4.3
【样例输出】3
【样例说明】
【评分标准】
n=float(input())
n1=0
while 100*(1-0.98**n1)<n:
n1=n1+1
print(n1)
作业2:函数
1.判断列表是否存在重复元素
给定一个整数数组,判断是否存在重复元素。
如果存在一值在数组中出现至少两次,函数返回
true 。如果数组中每个元素都不相同,则返回
false 。
示例
1:
输入: [1, 2, 3, 1]
输出: true
示例
2:
输入: [1, 2, 3, 4]
输出: false
示例
3:
输入: [1, 1, 1, 3, 3, 4, 3, 2, 4, 2]
输出: true
def exitsamenum(nums):
for i in range(len(nums)):
for j in range(i + 1, len(nums)):
if nums[i] == nums[j]:
return True
return False
nums = eval(input())
print(exitsamenum(nums))
2.征友
def sushu(n):
for i in range(2,n):
if n%i==0:
return False
return True
a = eval(input())
result = 'JH'
for i in range(2,a):
if sushu(i) and a%i==0:
if sushu(a//i):
result += (str(a//i)+str(i))
print(result)
break
else:
print('error')
3.统计一共出现了多少个3
问题描述】输入任意一个正整数,从1开始到这个数字的奇数序列里,统计一共出现了多少个3。
编写函数sumThree(),实现功能是,输入一个正整数,返回该数中3出现的个数。
【输入形式】
【输出形式】
【样例输入】
number:25
【样例输出】
3
n=int(input('number:'))
x=list(range(1,n+1,2))
x=str(x)
num=x.count('3')
print(num)
4.循环和函数–亲密数
问题描述】
求整数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 fac(a):
j = 0
for i in range(1, a):
if a % i == 0:
j += i
return j
n=int(input())
for i in range(2, n + 1):
r = fac(i)
if r > i and r <= n and fac(r) == i:
print('{a} {b}'.format(a=i, b=r))
5.位置吗加密
【问题描述】
导入随机数库产生随机数时设置固定seed(10)。
为给定的字符串原码用随机产生位置码的方式进行加密。例如原码:010512,则位置码为由1-6这6个数字随机产生的数字序列:362415,位置码的生成取决于原码的长度L,每一位都不重复。根据位置码调整原码的顺序得到加密结果:021501,将原码的第3位0放到加密后的第1位,将原码的第6位2放到加密后的第2位,以此类推。
提示注意:对于样例打乱原码位置码123456时如果使用random库中的sample,choice等方法时需要用reverse方法对列表逆序才能和结果一致,用shuffle就不用逆序。
【样例输入
010512
【样例输出】
362415
021501
【样例说明】
输入一个长度小于10的字符串,根据原码字符串s编写函数posCode(s)产生对应长度的位置码,并作为返回值返回。
根据原码字符串s和位置码posCode编写函数changeCode(s,posCode函数的返回值)实现原码根据位置码转换成加密后的字符串,并作为返回值返回
【评分标准】
10.00
def posCode(s):
l=len(s)
lis = [x for x in range(1, l + 1)]
random.shuffle(lis)
# s=""
# for i in lis:
# s+=str(i)
s="".join(str(e) for e in lis)#简化
return s
def changeCode(s,lis):
l=len(s)
# str=""
# h = [0 for x in range(l)]#迭代器分配空间,否则会报错IndexError: list assignment index out of range
# # h=[]
# for i in range(l):
# h[i] = s[int(lis[i]) - 1]
# str+=h[i]
str="".join(s[int(lis[i])-1] for i in range(l))
return str
import random
random.seed(10)
s=input()
p=posCode(s)
print(p)
print(changeCode(s,p))
6.提取电话代码
假设电话号码的模式为:3个数字,一个短横线,4个数字,一个短横线和4个数字。如:186-7123-4567
编写isPhoneNum()函数,用以检查字符串是否匹配电话号码模式,若匹配返回True,否则返回False
程序的功能是从一段文本中提取电话号码。部分代码如下:
message='Call me at 186-7123-4567 tomorrow. 027-8728-1235 is my office. ’
for i in range(len(message)):
chunk=message[i:i+13]
if isPhoneNum(chunk):
print('Phone number found: ’ +chunk)
print(‘Done’)
def isPhoneNum(str):
for i in range(len(str)):#遍历字符串的方法
if(((i==3)or(i==8)) and (str[i]!='-')):
return False
elif((i!=3)and(i!=8)and ((ord(str[i])>57 )or( ord(str[i])<48))):
return False
return True
message='Call me at 186-7123-4567 tomorrow. 027-8728-1235 is my office. '
for i in range(len(message)):
chunk=message[i:i+13]
if isPhoneNum(chunk):
print('Phone number found: ' +chunk)
print('Done')
7.根据用户输入的日期计算天数
【问题描述】
编写函数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
【样例说明】
【评分标准】
#-*-coding:gb2312-*-
from _datetime import datetime
def isL(year):
if((year%400==0) or((year%4==0)and(year%100!=0))):
return True
else:
return False
def days(year,month):
day=0
j1={1,3,5,7,8,10,12}
j2={4,6,9,11}
for i in range(1,month):
if i in j1:
day+=31
elif i in j2:
day+=30
else:
if(isL(year)):
day+=29
else:
day+=28
return day
str=input()
# print(str)
str1=datetime.strptime(str,'%Y/%m/%d')
day=days(str1.year,str1.month)+str1.day
print(day)
# 2000/9/1
作业三(文件)
文件-加减法
【问题描述】
从文件jisuan.txt读入任意多行。每一行写有一个两个操作数参加的加法运算式或减法运算式。程序分析每一行的运算式,完成运算,把运算结果写入jieguo.txt,一行一个结果。
【输入形式】
文件內的每一行 是一个两个操作数参加的加法运算式或减法运算式。算式中不含空格
【输出形式】
文件,一行一个结果。结果保留两位小数。
【样例输入】
输入文件内容:
1+2
5-2.3
6+0.8
【样例输出】
输出文件内容:
3.00
2.70
6.80
#-*- coding:gb2312 -*-
with open('jisuan.txt','r',encoding='utf-8') as f1:
expresses = f1.readlines()
with open('jieguo.txt','w',encoding='utf-8') as f2:
for exp in expresses:
print(exp)
f2.write("%.2f"%eval(exp))
f2.write('\n')
print("%.2f"%eval(exp))
文件-注释比例
【问题描述】
一个好的程序要有一定比例的注释。编写一个程序统计一个C源文件中注释所占的百分比。百分比计算公式为:程序注释中字符总数(/和/除外的所有字符)除以程序文件中总字符数(程序文件中的所有字符)。
注:只考虑/* */内的注释,而且要考虑注释跨行的情况。不要考虑其它情况,比如//打头的行注释,比如/或/作为字符串的子串的情况。
【输入形式】
从当前目录下的filein.c源程序文件获得输入。
【输出形式】
向控制台输出注释所占百分比,百分数无小数(小数部分直接截掉,不要四舍五入),后跟百分号%。
f=open("filein.c")
ans=0
s="".join(i for i in f.readlines())
for i in range(0,len(s)):
if s[i]=="/" and s[i+1]=='*':
while s[i+2]!="*"and s[i+3]!='/':
ans+=1
i+=1
print("{}%".format(int(100*ans/len(s))))
文件排版22
【问题描述】
英文电影中参演人员名单一般以某种方式进行排版显示。给定一个未排版的文件listin.txt,该文件中每行参演人员名单由冒号’:'分隔成前后两部分,但格式杂乱无章,单词(由除空格和水平制表符之外的其它字符构成)之间可能有多个空格或水平制表符分隔。编写程序,要求将其按如下排版规则排版输出到另一个文件listout.txt中:
1.从标准输入读取一整数,作为排版后所有各行冒号’:‘在一行中的固定位置;假设输入的整数肯定大于排版后所有各行冒号’:'前的字符个数,位置从1开始计数;
2.冒号’:‘左边的单词串以冒号为基准右对齐,左边的第一个单词之前如果有多余的位置,则以空格填充;冒号’:‘右边的单词串以冒号’:‘为基准左对齐,最后一个单词后只有回车换行符,不再有其它字符;
3.冒号’:‘左右两边的单词间都只有一个空格分隔,并且要求冒号两边各有一个空格与单词分隔。
假设输入文件中每行字符个数不超过100。
【输入形式】
待排版的参演人员名单从当前目录下的listin.txt文件中读入;表示冒号’:'位置的整数从标准输入读入。
【输出形式】
排版后的参演人员名单输出到当前目录下的listout.txt中。
#-*-coding:gb2312 -*-
n1 = int(input())
with open('listin.txt', 'r') as f:
l3 = []
for i in f:
n = i.find(':')
l1 = ' '.join(i[:n].split())
print(l1)
l2 = ' '.join(i[n + 1:].split())
l3.append(l1.rjust(n1, ' ') + ' : ' + l2)
with open('listout.txt', 'w') as f:
for i in l3:
f.write(i + '\n')
学生成绩转换
【问题描述】读入文件d1.txtd1.txt,每行数据包含两个信息:学号和成绩,将成绩转换成5级制并按照学号递减排序,在屏幕上输出学号和成绩中间有一个空格的间隔,将不及格学生人数写到文件d2.txt中。
【样例输出】
2 D
3 B
4 D
5 A
7 E
8 A
10 C
11 C
14 B
【样例说明】
【评分标准】
with open("d1.txt",'r') as f1:
dict1={}
num=0
with open("d2.txt",'w') as f2:
for i in f1:
k2,k1=i.split()
k1=eval(k1)
k2=eval(k2)
if 90 <= k1:
dict1[k2] = 'A'
elif 80 <= k1 < 90:
dict1[k2] = 'B'
elif 70 <= k1 < 80:
dict1[k2] = 'C'
elif 60 <= k1 < 70:
dict1[k2] = 'D'
else:
dict1[k2] = 'E'
num+=1
f2.write(str(num))
#按键进行排序
l=list(dict1.keys())
l.sort()
for i in l:
print("{} {}".format(i,dict1[i]))
电影选看
【问题描述】
在当前目录下有一个文件名为movie.txt,文件中有6列数据,包括No Name Year Country Score Lasting,分别表示序号、电影名、上映年份、国家、评分和电影时长。李华只想观看时长在90分钟以下(包括90分钟)的电影。请你编写程序帮他挑选出符合条件的电影序号。一行打印一个序号写到文件out.txt中。
鼠标右击以下文件,选择“另存为”把文件保存至本地硬盘中。
movie.txt
【样例输入】
无
【样例输出】
6
7
8
9
后面还有很多就不列出来了
with open("movie.txt",'rt') as f1:
k=0
with open("out.txt",'w') as f2:
for i in [line.strip() for line in f1.readlines()]:
if k>0:
if int(i.split()[5])<=90:
f2.write(i.split()[0]+'\n')
print(int(i.split()[0]))
k+=1
查找复制特定的字符串
【问题描述】
编写程序实现:从键盘输入整数n。从文件"in.txt"中读入n行,将其中以字母A开头的行打印到标准输出(这里指的是屏幕)中。
【输入形式】
从键盘输入整数n;
文件输入的第1至n行的每一行构成一个字符串。
【输出形式】
标准输出的每一行是字母A开头的行。若未找到符合条件的字符串,则输出"not found";若输入数据不合法(指n为小数或负数)则输出"illegal input"。
【样例输入】
键盘输入: 5
文件输入:
hello world
An apple
hello C++
A man
a program
【样例输出】
An apple
A man
#-*-coding:gb2312 -*-
n=eval(input())
if type(n)==int:
with open("in.txt",'r') as f1:
k=m=0
for i in f1.readlines():
if k<n and i[0]=='A':
m+=1
print(i)
k+=1
if m==0:
print("not found")
else:
print("illegal input")
作业4之后的都是注重实操的,都要提交文件来着,好像如果不是信院的不用做吧,如果需要的话,可以关注评论(把邮箱发我)哦!我把作业4-10的压缩包发给你。需要的多的话,我有时间再整理哈。
作业4:面向对象编程
- 编程实现:设计一个鱼类fish,其中包含数据成员鱼编号fid、鱼名称fname,包含方法成员live(),
方法成员输出示例如:‘草鱼:分布于我国,栖息于江河、湖泊中。’
- 编程实现:设计一个淡水鱼类freshwaterfish, 该类继承fish, 增加自有数据成员生活习性fhabit,且
方法成员继承fish方法成员,增加信息输出示例如:‘草鱼:分布于我国,栖息于江河、湖泊中。属食草性鱼类。’
作业5:文件操作
1.编程实现:创建一个文本文件fish.txt,将淡水鱼列表[‘鲤鱼’、‘草鱼’、‘鲫鱼’、‘鳙鱼’、‘鲈鱼’]一行一个元素写入该文件中,
然后将该文本文件数据读取出来输出显示。
2.编程实现:创建一个表格文件excel.xlsx, 将淡水鱼字典{‘f1’:[‘鲤鱼’,‘杂食性’],‘f2’:[‘草鱼’,‘食草性’],‘f3’:[‘鲫鱼’,‘温水性’],‘f4’:[‘鳙鱼’,‘温水性’],‘f5’:[‘黑鱼’,‘肉食性’]}一行一个元素写入该文件中,
然后将该表格文件数据读取出来输出显示。
作业6:数据库编程
1.编程实现:利用sqlite3创建淡水鱼数据库fish.db, 并创建淡水鱼数据表tfish。
设计表结构tfish(fid, fname, fhabit),分别表示鱼编号,鱼名称,鱼习性。
已知5条淡水鱼数据内容如下:
‘f1’,‘鲤鱼’,‘杂食性’
‘f2’,‘草鱼’,‘食草性’
‘f3’,‘鲫鱼’,‘温水性’
‘f4’,‘鳙鱼’,‘温水性’
‘f5’,‘黑鱼’,‘肉食性’
要求将这5条淡水鱼数据记录存储sqlite3数据库中,然后再一行一个记录输出显示。
2.编程实现:利用mysql创建淡水鱼数据库fish, 并创建淡水鱼数据表tfish。
设计表结构tfish(fid, fname, fhabit),分别表示鱼编号,鱼名称,鱼习性。
已知5条淡水鱼数据内容同上。
要求将这5条淡水鱼数据记录存储mysql数据库中,然后再一行一个记录输出显示。
作业7:数据分析:
1.编程实现:利用pandas的DataFrame将下列淡水鱼数据指定行号(默认数字编号),指定列号(鱼号,鱼名、习性、产量)。
已知淡水鱼数据
data = [
['f1','鲤鱼','杂食性',300],
['f2','草鱼','食草性',240],
['f3','鲫鱼','温水性',500],
['f4','鳙鱼','温水性',400],
['f5','黑鱼','肉食性',480],
]
2.编程实现:利用上述淡水鱼数据中鱼名与产量的数据折线图生成淡水鱼产量统计图。
作业8:网络爬虫:
1.编程实现:利用requests爬虫库和json解析库实现疫情数据爬取。
已知:
(1)爬取网址:
url=‘https://api.inews.qq.com/newsqa/v1/query/inner/publish/modules/list?modules=statisGradeCityDetail,diseaseh5Shelf’
(2)爬取授权:
headers={
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36'
}
(3)爬取解析:
json_data = response.json()[‘data’][‘diseaseh5Shelf’][‘areaTree’][0][‘children’]
-
编程实现:利用xlrd库将以上爬取的数据(‘地区’、‘新增确诊’、‘治愈人数’、‘死亡人数’、‘现存人数’、‘累计确诊’)存入excel文件中。
-
编程实现:利用xlwt库读取上述excel文件中的’地区’和’新增确诊’两列数据,利用matplotlib库折线图可视化这两种数据。
作业9:GUI编程:
Python作业9-GUI编程
1.编程实现:利用tkinker进行GUI编程,图形界面显示以下淡水鱼数据。
已知淡水鱼数据
data = [
['f1','鲤鱼','杂食性',300],
['f2','草鱼','食草性',240],
['f3','鲫鱼','温水性',500],
['f4','鳙鱼','温水性',400],
['f5','黑鱼','肉食性',480],
]
作业10:Web开发:
1.编程实现:利用flask进行Web开发,Web网页呈现以下淡水鱼数据。
已知淡水鱼数据
data = [
['f1','鲤鱼','杂食性',300],
['f2','草鱼','食草性',240],
['f3','鲫鱼','温水性',500],
['f4','鳙鱼','温水性',400],
['f5','黑鱼','肉食性',480],
]
实验1:
快乐数
【问题描述】
编写一个算法来判断一个数是不是“快乐数”。 一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直 到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。
【样例输入】
32
【样例输出】
yes
【样例输入】
37
【样例输出】
no
#-*-coding:gb2312-*-
a=int(input())
i=b=0
while(a!=1 and i<50):
while(a/10!=0):
b+=(a%10)**2
a=a//10
a=b
b=0
i=i+1
if(a==1):
print("yes")
elif(i==50):
print("no")
用人名查电话
【问题描述】
定义一个电话簿,里头设置以下联系人:
‘mayun’:‘13309283335’,
‘zhaolong’:‘18989227822’,
‘zhangmin’:‘13382398921’,
‘Gorge’:‘19833824743’,
‘Jordan’:‘18807317878’,
‘Curry’:‘15093488129’,
‘Wade’:‘19282937665’
现在输入人名,查询他的号码。
【输入形式】
人名,是一个字符串。
【输出形式】
电话号码。如果该人不存在,返回"not found"
【样例输入】
mayun
【样例输出】
13309283335
#-*-coding:gb2312-*-
d1={'mayun':'13309283335',
'zhaolong':'18989227822',
'zhangmin':'13382398921',
'Gorge':'19833824743',
'Jordan':'18807317878',
'Curry':'15093488129',
'Wade':'19282937665'}
s=input()
print(d1.get(s,"not found"))
录取研究生
【问题描述】某高校录取研究生的要求是,每门课成绩不低于60分,总成绩不低于340分,370分以下为自费。编一程序实现输入一个学生的四门课成绩,试判断该生为该校录取的情况(没有录取“not”、自费“pay”、公费“free”三种情况)。
【输入形式】
输入四门课的成绩,成绩均为0~150之间的整数。输入4门课成绩的时候可以结合eval()和input()函数一次性输入4个值,输入数字时用逗号分隔
【输出形式】
not或者pay或者free
【样例输入】
four scores:55,120,110,120
【样例输出】
not
【样例说明】
【评分标准】
删除所有重复的单词
【问题描述】编写一个程序,接受一系列空格分隔的单词作为输入,并在删除所有重复的单词并按字母数字排序后打印这些单词。【输入形式】
【输出形式】
【样例输入】hello world and practice makes perfect and hello world again
【样例输出】again and hello makes perfect practice world
【样例说明】
【评分标准】
#-*-coding:gb2312-*-
word = input().split()
for i in word:
if word.count(i)>1:
word.remove(i)
word.sort()
print(*(word))
判断数中是否存在重复的数字
【问题描述】
输入一个数,判断该数中是否存在重复的数字。如1314,有重复,520,无重复。
【样例输入】
1314
【样例输出】
yes
【样例输入】
520
【样例输出】
no
d={}
n=input()
for i in range(len(n)):
d[n[i]]=d.get(n[i],0)+1
if d[n[i]]!=1:
print("yes")
break
else:
print("no")
求a+aa+aaa+aaaa
【问题描述】编写一个程序,给定的正整数a的值,计算a + aa + aaa + aaaa的值,
【输入形式】9
【输出形式】11106
【样例输入】
【样例输出】
【样例说明】
【评分标准】
#-*-coding:gb2312-*-
i=int(input())
j=i*10+i
k=j*10+i
m=k*10+i
n=m+k+i+j
print(n)
有效密码
【问题描述】网站要求用户输入用户名和密码进行注册。编写程序以检查用户输入的密码的有效性。以下是检查密码的标准:
- 至少有1个字母(大小写都至少有一个)
- 至少有1个数字
- 至少有1个字符(即非字母和非数字)
4.最短交易密码长度:6
5.交易密码的最大长度:12
编写函数isVaildPassword,函数为一个字符串,表示用户提供的密码,返回为True和False表示密码是否有效.
【样例输入】aBc123@
【样例输出】True
#-*-coding:gb2312-*-
s1=input()
def vaid(s2):
if(len(s2)<6 or len(s2)>12):
return False
n=j=k=m=0
for i in range(0,len(s2)):
if('0'<=s2[i]<='9'):
n=n+1
elif('a'<=s2[i]<='z'):
j=j+1
elif('A'<=s2[i]<='Z'):
k=k+1
else:
m=m+1
if((n>0) and(j>0) and(k>0) and(m>0)):
return True
else:
return False
if vaid(s1):
print("True")
else:
print("False")
猴子吃桃问题
【问题描述】猴子吃桃问题:
猴子摘下若干个桃子,第一天吃了桃子的一半多一个,以后每天吃了前一天剩下的一半多一个,到第n天吃以前发现只剩下一个桃子,
编写程序实现:据输入的天数计算并输出猴子共摘了几个桃子
【输入形式】输入的一行为一个非负整数,表示一共吃的天数。
【输出形式】输出的一行为一个非负整数,表示共摘了几个桃子,若输入的数据不合法(如:负数或小数),则输出"illegal data"。
【样例输入】3
【样例输出】10
【样例输入2】0
【样例输出2】0
a = input()
k = 1
for i in a[::]:
if i == '.' or i == "-":
k = 0
print("illegal data")
if k == 1:
b = int(a)
if b == 0:
print(0)
else:
n = 1
while b > 1:
n = (n+1)*2
b = b-1
print(n)
python小球反弹
问题描述】
已知一球从高空落下时,每次落地后反弹至原高度的四分之一再落下。编写一程序,从键盘输入整数n和m,求该球从n米的高空落下后,第m次落地时共经过的路程以及第m次落地后反弹的高度,并输出结果。
【输入形式】
从键盘输入整数n和m。
【输出形式】
输出两行:
第一行输出总路程,保留小数点后两位;
第二行输出第m次落地后反弹的高度,保留小数点后两位。
【输入样例】
10
3
【输出样例】
16.25
0.16
#-*-coding:gb2312-*-
n=int(input())
m=int(input())
sum=n
sum1=0
for i in range(0,m):
n+=sum1*2
sum=0.25*sum
sum1=sum
print(round(n, 2))
print(round(sum, 2))
韩信点兵
【问题描述】
有一群士兵,人数不超过n。韩信将其按照一行3人排队,余2人;按照一行5人排队,余1人;按照一行7人排队,刚好排成若干行。编写程序 计算士兵的人数。
(提示:可以采用穷举法求解。当人数上限比较大时,会有多种结果,要求全列举出来)
【输入形式】
人数上限 n
【输出形式】
士兵人数
【样例输入】
60
【样例输出】
56
【样例输入】
300
【样例输出】
56 161 266
#-*-coding:gb2312-*-
n=int(input())
for i in range(1,n+1):
if (i%3==2) and (i%5==1) and(i%7==0):
print(i,end=" ")