python题目总结2
实验四 Python组合数据类型创建列表以列表list1 = ["lift", "is", "short"]和list2 = ["You", "need", "python"],并完成以下任务:(1)输出listl中的第一个元素lift及其索引(下标)。(2)在short后面增加一个!list1 = ["lift", "is", "short"]list2 = ["You", "need", "p
实验四 Python 组合数据类型
- 创建列表以列表list1 = ["lift", "is", "short"]和list2 = ["You", "need", "python"],并完成以下任务:
(1)输出listl中的第一个元素lift及其索引(下标)。
(2)在short后面增加一个!list1 = ["lift", "is", "short"] list2 = ["You", "need", "python"] print(list1[0],list1.index('lift')) list1.append('!') print(list1)
- 编写程序,将列表s=[9,7,8,3,2,1,5,6]中的偶数变成它的平方,奇数保持不变。其运行效果如下图所示。
提示:可以利用“if(s[i]%2==0”的语句形式判断列表中的第i个元素是否为偶数。s=[9,7,8,3,2,1,5,6] for i in range( len(s)): if s[i]%2==0: s[i]=s[i]*s[i] print(s)
- 分别使用if和while语句删除将列表x = [1,2,1,2,1,1,1]中的元素“1”全部删除。
x = [1,2,1,2,1,1,1] y=x[:] for i in y: if i==1: x.remove(i) print(x)
x = [1,2,1,
- 编写程序,删除一个list里面的重复元素,即所有元素不重复。
提示:可以利用s. append(x)方法把对象x追加到列表s的尾部。list1=[1,2,3,4,5,1,2,3] list2=[] for i in list1: if i not in list2: list2.append(i) print(list2)
-
2(选做)统计所输入字符串中单词的个数,单词之间用空格分隔。其运行效果如下 请输入字符串: The qu1ck brown fox jumps over the lazy dog.
sum=1 s=input("请输入字符串:") for i in s: if i==' ': sum+=1 print(sum) s=input("请输入字符串:") list=s.split(' ') print(len(list))
-
编写程序,输入字符串,将其每个字符的ASCI码形成列表并输出,运行效果如下图所示。
请输入一个字符串:ABCDE123
[65,66,67,68,68,49,50,51]
s=input("请输入字符串:") list=[] for i in s: a=ord(i) list.append(a) print(list)
- (选做)创建列表,内容为a-z、A~Z和0-9,从中随机抽出6个字符作为验证码。提示:使用ASCII值和chr函数(chr()主要用来表示ascii码对应的字符他的输入时数字,可以用十进制,也可以用十六进制)生成大小写字母或string库。
import random lists=[] list1=[chr(i) for i in range(97,123) ] lists.extend(list1) list2=[chr(i) for i in range(65,91)] lists.extend(list2) list3=list(range(10)) lists.extend(list3) code=[] l=len(lists) for i in range(6): r=random.randint(0,l-1) code.append(lists[r]) print(code)
- 使用列表实现筛选法求素数。
prinmNumber=[] x = eval(input('请输入一个大于 2 的自然数: ')) if x>2: for i in range(2,x): flag = True for j in range(2, int(i/2)+1): if i % j == 0: flag = False break if flag: prinmNumber.append(i) print(prinmNumber) else: print('数请输入大于2的数字')
- 编写程序,求列表s=[9,7,8,3,2,1,55,6]中的元素个数、最大值、最小值,以及元素之和、平均值。请思考有哪几种实现方法?
提示:可以分别利用for循环、 while循环、直接访问列表元素( for i in s…)、间接访间列表元素( for i in range(O,len(s))…)、正序访问(i=0; while i<len(s)…)、反序访问(i=len(s)-1;while i>=0…)以及while True:… break等方法。num=0 sum=0 s=[9,7,8,3,2,1,55,6] for i in s: num=num+1 sum=sum+i ave=sum/num print("元素个数",num) print("最大值",max(s)) print("最小值",min(s)) print("总和",sum) print("平均值",ave)
- 创建一个空字典 student,录入学生姓名和成绩,并一一对应,当所有学生的信息录入完之后,输入1退出。需要注意的是(学生成绩范围为0~150)超出范围重新输入。
student={} alist=[] blist=[] prime=0 while prime==0: a=input("请输入学生姓名:") alist.append(a) b=eval(input("请输入学生个成绩:")) if b>0 and b<150: blist.append(b) else: print("输入错误,请重新输入") prime=int(input("是否需要继续?是请输入0,否请输入1")) student=dict(zip(alist,blist)) print('学生姓名及对应成绩为:',student)
- 已知一个字典包含若干员工信息(姓名和性别),请编写一个程序,删除性别为男的员工信息。
a={'liming':'男','lihua':'女','zhangsan':'男','lili':'女'} list1=[] list2=[] v=a.values() k=a.keys() for i in k: list1.append(i) for j in v: list2.append(j) for n in list2: if(n=='男'): x=list2.index('男')#显示‘男’的下标(因为值与键的下标是一致的) list2.remove('男') list1.remove(list1[x]) dic=dict(zip(list1,list2))#形成新的字典 print(dic)
- (选做)请编写一个程序,使用字典存储学生信息,学生信息包括学号和姓名,请根据学生学号从小到大输出学生的信息。提示:使用sorted函数并指定其对应的参数key的值。
##1 list1=[] a={'1001':'张三','1009':'李四','1002':'李三','1007':'王五','1006':'王六'} b=sorted(a) for i in b: list1.append(a[i]) #a[i]是指i键对应的值,从而使值也形成一个列表 c=dict(zip(b,list1)) print(c)
##2 prime = 0 blist = [] alist = [] def get_key(dict, value): return [k for k, v in dict.items() if v == value] while prime == 0: a = input('请输入学生姓名:') alist.append(a) b = int(input('请输入学生学号:')) blist.append(b) prime = int(input('是否继续?(是请输入0,否请输入1)')) student = dict(zip(alist, blist)) student = sorted(student.items(), key=lambda x: x[1]) print(dict(student))
- (选做)请编写一个程序,用于统计字符串中每个字母的出现次数(字母忽略大小写,a和A看是作一个字母,统计出的结果,请按照[‘a’:3,’b’:2]的格式输出。
alist=[] blist=[] s=input("请输入字符串:") for i in s: if i not in alist: alist.append(i) blist=1 else: blist+=1 now=dict(zip(alist,blist)) print(now)
-
实验五 函数设计
1.1.编写程序,利用元组作为函数的返回值,求序列类型中的最大值、最小值和元素个数,并编写测试代码,假设测试数据分别为s1=[9,7,8,3,2,1,55,6]、s2=[" apple","pear" melon","kiwi"]和s3=" TheQuickBrownFox"。运行效果参见下图。
def f(s):
maxx=max(s)
minn=min(s)
num=len(s)
return maxx,minn,num
s1=[9,7,8,3,2,1,55,6]
print("最大值,最小值,元素个数分别为:",f(s1))
s2=["apple","pear","melon","kiwi"]
print("最大值,最小值,元素个数分别为:",f(s2))
s3="TheQuickBrownFox"
print("最大值,最小值,元素个数分别为:",f(s3))
- 设计一个函数,实现输入一个五位数的正整数(程序要对输入数据的合法性进行检查),对输入的数据加密后再返回,加密规则:每位数字都加上7,然后用10取模,再将得到的结果交换顺序:第一位和第二位交换,第三位和第五位交换,第一位和第四位交换。
def ff(n): ans=[] while n: ans.append((n%10+7)%10) n=n//10 ans.reverse() ans[0],ans[1]=ans[1],ans[0] ans[2],ans[4]=ans[4],ans[2] ans[0],ans[3]=ans[3],ans[0] return int("".join(map(str, ans))) s=eval(input("请输入5位数的正整数")) print(ff(s))
- 请编写一个程序,使用字典存储学生信息(自己编写至少十个学生的信息),学生信息包括学号和姓名,请根据学生学号从小到大输出学生的信息。提示:使用sorted函数并指定其对应的参数key的值。
def ff(s): x = sorted(s) list1 = [] for i in x: list1.append(s[i]) c = dict(zip(x, list1)) return c s = {'zyf': 315, 'ztd': 564, 'tfe': 145, 'trd': 157} print(ff(s))
3‘’首先,使用列表推导式和标准库 random生成一个包含50个介于1~100的随机整数的列表,然后编写函数 def isPrime(n)用来测试整数n是否为素数,接下来使用内置函数 filter(把函数 isPrime()作用到包含若干随机整数的列表lst上,最后程序输出一个列表,其中只包含列表lst中不是素数的那些整数。
def isPrime(n): list2=[] for i in n: for j in range(2,int(i/2)+1): if i%j==0: list2.append(i) break else: j=j+1 return list2 import random x = [random.randint(1, 101) for i in range(50)] print(x) print(list(isPrime(x))) def isPrime(n): if n == 1: return 1 for i in range(2, int(n**0.5) + 1): if n % i == 0: return 1 return 0 import random x = [random.randint(1, 101) for i in range(50)] print(x) print(list(filter(isPrime, x)))
4.编写程序,清分别使用递归和非递归方式实现。定义一个求阶乘的函数 fact(n),并编写测试代码,要求输入整数(n0)。运行效果如下图所示。
请输入整数n(n n≥0):5
S!=120
def fact(n):
if n==0 or n==1:
return 1
else:
return n*fact(n-1)
n=eval(input("请输入一个数:"))
print(fact(n))
def fact(n):
s=1
if n == 0 or n == 1:
return 1
else:
for i in range(1,n+1):
s=s*i
return s
n=eval(input("请输入一个数:"))
print(fact(n))
- 编写程序实现斐波那契数列,斐波那契数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)。
def ff(n): if n==1 or n==2: return 1 else: return ff(n-1)+ff(n-2) n=eval(input("请输入n:")) print(ff(n))
- 编写程序,定义一个求 Fibonacci(斐波那契)数列的函数fib(n),并编写测试代码,输出前20项(每项宽度5个字符位置,右对齐),每行输出10个。运行效果参见下图。请分别使用递归和非递归方式实现。
def fib(n): if n==1 or n==2: return 1 else: return fib(n-1)+fib(n-2) for i in range(1,21): if i%10==0: print("%5d"%fib(i),end='\n') else: print("%5d"%fib(i),end=' ')
3,阅读并适当增加必要的代码来调试下面的代码,分析代码功能,发现并解决代码中的错误。提示:此代码计算。
def cni(n,i):
minNI=min(i,n-i)
result = 1
for j in range (0,minNI):
def cni(n, i): minNI = min(i, n - i) result = 1 for j in range(0, minNI): result = result * (n - j) // (minNI - j) return result n=eval(input("n=")) i=eval(input("i=")) print(cni(n,i))
4.小球从100m的高度自由落下,每次落地后反弹回原高度的一半;再落下,定义函数cal计算小球在第n次落地时,共经过多少米以及第n次反弹多高。定义全局变量Sn和Hn分别存储小球经过的路程和第n次的高度。主函数输入n的值,并调用cal函数计算输出Sn和Hn的值。
def cal(n): global sn global hn sn=0 hn=100 for i in range(1,n+1): if i==1: sn=100 hn=50 else: sn=sn+hn*2 hn=hn/2 return sn,hn n=eval(input("请输入n:")) print(cal(n))
5.(选做)编写程序,利用可变参数定义一个求任意个数数值的最小值的函数min_n(a,b,c),并编写测试代码。例如,对于“ print(min_n(8,2))”以及“ print(minn(16,1,7,4,15)”的测试代码,程序运行结果如图所示
def minn(*p): print("最小值为",end=" ") return min(p) print(minn(8,2)) print(minn(16,1,7,4,15))
实验六 面向对象的程序设计
- 设计一个圆类,包括圆心位置、半径、颜色等属性。编写构造方法,计算周长和面积。
import math class circle: def __init__(self,o,r,color): self.o=o self.r=r self.color=color def length(self): C=math.pi*2*self.r return C def area(self): S=math.pi*self.r**2 return S ff=circle((0,0),2,'red') print("周长为:{:.2f}".format(ff.length())) print("面积为:{:.2f}".format(ff.area()))
- 设计一个课程类,包括课程编号、课程名称、任课教师、上课地点等属性,把上课地点变量设为私有的,增加构造方法和显示课程信息的方法。
class course: def __init__(self,num,name,teacher,local): self.num=num self.name=name self.teacher=teacher self.__local=local def showmessage(self): print("课程编号:",self.num) print("课程名称:",self.name) print("任课教师:",self.teacher) print("上课地点:",self.__local) ff=course('n123','Python','宋云胜','N201') ff.showmessage()
- 设计一个描述自由落体运动的类,要求能获得任意时刻的速度及位移,并进行测试。已知重力加速度为9.8m
class free: def __init__(self,t): self.t=t def getv(self): v=9.8*self.t return v def getx(self): x=1/2*9.8*self.t**2 return x if __name__=='__main__': t = eval(input("请输入任意时间t:")) ff = free(t) print("速度为:{:.2f}".format(ff.getv())) print("位移为:{:.2f}".format(ff.getx()))
- 设计一个二维向量类,实现向量的加法、减法及向量与标量的乘法和除法运算。
class vector: def __init__(self,a,b): self.a=a self.b=b def add(self): c1=self.a[0]+self.b[0] c2=self.a[1]+self.b[1] print("相加:",(c1,c2)) def jian(self): c1 = self.a[0] - self.b[0] c2 = self.a[1] - self.b[1] print("相减:", (c1, c2)) def cheng(self): c1 = self.a[0] * self.b[0] c2 = self.a[1] * self.b[1] c=c1+c2 print("相乘", c) def chu(self): c1 = self.a[0] / self.b[0] c2 = self.a[1] / self.b[1] print("相除", (c1, c2)) ff=vector((1,2),(3,4)) ff.add() ff.jian() ff.cheng() ff.chu()
5.为二次方程式ax2+bx+c=0设计一个名为 Equation的类,这个类包括:
- 一个参数为a、b、c的构造方法;
- 一个名为 getDiscriminant1的方法返回判别式的值;
3一个名为 getRoot1和 getRoo2t的方法返回等式的两个根,如果判别式为负,这些方法返回0
import math
class Equation:
def __init__(self,a,b,c):
self.a=a
self.b=b
self.c=c
def getDiscriminant1(self):
t=self.b**2-4*self.a*self.c
return t
def getRoot1(self):
if self.getDiscriminant1()>0:
return ((-self.b)+math.sqrt(self.getDiscriminant1()))/2*self.a
else:
return 0
def getRoot2(self):
if self.getDiscriminant1()>0:
return ((-self.b)-math.sqrt(self.getDiscriminant1()))/2*self.a
else:
return 0
ff=Equation(1,2,-1)
print(ff.getDiscriminant1())
print(ff.getRoot1())
print(ff.getRoot2())
6 设计一个整形数组的封装类,要求实现下列功能:
- 显示全部数组数据
- 显示从某位置开始的一段连续数组数据
class List: def __init__(self,lis): self.__lis=lis self.len=len(lis) def bufen(self,id): return self.__lis[id:] def quanbu(self): return self.__lis ff=List([1,2,3,4,5]) print(ff.bufen(2)) print(ff.quanbu())
实验七 异常处理
- 从键盘输入一个整数,求100除以它的商,并显示输出。要求对从键盘输入的数值进行异常处理。
try: num=int(input("请输入一个整数")) x=100/num print(x) except ValueError: print("输入有误,请重新输入")
-
编程实现索引超出范围异常 Index Error类型。例如:chars=["a","b",100,-37,2]
try: chars=["a","b",100,-37,2] chars[5]='k' except IndexError: print("索引超出范围")
-
录入一个学生的成绩,把该学生的成绩转换为A优秀、B良好、C合格、D不及格的形式,最后将该学生的成绩打印出来。要求使用 assert断言处理分数不合理的情况。
try: score=int(input("请输入学生的成绩:")) assert 0 <= score <= 100 if score>=90 and score<=100: print("A") if score>=80 and score<90: print("B") if score >= 60 and score <80: print("C") if score<60: print("D") except ValueError: print("输入必须为整数,请重新输入") except AssertionError: print("断言0<=成绩<=100失败,请注意范围")
-
.(选做)定义一个 Circle 类,其中有求面积的方法,当半径小于 0 时,抛出一个用户自定义异常
import math class RangeErrorexception(Exception): def __init__(self, error_reason='圆的面积不能为负数!'): Exception.__init__(self, error_reason) class Circle(): def __init__(self,r): self.r=r if self.r < 0: raise RangeErrorexception def getS(self): s = math.pi * self.r *self.r return s try: r=eval(input("请输入半径r:")) c1=Circle(r) print(c1.getS()) except RangeErrorexception as reason: print(reason)
- 假设成年人的体重和身高存在此种关系:身高(厘米)-100=标准体重(千克) 如果一个人的体重与其标准体重的差值在正负5%之间,显示“体重正常”,其他则显示“体重超标”或者“体重不达标”。编写程序,能处理用户输入的异常并且使用自定义异常类来处理身高小于30cm、大于250cm的异常情况。
class HighErrorexxeption(Exception): def __init__(self,error_reason='身高不能小于30cm或者大于250cm'): Exception.__init__(self,error_reason) class relation: def __init__(self,high,weight): self.high=high self.weight=weight if self.high<30 or self.high>250: raise HighErrorexxeption def rel(self): y=(self.high-100)-self.weight if y>=-0.05 or y<=0.05: print("体重正常") else: print("体重超标或者不达标") try: h=eval(input("请输入身高")) w=eval(input("请输入体重")) ff=relation(h,w) ff.rel() except HighErrorexxeption as reason: print(reason)
-
.(选做)设计一个一元二次方程类,并为这个类添加异常处理。
import math class FcErrorexception(Exception): def __init__(self,error_reason="dirta<0,函数不存在实数根"): Exception.__init__(self,error_reason) class panduan: def __init__(self, a, b, c): self.a=a self.b=b self.c=c def getDiscriminant1(self): t=self.b**2-4*self.a*self.c return t def getRoot1(self): if self.getDiscriminant1()>0: return ((-self.b)+math.sqrt(self.getDiscriminant1()))/2*self.a else: raise FcErrorexception def getRoot2(self): if self.getDiscriminant1()>0: return ((-self.b)-math.sqrt(self.getDiscriminant1()))/2*self.a else: raise FcErrorexception try: ff = panduan(1, 2, 1) print(ff.getDiscriminant1()) print(ff.getRoot1()) print(ff.getRoot2()) except FcErrorexception as reason: print(reason)
实验八 文件处理
实验要求:新建一个文件夹命名为“学号+姓名”格式命名,以下所有实验代码均保存在此此文件夹。
- 创建文件suiji.txt,文件共100000行,每行存放一个1~100之间的整数,最后将此文件保存至data文件夹.
提示:调用random. randint(1,100)方法产生随机数
import random
f=open("suiji.txt",'w+')
for i in range(1,100000):
f.write(str(random.randint(1,100)))
f.write('\n')
f.close()
2、统计文件(tongji.csv)中的大写字母、小写字母和数字出现的次数。
提示:
- 字符串.isdigit() 所有字符都是数字,为真返回 Ture,否则返回 False。
- 字符串.islower() 所有字符都是小写,为真返回 Ture,否则返回 False。
- 字符串.isupper() 所有字符都是大写,为真返回 Ture,否则返回 False
with open("tongji.csv",'w+') as fp:
count1=0
count2=0
count3=0
s=fp.read()
for i in s:
if i.isupper():
count1+=1
if i.islower():
count2+=1
if i.isdigit():
count3+=1
print("大写字母:",count1)
print("小写字母:",count2)
print("数字:",count3)
3、计算(pingjun.csv)文件中所有数值数据的和。
with open("pingjun.csv",'w+') as fp:
s=fp.read()
sum=0
for i in s:
sum+=i
print(sum)
4、读取一个文件(test_row.txt),显示除了以#号开头的行以外的所有行。
提示:使用str. startswith()方法判定字符串是否以某个符开头。
ith open("test_row.txt",'w+') as fp:
s=fp.readlines()
for row in s:
if row[0]!='#':
print(row,'\n')
5、利用os模块读取data文件夹中的所有数据文件,并将其名字前面统一加上“文件操作”。
import os
oldname=os.listdir('.\data')
os.chdir('.\data')# 修改当前py文件所在位置
for name in oldname:
os.rename(name, "文件操作-"+name)
6.打开一个英文的文本文件,将该文件中的每个英文字母加密后写入到一个新文件。加密的方法是:将A变成B,B变成C,Y变成Z,Z变成A;a变成b,b变成c,其他字符不变化
with open("abc.txt",'w+') as fp:
for i in fp:
if i=='A':
i='B'
if i=='B':
i='C'
if i=='Y':
i='Z'
if i=='Z':
i='A'
if i=='a':
i='b'
if i=='b':
i='c'
print(fp)
更多推荐
所有评论(0)