python实验3:函数和文件操作

一、实验任务

1)编写函数,传入一个由实数元素构成的列表,返回一个字典,字典内容为{‘max’:最大值,‘min’:最小值,‘ave’:平均值,‘std’:样本标准方差}。其中样本标准方差的计算公式为:python实验3:函数和文件操作_第1张图片

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
以上各数据均使用英文逗号分隔。请编写程序读取该文件内容,并统计每门课程的平均分、最高分和最低分。

二、实验要求

  1. 对每个任务求解步骤是:算法思想、程序代码、运行结果的截图。
  2. 提交实验报告。

三、实验设计及结果

实验一:
程序代码:

"""
编写函数,传入一个由实数元素构成的列表,返回一个字典,
字典内容为{‘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

运行结果:

python实验3:函数和文件操作_第2张图片

实验三:
程序代码:

"""
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}')

运行结果:
python实验3:函数和文件操作_第3张图片

四、思考总结(本次实验的经验、教训,遇到的问题及解决方法,待解决的问题等)
实验一:
(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

你可能感兴趣的:(Python小练习,python,开发语言)