1
1.编写程序,创建文件data.txt,共100行,第n行存放[100*(n-1), 100*n)之间的素数。
# 1.编写程序,创建文件data.txt,共100行,第n行存放[100*(n-1), 100*n)之间的素数。
def is_prime(x):
# 传入的x小于等于一,不是素数
if x <= 1:
return False
# x**5是为了减少循环次数
for i in range(2, int(x**0.5) + 1):
# 如果能被除尽则不是素数,返回False
if x % i == 0:
return False
return True
def get_primes(n):
ans = []
for i in range(100*(n-1), 100*n):
if is_prime(i):
ans.append(str(i))
return ans
with open("data.txt", "w", encoding="utf-8") as f:
for i in range(1, 101):
f.write(" ".join(get_primes(i)) + "\n")
2
2.批量生成50个人的随机信息,包括姓名,性别、年龄和成绩等。
( 提示:c=chr(random.randint(65, 90))可以生成随机大写英文)
1)把生成的信息写入csv文件info.csv。
2)读取info.csv文件,将每一个不及格(成绩小于60)的同学信息存放在以该同学姓名命名的文件中, 这些文件使用dat作为扩展名。
# 2.批量生成50个人的随机信息,包括姓名,性别、年龄和成绩等。
# ( 提示:c=chr(random.randint(65, 90))可以生成随机大写英文)
# 1)把生成的信息写入csv文件info.csv。
# 2)读取info.csv文件,将每一个不及格(成绩小于60)的同学信息存放在以该同学姓名命名的文件中, 这些文件使用dat作为扩展名。
import csv
import random
def generate_info():
data = []
for _ in range(50):
name = "".join([chr(random.randint(65, 90)) for _ in range(5)])
gender = random.choice(["Male", "Female"])
age = random.randint(10, 30)
score = random.randint(0, 100)
data.append([name, gender, age, score])
return data
# 将信息写入CSV文件
def write_to_csv(filename, data):
with open(filename, "w", newline="") as file:
writer = csv.writer(file)
writer.writerow(["Name", "Gender", "Age", "Score"])
writer.writerows(data)
# 生成信息并写入CSV文件
info_data = generate_info()
write_to_csv("./info.csv", info_data)
# 读取CSV文件并处理不及格同学信息
with open("./info.csv", "r") as file:
reader = csv.DictReader(file)
for row in reader:
if int(row["Score"]) < 60:
filename = f'{row["Name"]}.dat'
with open(filename, "w") as f:
f.write(f'Name: {row["Name"]}\nGender: {row["Gender"]}\nAge: {row["Age"]}\nScore: {row["Score"]}')
3
3.编写程序,显示当前程序的工作路径,并展示"C:\Windows\System32"下所有的空文件夹。
# 3.编写程序,显示当前程序的工作路径,并展示"C:\Windows\System32"下所有的空文件夹。
import os
# 指定要遍历的目录路径
folder_path = r"C:\Windows\System32"
# 遍历目录下所有空文件夹
empty_folders = []
for root, dirs, files in os.walk(folder_path):
if not dirs and not files: # 既没有子文件也没有子文件夹,那么就是空文件夹
empty_folders.append(root)
# 显示当前程序工作路径
print("当前程序的工作路径:", os.getcwd())
# 显示所有空文件夹
print(f"{folder_path}下的所有空文件夹:")
for folder in empty_folders:
print(folder)
4
4.定义一个异常类,继承Exception类, 捕获下面的过程:
输入姓名、python实验成绩,判断input()输入的python实验成绩是否在0-100之间,如果输入超出范围,提示输入异常信息。
比如输入长度为123,则输出: #"123.0: 当前成绩无效”。
# 4.定义一个异常类,继承Exception类, 捕获下面的过程:
# 输入姓名、python实验成绩,判断input()输入的python实验成绩是否在0-100之间,如果输入超出范围,提示输入异常信息。
# 比如输入长度为123,则输出: #"123.0: 当前成绩无效”。
class ScoreOutOfRangeError(Exception):
def __init__(self, score):
self.score = score
def __str__(self):
return f"{self.score}:当前成绩无效"
try:
name = input("请输入姓名:")
score = float(input("请输入Python实验成绩:"))
if score < 0 or score > 100:
raise ScoreOutOfRangeError(score)
except ScoreOutOfRangeError as e:
print(e)
except ValueError:
print("输入格式错误,请输入有效的数字作为成绩")
5
5.编写程序,要求从键盘输入三个数字(整形或者浮点型),判断这三个数字是否能构成一个三角形。如果可以构成一个三角形,则计算三角形的周长。
1)自定义异常类IllegalArgumentException,对应异常信息为:“a,b,c不能构成三角形”
2)自定义异常类IllegalArgLenException,对应异常信息为:“参数个数不正确”
3)确保键盘输入的是三个值,如果输入值不为3,则抛出IllegalArgLenException异常。
4)确保输入是数字类型,否则抛出类型错误异常。
5)如果输入的三个数不能构成三角形则抛出IllegalArgumentException异常.如果可以构成则显示三角形三个边长,并计算并打印它的周长。
6)不管是否发生异常,程序都会在处理完毕后显示"程序运行结束"。
# 5.编写程序,要求从键盘输入三个数字(整形或者浮点型),判断这三个数字是否能构成一个三角形。如果可以构成一个三角形,则计算三角形的周长。
# 1)自定义异常类IllegalArgumentException,对应异常信息为:“a,b,c不能构成三角形”
# 2)自定义异常类IllegalArgLenException,对应异常信息为:“参数个数不正确”
# 3)确保键盘输入的是三个值,如果输入值不为3,则抛出IllegalArgLenException异常。
# 4)确保输入是数字类型,否则抛出类型错误异常。
# 5)如果输入的三个数不能构成三角形则抛出IllegalArgumentException异常.如果可以构成则显示三角形三个边长,并计算并打印它的周长。
# 6)不管是否发生异常,程序都会在处理完毕后显示"程序运行结束"。
class IllegalArgumentException(Exception):
def __init__(self, message):
self.message = message
def __str__(self):
return self.message
class IllegalArgLenException(Exception):
def __init__(self, message):
self.message = message
def __str__(self):
return self.message
try:
# 输入三个数字
numbers = input("请输入三个数字,以逗号分隔:").split(',')
# 检查输入的参数个数
if len(numbers) != 3:
raise IllegalArgLenException("参数个数不正确")
# 转换输入的数字为浮点型
a, b, c = map(float, numbers)
# 检查输入的三个数是否为数字类型
if not (isinstance(a, (int, float)) and isinstance(b, (int, float)) and isinstance(c, (int, float))):
raise TypeError("输入的参数不是数字类型")
# 判断能否构成三角形
if a + b > c and a + c > b and b + c > a:
perimeter = a + b + c
print(f"三角形的三边长分别为:{a}, {b}, {c}")
print(f"三角形的周长为:{perimeter}")
else:
raise IllegalArgumentException(f"{a}, {b}, {c} 不能构成三角形")
except IllegalArgLenException as e:
print(e)
except TypeError as e:
print(e)
except ValueError:
print("输入错误,请确保输入的是数字")
except IllegalArgumentException as e:
print(e)
finally:
print("程序运行结束")
6
6. 假设成年人的体重和身高存在此种关系:
身高(厘米)-100=标准体重(千克)。如果一个人的体重与其标准体重的差值在正负5之间,显示“体重在正常范围”,其他则显示“体重超标或体重不达标”。录入你的身高体重,判断是否在合理范围内。要求使用assert断言处理体重不合理(小于-5或者大于5)的情况,请编写程序。
# 6. 假设成年人的体重和身高存在此种关系:
# 身高(厘米)-100=标准体重(千克)。如果一个人的体重与其标准体重的差值在正负5之间,显示“体重在正常范围”,其他则显示“体重超标或体重不达标”。
# 录入你的身高体重,判断是否在合理范围内。要求使用assert断言处理体重不合理(小于-5或者大于5)的情况,请编写程序。
def check_weight(height_cm, weight_kg):
standard_weight = height_cm - 100
difference = weight_kg - standard_weight
assert -5 <= difference <= 5, "体重超标或体重不达标"
if difference >= -5 and difference <= 5:
print("体重在正常范围")
else:
print("体重超标或体重不达标")
try:
height = float(input("请输入您的身高(厘米):"))
weight = float(input("请输入您的体重(千克):"))
check_weight(height, weight)
except ValueError:
print("输入错误,请确保输入的是数字")
except AssertionError as e:
print(e)
finally:
print("程序运行结束")
实验总结
本次实验的内容是文件读写和异常处理。在实验中遇到了一个小问题:文件保存时的编码,如果只使用open("data.txt", "w")打开文件,则文件写的时候会以系统默认的编码方式保存,Windows默认是GBK编码格式来保存的,所以在PyCharm中打开保存的文件时会出现乱码,提示使用GBK编码打开。解决方法就是在open()函数中传入encoding参数,例如:open("data.txt", "w", encoding="utf-8"),这样就可以使用UTF-8编码保存文件了。
在第二个实验中我学到了csv模块,之前都是用pandas中的DataFrame建立数据框和保存csv文件的。这次我学到了使用csv模块保存和读取csv文件,感觉这种新的方式还是挺方便的。
在第三个实验中我学到了使用os.getcwd()获取当前程序运行路径和使用os.walk()获取root, dirs, files。
异常处理的实验中规中矩,按照书上的示例做就可以了。
暂无评论内容