实验详细要求
本课程主要学习 Python 的程序控制结构与函数设计,具体内容为分支结构
–条件表达式、循环结构–For 循环与 While 循环的基本语法、函数设计与使用。
(一) 实验目的
(二)实验环境
Python 3.6 及以上 or PyCharm
(三)实验内容
1、分支结构
编写代码:利用 if 判断来制作一个猜数字的小游戏
问题描述:程序运行时,系统在指定范围内生成一个随机数字,然后用户进行猜测,并根据用户输入进行必要的提示(right, too large, too small),如果猜对则提前结束程序,如果未有猜对,提示游戏结束并给出正确答案。
2、循环结构
编写代码:利用 while 循环判断来制作一个猜数字的小游戏
问题描述:程序运行时,系统在指定范围内生成一个随机数字,然后用户进行猜测,并根据用户输入进行必要的提示(right, too large, too small),如果猜对则提前结束程序,如果次数用完仍没有猜对,提示游戏结束并给出正确答案。
3、函数结构
(1)设计函数用来计算斐波那契数列中小于参数 n 的所有值。
(2)利用列表实现筛选法求素数
问题描述:编写程序,输入一个大于 2 的自然数,然后输出小于该数字的所有素数组成的列表。
(3)编写函数:判断回文,也就是正读反读都一样的字符串
例如:abcba”
(4) 编写函数:随机产生包含 n 个整数的列表,返回一个元组,其中第一个元素为所有参数的平均值,其他元素为所有参数中大于平均值的整数。
例如: 随机产生长度为 3 的列表[2, 1, 3],输出为(2.0, 3)
(5) 编写函数: 一年 365 天, 每周工作 5 天,休息 2 天,休息日水平下降
0.01,工作日要努力到什么程度一年后的水平才与每天努力 1%所取得的效果(即37.78 倍)一样呢?
4、lambda 表达式
(1) 查找两个字符串首尾交叉的最大子串长度,连接两个字符串,首尾交叉部分只保留一份。例如,1234 和 2347 连接为 12347
要求:程序中使用 lambda 表达式以及函数
from random import randint
import random
def first_guessNumber(minValue,maxValue,maxTimes):
value = randint(minValue,maxValue)
prompt = 'Start to guess:'
for i in range(maxTimes):
x = int(input(prompt))
if x == value:
print('Right')
break
elif x > value:
print('Too large')
else:
print('Too small')
else:
print('End,your false')
print('The right:',value)
#first_guessNumber(1,10,3)
def second_guessNumber(minValue,maxValue,maxTimes):
m = 0
value = randint(minValue,maxValue)
prompt = 'Start to guess:'
while(m < maxTimes):
x = int(input(prompt))
if x == value:
print('Right')
break
elif x > value:
print('Too large')
else:
print('Too small')
m = m+1
else:
print('End,your false')
print('The right:',value)
#second_guessNumber(1,10,3)
def third_one_fib(n):
a,b=1,1
if n <= a:
print('false')
else:
while a < n:
print(a,end=',')
a,b=b,a+b
#third_one_fib(150)
def isprime(n):
for i in range(2,n):
if n % i == 0:
return 0
return 1
def third_second_primenumber(n):
value_list = []
for i in range(2,n):
if isprime(i) == 1:
value_list.append(i)
print(value_list)
#third_second_primenumber(150)
def third_third_palindrome(s):
a = reversed(list(s))
print(s)
if list(a) == list(s):
print('True')
else:
print('False')
#third_third_palindrome('adfgfda')
#third_third_palindrome('adegkda')
def third_forth_average(start,end,n):
a_list = random.sample(range(start,end),n)
print(a_list)
avg = sum(a_list)/n
l = [avg]
for i in a_list:
if i > avg:
l.append(i)
print(tuple(l))
#third_forth_average(1,10,5)
def dayup(du):
start = 1
for i in range(365):
if i % 7 in [6,0]:
start = start*(1-0.01)
else:
start = start*(1+du)
return start
def third_fivth_year():
start = 0.001
while dayup(start) < 37.78:
start = start+0.001
print(start)
#third_fivth_year()
def forth_lambda(s1,s2):
l1 = len(s1)
l2 = len(s2)
ls = min(l1,l2)
k = max(range(0,ls+1),key=lambda i : i if s1[l1-i:] == s2[:i] else False)
m = max(range(0,ls+1),key=lambda i : i if s2[l2-i:] == s1[:i] else False)
if k > m:
print('重复数为:',k)
print(s1+s2[k:])
elif k==0 and m==0:
print('重复数为:',k)
print('null')
else:
print('重复数为:',m)
print(s2+s1[m:])
#forth_lambda('34567899','2233456')
Python 序列类似于 C 中的一维、多维数组等,但功能要强大很多,使用也更加灵活、方便。Python 中常用的序列结构有列表、元组、字典、字符串、集合、字典等。
(一)实验目的
1、掌握列表与列表推导式
2、掌握元组与生成器推导式
3、掌握切片的使用
4、掌握字典的用法
5、掌握集合的用法
6、掌握字符串及其应用
(二)实验环境
Python 3.6 及以上 or PyCharm
(三)实验内容
实验内容包含变量、字符串、列表、列表推导式、切片、元组、生成器推导式、字典、集合的应用。
(1) 列表推导式与字典的应用
问题描述:编写程序,先生成包含 1000 个随机字符的字符串,然后统计每
个字符出现的次数。
要求:查找资料编写至少 2 种不同的求解方法。
(2) 集合的应用
问题描述:编写程序,输入两个集合 setA 与 setB,分别输出它们两个交集
的交、差、并。
要求:采用系统类与自定义集合类两种方法进行实现
(3) 字符串与列表推导式的应用
问题描述: 编写程序,生成含有 n 个元素的嵌套列表,即列表的每个
元素仍是列表,要求列表中的元素是长度不超过 m 的数字或字符组成
的字符串,并按照字符串长度降序输出结果。
(4) 列表与切片的应用
问题描述:编写程序,生成一个整型列表,输出包含原列表中所有元素的新
列表、包含原列表中所有元素的逆序列表,以及输出具有偶数位置的元素列
表。
(5) 元组的应用
问题描述:编写程序,利用生成器推导式生成包含 n 个整数元素的元组,每
个元素值不大于 m,并过滤掉偶数整数,并输出。
(6) 字典的应用
问题描述:编写程序,输入任意长度的字符串,统计每个单词出现的次数并
存储到字典进行输出。
例如:输入:“I love China”,
输出:I:1
love: 1
China: 1
(7)正则表达式的应用
问题描述:用户输入一段英文,然后输出这段英文中所有长度为 3 个字母
的单词。
(提示:可以调用 findall 函数,也可以先调用 split 函数将字符串进行分
隔,再搜索长度为 3 的单词。)
import string
import random
import collections
import re
def first_count():
x = string.ascii_letters+string.digits
y="".join([random.choice(x) for i in range(1000)])
print('First:\n')
d = dict()
for ch in y:
d[ch]=d.get(ch,0)+1
for k,v in sorted(d.items()):
print(k,":",v)
print('\nSecond:\n')
count = collections.Counter(y)
for k,v in sorted(count.items()):
print(k,":",v)
#first_count()
def second_set(a,b):
s1 = a|b
print(s1)
s2 = a&b
print(s2)
s3 = a-b
print(s3)
#second_set({1,1,2,4},{3,3,5,1,2})
class MySet:
def second_myset(self,a,b):
s1 = a|b
print(s1)
s2 = a&b
print(s2)
s3 = a-b
print(s3)
#x = MySet()
#x.second_myset({1,1,2,4},{3,3,5,1,2})
def third_ss(n,m):
ch = string.digits + string.ascii_letters
res = [[''.join(random.sample(ch, random.randint(1, m)))] for i in range(n)]
print(sorted(res, key=lambda x: len(x[0]), reverse = True))
#third_ss(10,20)
def forth_ll():
x = []
for i in range(20):
x.append(random.randint(0,100))
x1 = x
print(x1)
x.reverse()
print(x)
x2 = []
for i in range(20):
if (i%2 == 0):
x2.append(x1[i])
print(x2)
#forth_ll()
def fivth_ou():
n,m = map(int,input().split())
a = [random.randint(1,m) for i in range(n)]
#print(a)
b = []
for i in a:
if i%2!=0:
b.append(i)
print(tuple(b))
#fivth_ou()
def sixth_te(str):
words = str.split(' ')
dict={ }
for i in words:
if i not in dict.keys():
dict[i] = 1
else:
dict[i] += 1
print(dict)
#sixth_te('this is a chanllenge')
def seveth_fi(words):
l = re.split('[\.!? ]+',words)
print(l)
i = 0
for i in l:
if len(i) == 3:
print(i)
#seveth_fi('why so serious now?')
Python 从设计之初就已经是一门面向对象的语言,面向对象程序设计的思想主要针对大型软件设计而提出,使得软件设计更加灵活,能够很好地支持代码复用和设计复用,代码具有更好的可读性和可扩展性。
(一) 实验目的
import re
import collections
import string
import pandas as pd
#1
class student:
def __init__(self, ID='', Name='', Gender='',Age = '', Class='', Grades=dict()):
self.ID = ID
self.Name = Name
self.Gender = Gender
self.Age = Age
self.Class = Class
self.Grades = Grades
@classmethod
def create_class_from_file(self, file_name):
reclass = []
infor = pd.read_excel(file_name,encoding = 'utf-8')
nrows = infor.ID
for i in range(len(nrows)):
ID = infor.ID[i]
Name = infor.Name[i]
Gender = infor.Gender[i]
Age = infor.Age[i]
Class = infor.Class[i]
test = infor.Grades[i]
TGrades = {}
grades = re.split(',|:',test)
for j in range(0,len(grades)-1,2):
TGrades[grades[j]]= grades[j+1]
reclass.append(student(ID, Name, Gender, Age, Class, TGrades))
return reclass
def modify_grades(self, key, value):
if key in self.Grades.keys():
self.Grades[key] = value
print('修改', self.Name, '的', key, '为', value)
else:
self.Grades[key] = value
print('未在', self.Name, '中找到科目', key, ',已添加为:', value)
def delete_grades(self, key):
if key in self.Grades.keys():
print('删除:', key)
self.Grades.pop(key)
else:
print('未在', self.Name, '中找到科目', key)
def average_grades(self):
scores = self.Grades.values()
sum = 0
for i in scores:
sum += int(i)
average = sum / len(scores)
return average
@classmethod
def student_sort(self, students):
stus = sorted(students, key=lambda x: x.average_grades(), reverse=True)
n = 1
for i in stus:
print(i.ID, i.Name, i.Gender, i.Age, i.Grades, i.average_grades(), n)
n += 1
def student_print(self):
print(self.ID, self.Name, self.Gender, self.Age, self.Grades)
'''x = student()
oneclass = x.create_class_from_file('test.xlsx')
x.student_sort(oneclass)'''
#2
class Employee:
def __init__(self,name,number,salary):
self.name = name
self.number = number
self.salary = salary
def pay(self):
print('Employee月薪是',self.salary)
def show(self):
print('Employee的名字是',self.name)
print('Employee编号是',self.number)
class Manager(Employee):
def pay(self):
print('Manager月薪是',self.salary)
def show(self):
print('Manager的名字是',self.name)
print('Manager编号是',self.number)
class Salesman(Employee):
def pay(self):
print('Salesman月薪是',self.salary)
def show(self):
print('Salesman的名字是',self.name)
print('Salesman编号是',self.number)
'''first_one = Employee('lilei','1001','5000')
second_one = Manager('hmm','1002','7000')
third_one = Salesman('zl','1003','4500')
first_one.pay()
first_one.show()
second_one.pay()
second_one.show()
third_one.pay()
third_one.show()'''
#3
class Vehicle:
MaxSpeed=200
weight=150
def show(self):
print('汽车的最大速度为',self.MaxSpeed)
print('汽车的重量为',self.weight)
class Bicycle(Vehicle):
def __init__(self,height):
self.__height = height
def set_MaxSpeed(self,Maxspeed):
self.MaxSpeed = Maxspeed
def set_weight(self,weight):
self.weight=weight
def __get(self):
return self.__height
def __set(self,h):
self.__height=h
def show(self):
print('自行车的高度为',self.__height)
print('自行车的最大速度为',self.MaxSpeed)
print('自行车的重量为',self.weight)
height = property(__get,__set)
'''bikeone = Bicycle(10)
bikeone.set_MaxSpeed(30)
bikeone.height = 20
bikeone.show()'''
#4
class Myqueue(object):
def __init__(self,size):
self.size = size
self.data = []
self.current = len(self.data)
def is_empty(self):
if self.current == 0:
print('队列为空!')
return True
else:
print('队列不为空!')
return False
def is_full(self):
if self.current == self.size:
print('队列为满!')
return True
else:
print('队列不为满!')
return False
def head(self):
if not self.data == []:
print('队列首元素为%s'%self.data[0])
else:
print('队列为空,无队列首元素!')
def in_queue(self,element):
if self.current != self.size:
self.data.append(element)
self.current = len(self.data)
print('元素%s入队列成功!'%element)
else:
print('队列为满!')
def out_queue(self):
if not self.data == []:
out_element = self.data.pop(0)
self.current = len(self.data)
print('元素%s出队列成功!'%out_element)
else:
print('队列为空,无法出队列!')
def show(self):
print('队列为:')
for i in self.data:
print(i,',',end='')
print('\n队列最大长度为:\n',self.size)
print('\n现有元素个数:\n',self.current)
'''xx = Myqueue(10)
xx.is_empty()
for i in range(5,13):
xx.in_queue(i)
xx.is_full()
xx.show()
for i in range(5):
xx.out_queue()
xx.show()
for i in range(20):
xx.in_queue(i)
xx.is_full()
xx.show()
xx.head()'''
#5
def write_fivth():
s = 'It is only a test.The result is that:\nNO,it needs test'
file = open(r'fivth.txt','w')
file.write(s)
file.close
def fivth():
file = open(r'fivth.txt')
result = []
for line in file:
result.append(line.strip('\n'))
#print(result)
final = []
content = 0
for string in result:
string = re.sub('[,.:,。:""“”]',' ',string)
one = string.split()
for every in one:
if len(every)>0:
content = content+1
final.append(every)
print(final)
print(content)
#write_fivth()
#fivth()
#6
def Check_Password(pwd):
if len(pwd) < 6 or len(pwd) > 12:
return None
flag = [False] * 4
for ch in pwd:
if ch in string.ascii_lowercase:
flag[0] = True
if ch in string.ascii_uppercase:
flag[1] = True
if ch in string.digits:
flag[2] = True
if ch in '$#@':
flag[3] = True
if flag.count(True) == 4:
return pwd
return None
def sixth(pwd):
print('合适的输出:')
list1 = pwd.split(',')
for i in list1:
final = Check_Password(i)
if final != None:
print(final+'\n')
#sixth('abcdEF12#@,ccword12')
#sixth('ADCapc211#@,dsfhdFKFDSL,QWer12@#!')