1)编写函数,传入一个由实数元素构成的列表,返回一个字典,字典内容为{‘max’:最大值,‘min’:最小值,‘ave’:平均值,‘std’:样本标准方差}。其中样本标准方差的计算公式为:
2)输入一串字符作为密码,密码只能由数字与字母组成。编写一个函数judge(password),用来求出密码的强度level,根据输入,输出对应密码强度。密码强度判断准则如下(满足其中一条,密码强度增加一级):①有数字;②有大写字母;③有小写字母;④位数不少于8位。
3)新建一个文本文件zen.txt,文件内容为“Python之禅”的部分内容,具体如下:
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
编写程序统计该文件内容的行数及单词的个数。
4)新建一个文本文件score.csv,用来保存3名考生3门课程的成绩,内容如下:
考号,程序设计,高数,马哲
10153450101,72,96,88
10153450101,68,88,73
10153450101,95,64,65
以上各数据均使用英文逗号分隔。请编写程序读取该文件内容,并统计每门课程的平均分、最高分和最低分。
实验一:
程序代码:
"""
编写函数,传入一个由实数元素构成的列表,返回一个字典,
字典内容为{‘max’:最大值,‘min’:最小值,‘ave’:平均值,‘std’:样本标准方差}。
其中样本标准方差的计算公式为:s=sqrt(((x1-x)**2 +(x2-x)**2 +......(xn-x)**2)/(n-1))。
"""
import math
#定义函数calculate_stats
def calculate_stats(numbers):
#初始化包含统计量的字典
stats_dict={
'max':None, #最大值
'min':None, #最小值
'ave': None, #平均值
'std': None #样本标准方差
}
#确保列表不为空
if len(numbers) == 0:
return stats_dict
#计算最大值、最小值、平均值
stats_dict['max'] = max(numbers)
stats_dict['min'] = min(numbers)
stats_dict['ave'] = sum(numbers)/len(numbers)
#计算标准方法方差
variance = sum([((x - stats_dict['ave'])**2)for x in numbers])/len(numbers)
stats_dict['std']=math.sqrt(variance) #根号
return stats_dict
#调用函数,并传入一个实数列表来测试
number_list = [1,2,3,4,5]
stats_dict = calculate_stats(number_list)
print(stats_dict)
实验二:
程序代码:
"""
输入一串字符作为密码,密码只能由数字与字母组成。
编写一个函数judge(password),用来求出密码的强度level,根据输入,输出对应密码强度。
密码强度判断准则如下(满足其中一条,密码强度增加一级):①有数字;②有大写字母;③有小写字母;④位数不少于8位。
"""
#定义函数judge
def judge(password):
# 密码强度初始化
level = 0
#①有数字
if any(char.isdigit() for char in password):
level += 1
#②有大写字母
if any(char.isupper() for char in password):
level += 1
#③有小写字母
if any(char.islower() for char in password):
level += 1
#④位数不少于8位
if len(password) >= 8:
level += 1
return level
#测试
while True:
password = input("请输入密码:")
password_strength = judge(password)
if password_strength == 1:
print("密码强度为1")
elif password_strength == 2:
print("密码强度为2")
elif password_strength == 3:
print("密码强度为3")
else :
print("密码强度为4")
exit=input("请输入'exit'退出测试")
if exit == "exit":
print("退出")
break
运行结果:
实验三:
程序代码:
"""
3)新建一个文本文件zen.txt,文件内容为“Python之禅”的部分内容,具体如下:
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
编写程序统计该文件内容的行数及单词的个数。
"""
#新建文本文件
file=open("zen.txt","w+",encoding='utf-8')
file.write("Beautiful is better than ugly.\nExplicit is better than implicit.\nSimple is better than complex.\nComplex is better than complicated.")
file.close()
#打开新建的文本文件
file=open("zen.txt","r+",encoding='utf-8')
#统计行数
lines = file.readlines()
line_count = len(lines)
#统计单词个数
word_count = 0
for line in lines:
words = line.split()
word_count += len(words)
#输出结果
print("文件的行数为:",line_count)
print("文件的单词个数为:",word_count)
#关闭文件
file.close()
运行结果:
实验四:
程序代码:
"""
4)新建一个文本文件score.csv,用来保存3名考生3门课程的成绩,内容如下:
考号,程序设计,高数,马哲
10153450101,72,96,88
10153450101,68,88,73
10153450101,95,64,65
以上各数据均使用英文逗号分隔。请编写程序读取该文件内容,并统计每门课程的平均分、最高分和最低分。
"""
import csv
#使用csv.writer()写入csv文件
with open('score.csv','w+',newline='')as csvfile:
spamwriter=csv.writer(csvfile) #生成csv.writer文件对象
spamwriter.writerows([('10153450101','72','96','88'),('10153450101','68','88','73'),('10153450101','95','64','65')])
#读取文件内容
with open('score.csv','r',newline='')as csvfile:
spamreader = csv.reader(csvfile) #返回的是迭代类型
#读取csv文件中的数据,并将其储存在rows的列表变量内
rows = [row for row in spamreader]
# 取出各门课程的成绩,保存成list
prog_scores = []
math_scores = []
phil_scores = []
#枚举enumerate(),同时获取数据序号i和数据row
for i, row in enumerate(rows):
#从列表的第二行数据开始遍历
if i == 0:
continue
prog_scores.append(int(row[1]))
math_scores.append(int(row[2]))
phil_scores.append(int(row[3]))
# 计算各门课程的平均分、最高分和最低分
avg_prog = sum(prog_scores) / len(prog_scores)
max_prog = max(prog_scores)
min_prog = min(prog_scores)
avg_math = sum(math_scores) / len(math_scores)
max_math = max(math_scores)
min_math = min(math_scores)
avg_phil = sum(phil_scores) / len(phil_scores)
max_phil = max(phil_scores)
min_phil = min(phil_scores)
# 输出计算结果
print(f'{"科目":^10}{"平均分":^10}{"最高分":^10}{"最低分":^10}')
print(f'{"程序设计":^10}{avg_prog:^10.2f}{max_prog:^10}{ min_prog:^10}')
print(f'{"高数":^10}{avg_math:^10.2f}{max_math:^10}{min_math:^10}')
print(f'{"马哲":^10}{avg_phil:^10.2f}{max_phil:^10}{min_phil:^10}')
四、思考总结(本次实验的经验、教训,遇到的问题及解决方法,待解决的问题等)
实验一:
(1)初始化一个字典,并赋值为空值dict={‘key’:’None’}
(2)使用math.sqrt()表示根号
实验二:
(1)使用if-elif-else语句来判断密码强度的四种情况
实验三:
(1)file.write()写文件内容
(2)for循环统计每一行的单词个数并叠加
(3)split()按照默认分隔符进行分割
实验四:
(1)spamwriter.writerows([])写入文件的内容
(2)读取csv文件中的数据,并将其储存在rows的列表变量内
rows = [row for row in spamreader]
(3) 枚举enumerate(),同时获取数据序号i和数据row