《Python程序设计》课程
实验报告四 字符串与正则表达式
一、实验目的和要求:
二、实验内容:(给出具体代码(复制)和程序运行结果(截图))
1 输入一个字符串,将该字符串中下标为偶数的字符组成新串并通过字符串格式化方式显示。
i = str(input())
print('%s'%(i[::2]))
2 编写程序,生成一个15个不重复的大小写字母组成的列表。
import random
s = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",
"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"] #根据要求定义列表元素范围,无要求时也可定义字符串更方便
#方法1:
List1=[]
for i in range(10): #循环10遍,生成10组密码
for i in range(8):
print (random.choice(s),end="") #random.choice(seq)实现从序列或集合seq中随机选取一个元素
List1.append(random.choice(s))
print(List1)
3给定字符串"site sea suede sweet see kase sse ssee loses",匹配出所有s开头,e结尾的单词。
text ='site sea sue sweet see case sse ssee loses'
re.findall(r'\bs\S*?e\b',text)
结果为:['site', 'sue', 'see', 'sse', 'ssee']
4 生成15个包括10个字符的随机密码,密码中的字符只能是大小写字母、数字和特殊字符“@”、“$”、“#”、“&”、“_”、“~”构成。
import random
s = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",
"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z",
"0","1","2","3","4","5","6","7","8","9",
“@”,“$”,“#”,“&”,“_”,“~“] #根据要求定义列表元素范围,无要求时也可定义字符串更方便
#方法1:
for i in range(10): #循环10遍,生成10组密码
for i in range(8):
print (random.choice(s),end="") #random.choice(seq)实现从序列或集合seq中随机选取一个元素
print("\n")
三、实验过程中遇到的问题及解决办法。
题目过于简单,问题暂无
熟悉字符串与正则表达式
1
在Python中,以下标识符合法的是()。
_
3C
it's
str
正确答案: A 我的答案:A 得分: 5.0分
2
在Python表达式中可以使用()控制运算符的优先级。
()
[ ]
{ }
<>
正确答案: A 我的答案:A 得分: 5.0分
3
在下列Python语句中非法的是()
x=y=1
x=(y=1)
x,y=y,x
x=1;y=1
正确答案: B 我的答案:D 得分: 0.0分
4
以下Python注释代码不正确的是()。
#Python注释代码
#Python注释代码1#Python注释代码2
"""Python文档注释"""
//Python注释代码
正确答案: D 我的答案:D 得分: 5.0分
5
数学关系式2 2 2 2 x>2 or x<=10 正确答案: B 我的答案:B 得分: 5.0分 6 在Python中,以下赋值语句正确的是()。 x+y=10 x=2y x=y=20 3y=x+1 正确答案: C 我的答案:C 得分: 5.0分 7 为了给整型变量x、y、z赋初值10.下面的Python赋值语句正确的是()。 xyz=10 x=10 y=10 z=10 x=y=z=10 x=10,y=10,z=10 正确答案: C 我的答案:C 得分: 5.0分 8 为了给整型变量x、y、z赋初值5,下面Python赋值语句正确的是()。 x=5;y=5;z=5 xyz=5 x,y,z=5 x=5,y=5,z=5 正确答案: A 我的答案:C 得分: 0.0分 9 x=2并且y=3,复合赋值语句x*=y+5执行后,x变量中的值是()。 11 16 13 26 正确答案: B 我的答案:B 得分: 5.0分 10 在整型变量x中存放了一个两位数,如果要将该两位数的个位数字和十位数字交换,例如将13变成31,以下Python表达式正确的是()。 (x%10)*10+x//10 (x%10)//10+x//10 (x/10)%10+x//10 (x%10)*10+x%10 正确答案: A 我的答案:A 得分: 5.0分 1 Python语句分为( )语句和复合语句。 正确答案: 第一空: 简单 我的答案: 得分: 5.0分 第一空: 简单 批语 2 在Python使用( )格式划分语句块。 正确答案: 第一空: 缩进对齐 我的答案: 得分: 0.0分 第一空: 缩进 批语 3 在Python中如果语句太长,可以使用( )作为续行符。 正确答案: 第一空: \ 我的答案: 得分: 5.0分 第一空: \ 批语 4 正确答案: 第一空: ; 我的答案: 得分: 5.0分 第一空: , 批语 5 Python中要表示一个空的代码块,可以使用空语句( )。 正确答案: 第一空: pass 我的答案: 得分: 0.0分 第一空: _ 批语 6 Python表达式4.5/2的值为( )。 正确答案: 第一空: 2.25 我的答案: 得分: 0.0分 第一空: 2 批语 7 正确答案: 第一空: 2.0 我的答案: 得分: 0.0分 第一空: 2.25 批语 8 正确答案: 第一空: 0.5 我的答案: 得分: 5.0分 第一空: 0.5 批语 9 Python表达式12/4-2+5*8/4%5/2的值为( )。 正确答案: 第一空: 1.0 我的答案: 得分: 0.0分 第一空: 1 批语 10 Python语句序列“a,b=3,4;a,b=b,a;print(a,b)”的执行结果是( )。 正确答案: 第一空: 4 3 我的答案: 得分: 5.0分 第一空: 4,3 1 从键盘输入一个正整数列表,以-1结束,分别计算列表中奇数和偶数的和。 (10.0分) 正确答案: #exercise4_1.py #coding=utf-8 list1=[] sum1,sum2=0,0 a=int(input("请输入一个正整数(-1表示结束):")) while a!=-1: list1.append(a) if a%2!=0: sum1+=a else: sum2+=a a=int(input("请输入一个正整数(-1表示结束):")) print("列表为:" , list1) print("奇数和:",sum1,",偶数和:",sum2,sep="") 我的答案: 键盘输入的过程我就不写了,随机生成一个类似的列表代替 import random L = [ random.randint(1, 100) for x in range(10) ] A = [ x for x in L if not x % 2 ] B = [ x for x in L if x % 2 ] print(L) print("偶数列表:{0} 和为:{1}".format(A,sum(A))) print("奇数列表:{0} 和为:{1}".format(B,sum(B))) 2 已知10个学生的成绩为68,75,32,99,78,45,88,72,83,78,请将成绩存放在列表中,请对其进行统计,输出优(100~90)、良(89~80)、中(79~60)、差(59~0)4个等级的人数。 (10.0分) 正确答案: #exercise4_2.py #coding=utf-8 score=[68, 75, 32, 99, 78, 45, 88, 72, 83, 78] a,b,c,d = 0,0,0,0 #输出所有成绩以及进行分段统计 print("成绩分别为:",end=' ') for s in score: print(s,end=' ') if s < 60: d = d + 1 elif s < 80: c = c + 1 elif s < 90: b = b + 1 else: a = a + 1 #换行 print() print("分段统计结果:优",a,"人,良",b,"人,中",c,"人,差",d,"人") 3 利用while循环创建一个包含10个奇数的列表,如果输入的不是奇数要给出提示信息并能继续输入,然后计算该列表的和与平均值。 (10.0分) 正确答案: #exercise4_3_1.py #coding=utf-8 print("请输入数字构建一个包含10个奇数的列表") count=0 list1=[] while count<10: a=int(input("请输入数字:")) if a%2!=0: list1.append(a) count+=1 else: print("输入的不是奇数!!") print("列表为:" , list1) print("和:",sum(list1)) print("平均值:",sum(list1)/len(list1)) 我的答案: 4 请用字典编程,已知某班学生的姓名和成绩如下: 姓名 成绩 姓名 成绩 张三 45 司音 90 李四 78 赵敏 78 徐来 40 张旭宁 99 沙思思 96 柏龙 60 如一 65 思琪 87 输出这个班的学生姓名和成绩,并求出全班同学的人数和平均分并显示。 (10.0分) 正确答案: #exercise4_4.py #coding=utf-8 studscore = {"张三": 45, "李四": 78, \ "徐来": 40,"沙思思": 96, \ "如一": 65, "司音": 90, \ "赵敏": 78, "张旭宁": 99, \ "柏龙": 60, "思琪": 87} #输出所有成绩: print("成绩分别为:") for key in studscore.keys(): print(key,studscore[key]) ss = len(studscore) avrscore = sum(studscore.values())/ss print("全班共有",ss,"人,平均成绩为:",avrscore,"分。") 我的答案: 5 (30.0分) 正确答案: #exercise4_5.py #coding=utf-8 list1=[2.3,4.5,24,17,1,7.8,39,21,0.5,1.2,4,1,0.3] s1,s2,s3,s4=0,0,0,0 dict1={} for i in list1: if i>=10: s1+=1 elif i>=5: s2+=1 elif i>=3: s3+=1 else: s4+=1 dict1['platinum']=s1 dict1['gold']=s2 dict1['silver']=s3 dict1['ordinary']=s4 print(dict1) 我的答案: 6 (30.0分) 正确答案: #exercise4_6.py #coding=utf-8 #变量说明:bonus奖金 n入职年限 sales销售业绩 ratio奖金比例 list1=[] n=int(input("请输入入职年限:")) while n!=-1: sales=float(input("请输入销售业绩:")) if n>5: if sales>15000: ratio=0.2 elif sales>10000: ratio=0.15 elif sales>5000: ratio=0.1 else: ratio=0.05 else: if sales>4000: ratio=0.045 else: ratio=0.01 bonus=sales*ratio print("您的奖金比例:",ratio,"您的奖金:",bonus) list1.append(bonus) n=int(input("请输入入职年限:")) print("奖金列表为:",list1) 我的答案: 1 输入5个整数放到列表list1中,输出下标及值,然后将列表list1中大于平均值的元素组成一个新列表list2,输出平均值和列表list2。请利用列表推导式解决该问题。 正确答案: #exercise4_7.py #coding=utf-8 list1=[int(input("请输入第"+str(i+1)+"个数字:")) for i in range(5)] for i,x in enumerate(list1): print('下标:',i,' 值:',x) avg = sum(list1)/len(list1) list2 = [i for i in list1 if i>avg] print("平均值:",avg) print(list2) 我的答案: def main(): 2 编写程序,将由1、2、3、4这4个数字组成的每位数都不相同的所有三位数存入一个列表中并输出该列表。请利用列表推导式解决该问题。 正确答案: #exercise4_8.py #coding=utf-8 digits=(1,2,3,4) a=[i*100+j*10+k for i in digits for j in digits for k in digits \ if i!=j and j!=k and i!=k] print(a) 我的答案: def main(): 3 编写程序,给定列表[1,9,8,7,6,5,13,3,2,1],先输出原列表,删除其中所有奇数后再输出。请利用列表推导式解决该问题。 正确答案: #exercise4_9.py #coding=utf-8 list1=[1,9,8,7,6,5,13,3,2,1] print("列表:",list1) list1=[i for i in list1 if i%2==0] print("删除其中所有奇数:",list1) 我的答案: def main(): 批语 刚好保留了奇数,删除了偶数。 4 正确答案: #exercise4_10.py #coding=utf-8 kk=[(x,y,100-x-y) for x in range(21) \ for y in range(34) if (5*x+3*y+(100-x-y)/3==100)] for i in kk: print("公鸡:",i[0],"母鸡:",i[1],"小鸡:",i[2]) 我的答案: def main(): 1 编写函数,判断一个数是否为素数。调用该函数判断从键盘输入的数是否为素数。素数也称为质数,是指只能被1和它本身整除的数。 import math else: 2 编写函数,求出一个数除了1和自身以外的因子。从键盘输入一个数,调用该函数输出除了1和它本身以外的所有因子。 x=int(input("input x=")) a=2 s=[] for i in range(1,x+1): if x>a and x%a==0: s.append(a) a=a+1 print("answer is",s) 3编写函数,判断一个数是否为水仙花数。调用该函数打印出1000以内的所有水仙花数。 水仙花数是指一个n位数(n>=3),它的每个位上的数字的n次幂之和等于它本身。例如:13+53+33=153,则153是水仙花数。水仙花数知识自幂数的一种,严格来说三位数的3次幂数才称为水仙花数。 # Python 检测用户输入的数字是否为阿姆斯特朗数 # 获取用户输入的数字 num = int(input("请输入一个数字: ")) # 初始化变量 sum sum = 0 # 每位数需要的指数 n = len(str(num)) # 检测 temp = num while temp > 0: digit = temp % 10#digit取得temp位数的最后位 sum += digit ** n temp //= 10#逐渐将个、十、百的位数去掉 # 输出结果 if num == sum: print(num,"是阿姆斯特朗数") else: print(num,"不是阿姆斯特朗数") 4 编写函数,求斐波那契数列的前20项。斐波那契数列的第1项和第2项分别是0和1,从第3项开始,每一项都是前两项之和。如:0,1,1,2,3,5,8,13,21…。试用递归函数实现。 f1 = 1;f2 = 1 for i in range(1,11): print(str.format("{0:6}{1:6}", f1, f2), end=" ") #每行输出两个数,每个占6位,空格分隔 if i % 2 == 0:print() #显示4项后换行 f1 += f2; f2 += f1 #关键 1.从键盘输入一个正整数n,用while循环找出小于等于该整数n且能被23整除的最大正整数。如果找到了,输出该整数;如果没有找到,则输出“未找到”。 x = eval(input("请输入一个正整数:")) for i in range(x, 0, -1): if i%23== 0: print("{}是能被23整除的最大正整数。".format(i)) break else: print("未找到") 2.先定义函数fact(n)完成n!,并依次调用函数fact(n)来实现1/1!+1/3!+1/5!+1/7!+1/9!的运算,并用print函数输出求得的结果。 def fact(n): if n==1: return 1 else: result=1 for i in range(1,n+1): result*=i return result def main(): sum=0 for i in range(0,10): if i%2!=0: print(i) sum+=1/fact(i) print(sum) if __name__ == '__main__': main() 3.编写程序生成九九乘法表,并将之写入到文本文件multiply.txt中。并同时输出到屏幕上。 if __name__ == '__main__': with open("test01.txt","w+",encoding="utf-8") as wq: for i in range(1,10): for j in range(1,i+1): wq.write(str(j)+"*"+str(i)+"="+str(i*j)+" ") wq.write("\n") 4.定义一个学生Student类。 class student: def __init__(self,a,b,c,d,e): self.__num=a self.__name=b self.__sex=c self.__age=d self.__score=e def get_name(self): return self.__name def get_age(self): return self.__age def get_course(self): max=0 for i in self.__score: if i>max: max=i return max def main(): s=student('2018754127','魏**',"男",20,[60,60,61]) print(s.get_age()) print(s.get_course()) print(s.get_name()) if __name__ == '__main__': main()
二.填空题(共10题,50.0分)
在Python中书写两条语句时,语句之间可以使用( )作为分隔符。(填符号)
4.5//2的值为( )。
4.5%2的值为( )。一.其它(共6题,100.0分)
某家商店根据客户消费总额的不同将客户分为不同的类型。如果消费总额≥10万元,为铂金卡客户(platinum);如果消费总额≥5万元且<10万元,为金卡客户(gold);如果消费总额≥3万元且<5万元,为银卡客户(silver);如果消费总额<3万元,为普卡客户(ordinary)。现有一批顾客的消费金额(单位:万元)分别为2.3、4.5、24、17、1、7.8、39、21、0.5、1.2、4、1、0.3,将消费金额存储在列表list1中,输出一个字典,分别以platinum、gold、silver、ordinary为键,以各客户类型人数为值。
某企业为职工发放奖金:如果入职超过5年,且销售业绩超过15000元的员工,奖金比例为0.2;销售业绩超过10000元的员工,奖金比例为0.15;销售业绩超过5000元的员工,奖金比例为0.1;其他奖金比例为0.05。如果是入职不超过5年,且销售业绩超过4000的员工,奖金比例为0.045;否则为0.01。输入入职年限、销售业绩,输出奖金比例、奖金,并将奖金存放到列表中并输出该列表。入职年限(为整数)输入一1的时候结束输入,为了简化所有输入均假定正确,不需判断小于0的情况。奖金为销售业绩与奖金比例的乘积。一.其它(共4题,100.0分)
#list1=[100-i-j for i in range(0,10) for j in range(0,33) ]
#list1=[[u,w,q] for q in range(0,10) for w in range(0,33) for u in list1 if 3 * w + 5 * q + u / 3.0 == 100 ]
#list2=[1,9,8,7,6,5,13,3,2,1]
#list3=[u for u in list2 if u%2!=0]
list1=[]
sum=0
for i in range(0,5):
i=eval(input("输入整数"))
list1.append(i)
sum+=i
avg=sum/5
list3=[u for u in list1 if u>avg]
print(list3)
if __name__ == '__main__':
main()
i=1
list1=[i*100+j*10+k for i in range(1,5) for j in range(1,5) for k in range(1,5) if i!=j and i!=k and j!=k ]
print(list1)
if __name__ == '__main__':
main()
#list1=[100-i-j for i in range(0,10) for j in range(0,33) ]
#list1=[[u,w,q] for q in range(0,10) for w in range(0,33) for u in list1 if 3 * w + 5 * q + u / 3.0 == 100 ]
list2=[1,9,8,7,6,5,13,3,2,1]
list3=[u for u in list2 if u%2!=0]
print(list3)
if __name__ == '__main__':
main()
转存失败重新上传取消
百钱买百鸡:一只公鸡5元钱,一只母鸡3元钱,三只小鸡1元钱,现在要用100元钱买100只鸡,问公鸡、母鸡、小鸡各多少只?请利用列表推导式解决该问题。
list1=[100-i-j for i in range(0,10) for j in range(0,33) ]
list1=[[u,w,q] for q in range(0,10) for w in range(0,33) for u in list1 if 3 * w + 5 * q + u / 3.0 == 100 ]
print(list1)
if __name__ == '__main__':
main()
def IsPrime(Num):
if Num ==1:
return False
for n in range(2,int(math.sqrt(Num))+1):
if Num%n==0:
return False
else:
return True
n=input('输入回你要判断的数:')
n=int(n)
if IsPrime(n)==True:
print(n,'是素数答')
else:
print(n,'不是素数')