实验一:Python基础——判断、循环、函数
实验详细要求:本课程主要学习Python的程序控制结构与函数设计,具体内容为分支结构--条件表达式、
一.实验目的
1.掌握判断结构的语法
2.掌握循环结构的语法
3.掌握函数编程
二.实验环境
计算机,Python 3
三.实验内容
1. 分支结构
(1)题目:编写代码,利用if判断来制作一个猜数字的小游戏
问题描述:程序运行时,系统在指定范围内生成一个随机数字,然后用户进行猜测,并根据用户输入进行必要的提
代码:from random import randint
def guessNumber(maxNumber,maxTimes):
Number=randint(1,maxNumber)
for i in range(maxTimes):
x=eval(input('请输入您猜的数字:'))
if x==Number:
print('right')
break
elif x>Number:
print('too large')
else:
print('too small')
else:
print('次数已用完!')
print('正确的数字为:',Number)
guessNumber(10, 3)
程序运行截图:
2.循环结构
(1)题目:编写代码,利用while循环判断来制作一个猜数字的小游戏
问题描述:程序运行时,系统在指定范围内生成一个随机数字,然后用户进行猜测,并根据用户输入进行必要的提
代码:from random import randint
def guessNumber(maxNumber,maxTimes):
Number=randint(1,maxNumber)
i=1
while i<=maxTimes:
x=eval(input('请输入您猜的数字:'))
if x==Number:
print('right')
break
elif x<=Number:
i=i+1
print('too small')
else:
i=i+1
print('too large')
if i>maxTimes:
print('次数已用完!')
print('正确的数字为',Number)
guessNumber(10, 3)
程序运行截图:
(2)题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位
数都是多少?
代码:number=0
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:
x=i*100+j*10+k
print(x)
number=number+1
print('能组成',number,'个互不相同且无重复数字的三位数!')
程序运行截图:
(3)题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1
+2+3.编程找出1000以内的所有完数
代码:for i in range(2,1001):
k=[]
n=-1
s=i
for j in range(1,i):
if i%j==0:
n=n+1
s=s-j
k.append(j)
if s==0:
print(i,':')
for j in range(n):
print(str(k[j]),end='+')
print(k[n])
程序运行截图:
3.函数结构
(1)题目:下面的函数用来计算斐波那契数列中小于参数n的所有值。
代码:def Fibonacci(n):
(a,b)=(0,1)
print('斐波那契数列中小于参数',n,'的所有值为:')
while a < n:
print(a,end=' ')
(a,b)=(b,a+b)
n = int(input('请输入一个正整数:'))
Fibonacci(n)
程序运行截图:
(2)题目:利用列表实现筛选法求素数
问题描述:编写程序,输入一个大于2的自然数,然后输出小于该数字的所有素数组成的列表。
代码:def isPrime(n):
for i in range(2,n):
if n%i==0:
return 0
else:
return 1
ValueSet=set()
n=eval(input('请输入一个大于2的自然数:'))
for i in range(2,n):
if isPrime(i)==1:
ValueSet.add(i)
print('小于',n,'的所有素数组成的列表为:',ValueSet)
程序运行截图:
(3)题目:编写函数:判断回文,也就是正读反读都一样的字符串
例如:abcba”
代码:def isParlindromic(str):
return str==str[ : :-1]
str=input('请输入一个字符串:')
if isParlindromic(str):
print('{}是回文字符串'.format(str))
else:
print('{}不是回文字符串'.formatabcba(str))
程序运行截图:
(4)题目:编写函数:随机产生包含n个整数的列表,返回一个元组,其中第一
个元素为所有参数的平均值,其他元素为所有参数中大于平均值的整
数。
例如: 随机产生长度为3的列表[2, 1, 3],输出为(2.0, 3)
代码:import random
def demo(n):
p=random.sample(range(1,100),n)
print('随机产生的列表为:',p)
avg=sum(p)/len(p)
g=[i for i in p if i>avg]
return (avg,)+tuple(g)
s=eval(input('请输入列表的长度:'))
print('返回的元组为:',demo(s))
程序运行截图:
(5) 题目:编写函数: 一年365天, 每周工作5天,休息2天,休息日水平下降0.01,工作日要努
代码:def cal_a():
a=1.0
for i in range(365):
a=a*1.01
return a
def daydayup(df):
daydayup=1
for i in range(365):
if i%7 in [6,0]:
daydayup=daydayup*(1-0.01)
else:
daydayup=daydayup*(1+df)
return daydayup #返回daydayup的值作为函数结果
def main():
df=0.01
while daydayup(df) < cal_a():
df+=0.01
print('工作日的努力参数是:{:.3f}'.format(df))
main()
程序运行截图:
4.lambda表达式
(1) 题目:查找两个字符串首尾交叉的最大子串长度,连接两个字符串,首尾交叉部分只保留一份。例如,1
要求:程序中使用lambda表达式以及函数
代码:def check(str1, str2):
length1 = len(str1)
length = min(length1, len(str2))
k=max(range(0,length+1),key=lambda i: i
str1[length1-i:]==str2[:i]else False)
return(k,str1+str2[k:]) # k为重复字符的个数(两个字符
首尾交叉的最大子串长度)
str1 = '1234'
str2 = '2347'
print(str1, str2)
print(check(str1, str2))
程序运行截图:
四.总结体会
通过本实验我熟悉了判断结构、循环结构的语法以及基本的函数编程。如果明确知道循环执行的次数或者是要对一
实验二:Python基础二——字典、集合
一.实验目的
二.实验环境
计算机,Python 3
三.实验内容
实验内容包含变量、字符串、列表、列表推导式、切片、元组、生成器推导式、字典、集合的应用。
1.列表推导式与字典的应用
(1) 题目:问题描述:编写程序,先生成包含1000个随机字符的字符串,然后统计每个字符出现的次数。
代码:import string
import random
x=string.ascii_letters+string.digits+string.punctu
print('随机字符有:',x)
y=[random.choice(x) for i in range(1000)]
y=''.join(y)
print('生成的字符串为:',y)
d=dict()
for ch in y:
d[ch]=d.get(ch,0)+1
for k,v in d.items():
print(k,'出现的次数为:',v)
程序运行截图:
(2)题目:问题描述:编写一个程序,接受逗号分隔的单词序列作为输入,按
字母顺序排序后按逗号分隔的序列打印单词。
假设向程序提供以下输入:without,hello,bag,world
则输出为:bag,hello,without,world
代码:x=input('请输入以逗号分隔的单词序列:')
x=x.split(',')
x.sort()
print('按字母排序后的单词序列为:',','.join(x))
程序运行截图:
2.集合的应用
(1) 题目:问题描述:编写程序,输入两个集合setA与setB,分别输出它们两个交集的交、差、并。
代码:seta=eval(input('请输入第一个集合:'))
setb=eval(input('请输入第二个集合:'))
print("交集{},并集{},差集
{}".format(seta&setb,seta|setb,seta-setb))
程序运行截图:
(2)题目:编写一个程序,接受一系列空格分隔的单词作为输入,并在删除所有
重复的单词并按字母数字排序后打印这些单词。
代码:x=input('请输入以空格分隔的单词序列:')
x=x.split()
x=set(x)
x=list(x)
x.sort()
print('按字母排序后的单词序列为:',' '.join(x))
程序运行截图:
3.字符串与列表推导式的应用
(1) 题目:问题描述: 编写程序,生成含有n个元素的嵌套列表,即列表的每个元素仍是列表,要求列表中
代码:import string
import random
def operation(m,n):
ch = string.digits + string.ascii_letter
res = [[''.join(random.sample(ch, random
print(sorted(res, key=lambda x: len(x[0]
operation(10,10)
程序运行截图:
4.列表与切片的应用
(1) 题目:问题描述:编写程序,生成一个整型列表,输出包含原列表中所有元素的新列表、包含原列表中所
代码:lstA = eval(input("请输入一个列表:"));
lstB=lstA
print('包含原列表中所有元素的新列表为:',lstB)
lstC=sorted(lstA,reverse=True);
print('包含原列表中所有元素的逆序列表为:',lstC);
lstD=[]
for x in lstA[::2]:
lstD.append(x)
print('具有偶数位置的元素列表为:',lstD)
程序运行截图:
5.元组的应用
(1) 题目:问题描述:编写程序,利用生成器推导式生成包含n个整数元素的元组,每个元素值不大于m,并
代码:import random
n,m = map(int,input().split())
a = (random.randrange(1,m,2) for i in range(n))
print(tuple(a))
程序运行截图:
6.字典的应用
(1) 题目:问题描述:编写程序,输入任意长度的字符串,统计每个单词出现的
次数并存储到字典进行输出。
例如:输入:“I love China”,输出:I:1 love: 1 China: 1
代码:str = input("请输入要统计的字符串:")
str=str.split()
res = {}
for i in str:
if i in res:
res[i] = res[i] + 1
else:
res[i] = 1
print(res)
程序运行截图:
四.总结体会
字典、集合等各种结构在Python语法里面是非常重要的,我们要理解和运用,不要被语法的一些特定形式所
实验三:Python基础——面向对象、文件处理
实验详细要求:Python从设计之初就已经是一门面向对象的语言,面向对象程序设计的思想主要针对大型软
一.实验目的
1. 掌握面向对象的编程
2. 掌握python文件读写
二.实验环境
计算机,Python 3
三.实验内容
实验内容包含面向对象和文件处理
1.题目:问题描述:编写关于学生信息的类,实例属性包括:学号、姓名、性别,班级、n门课程成绩,要求:
(1)利用文件读取,创建一个包含n个学生的班级;文件存储格式以空格分隔例如: 202001 李四 1
(2)n门课程成绩利用字典存储,支持成绩录入、修改与删除;
(3)求解每个学生的n门成绩的平均值,及其平均值排名。并按照成绩
平均成绩排名正序输出功能:学号、姓名、性别、年龄,n门课程成绩,
n门课程平均值,排名。
代码:class Student():
def __init__(self, student_num, name, sex, cl
self.student_num=student_num
self.name=name
self.sex=sex
self.cla=cla
self.grade=grade
self.score={}
grade_list=self.grade.split()
for x in grade_list:
a=''
b=''
for y in x:
if y !=':'and y.isdigit()==False:
a+=y
elif y !=':' and y.isdigit()==True:
b+=y
self.score[a]=b
def add_grade(self,subject,grade):
self.score[subject]=grade
def modified_grade(self,subject,grade):
self.score[subject]=grade
def delete_grade(self,subject):
del self.score[subject]
def check_grade(self):
with open('student_data.txt',encoding="utf-8
data_pre=sd.readlines()
data=[]
for x in data_pre:
data.append(x.strip())
student_num=[]
name=[]
sex=[]
cls=[]
grade=[]
for x in data:
y = x.split()
student_num.append(y[0])
name.append(y[1])
sex.append(y[2])
cls.append(y[3])
grade.append(y[4:])
subject_number=len(grade[0])
grade_num =[]
for x in grade:
c=[]
for y in x:
a=''
for z in y:
if z.isdigit()==True:
a+=z
c.append(float(a))
grade_num.append(c)
average_score=[]
for x in grade_num:
a=0
for y in x:
a+=y
average_score.append(a/subject_number)
ranking=[]
copy=average_score[:]
for x in average_score:
a=1
for y in copy:
if x
a+=1
ranking.append(a)
chengji=[]
for x in grade:
a=''
b=0
for y in x:
if b==0:
a+=y
b+=1
else:
a+=' '+ y
chengji.append(a)
final=[]
for x in range(len(data)):
for y, z in zip(ranking, range(len(data))):
if y==x+1:
b=''
b+=str(student_num[z])+' '+ str(name[z])+' '
final.append(b)
print(final)
a=Student(1,2,3,4,'高数:100 英语:100')
a.add_grade('物理', 77)
a.delete_grade('物理')
a.check_grade()
程序运行截图:
2.题目:编程设计一个雇员基类Employee,包括姓名,编号,月薪三个实例属
性,月薪计算pay()和信息显示show()两个函数成员;派生两个子类Manager类和Salesm
要求:根据以上描述设计类,并在主函数创建两个子类的实例化对象,分别调用其成员方法。
代码:
class employee:
def __init__(self, name, id, salary=0):
self.name = name
self.id = id
self.salary = salary
def pay(self):
return
def show(self):
return
class Manager(employee):
def __init__(self, name, id, baseSalary, bonus
super().__init__(name, id)
self.baseSalary = baseSalary
self.bonus = bonus
def pay(self):
self.salary = self.baseSalary + self.bonus
def show(self):
print("manager:")
print("姓名:", self.name)
print("编号:", self.id)
print("月薪:", self.salary)
class Salesman(employee):
def __init__(self, name, id, baseSalary, commi
super().__init__(name, id)
self.baseSalary = baseSalary
self.commission = commission
def pay(self):
self.salary = self.baseSalary * (1 + self.
def show(self):
print("salesman:")
print("姓名:", self.name)
print("编号:", self.id)
print("月薪:", self.salary)
m = Manager("张三", "202012345", 3000, 1500)
s = Salesman("李四", "202054321", 2500, 0.4)
m.pay()
s.pay()
m.show()
s.show()
程序运行截图:
3.题目:编程设计一个基类汽车类Vehicle,包含最大速度MaxSpeed,weight两个实例私
要求:
(1)根据以上描述设计类,并在主函数中创建子类的实例化对象,并设置对象的MaxSpeed值。
(2)利用property将height设定为可读、可修改的属性。
代码:class Vehicle:
def __init__(self, MaxSpeed, weight):
self.__MaxSpeed = MaxSpeed
self.__weight = weight
def showSpeed(self):
print("MaxSpeed = ", self.__MaxSpeed)
def setSpeed(self, speed):
self.__MaxSpeed = speed
class Bicycle(Vehicle):
def __init__(self, MaxSpeed, weight, height):
super().__init__(MaxSpeed, weight)
self.__height = height
def SetMaxSpeed(self, Maxspeed):
self.setSpeed(Maxspeed)
def __get(self):
return self.height
def __set(self, newHeight):
self.height = newHeight
def __del(self):
del self.height
height = property(__get, __set, __del)
B=Bicycle(100,5,10)
B.SetMaxSpeed(500)
B.showSpeed()
程序运行截图:
四.总结体会
父类中可以访问子类的成员变量,但是访问之前,变量一定要出现过定义才行。如果父类初始化了子类的一些属性