python实验题
Posted 追风小小少年
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python实验题相关的知识,希望对你有一定的参考价值。
华中农业大学python实验题,持续更新中
- 作业1:序列,字典和集合类型
- 作业2:函数
- 作业三(文件)
- 作业4:面向对象编程
- 作业5:文件操作
- 作业6:数据库编程
- 作业7:数据分析:
- 作业8:网络爬虫:
- 作业9:GUI编程:
- 作业10:Web开发:
- 实验1:
- 实验2
- 实验3
- 实验4
作业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'实验吧编程题:百米
第一次用python写关于表单自动提交的程序,不是特别简练
题目是这样的:
经过观察,只有数字是变动的,运算符是不变的,这就容易很多了
思路:
- 抓取网页内容
- 通过正则表达式提取数字内容
- 通过特定的算术表达式计算出结果
- 提交表单
- 返回网页内容
python程序:
1 #-coding:utf-8-*-
2 import requests
3 import re
4 url = "http://ctf5.shiyanbar.com/jia/"
5 session = requests.Session()
6 res1 = session.get(url)
7 zhengze = r"\'my_expr\'>(.*)</div>"
8 res2 = re.findall(zhengze,res1.content)[0] #查找与正则表达式匹配的内容
9 list = re.sub(\'[()+x-]\',\'\',res2).split() #将符号替换为空,之后将空格删除并放入列表
10 res3 = (int(list[0])+int(list[1]))*(int(list[2])-int(list[3]))-(int(list[4])+int(list[5])-int(list[6]))*int(list[7])
11 payload = {\'pass_key\':res3}
12 res4 = session.post(url+\'index.php?action=check_pass\',payload)
13 print res4.content
本文固定链接:http://www.cnblogs.com/hell0w/p/7624851.html 转载请注明出处,谢谢!
以上是关于python实验题的主要内容,如果未能解决你的问题,请参考以下文章