编写代码完成将生成的算式及习题长期保存下来,采用CSV、XML、JSON三种形式进行存储并读取。提交相关代码及运行截图。
import random
import csv
import json
import xml.etree.ElementTree as ET
from xml.dom import minidom
# 生成随机算式数据
def generate_exercises(count=10):
exercises = []
operators = ['+', '-', '*', '/']
for _ in range(count):
num1 = random.randint(1, 10)
num2 = random.randint(1, 10)
operator = random.choice(operators)
# 确保不会出现除以零的情况
if operator == '/' and num2 == 0:
num2 = 1
expression = f"{num1} {operator} {num2}"
result = eval(expression) # 使用eval计算表达式的结果
exercises.append({"expression": expression, "result": result})
return exercises
# CSV 存储与读取
def save_to_csv(data, filename):
with open(filename, 'w', newline='') as file:
writer = csv.writer(file)
writer.writerow(['Expression', 'Result'])
for item in data:
writer.writerow([item['expression'], item['result']])
def load_from_csv(filename):
with open(filename, 'r') as file:
reader = csv.DictReader(file)
return [row for row in reader]
# JSON 存储与读取
def save_to_json(data, filename):
with open(filename, 'w') as file:
json.dump(data, file, indent=4)
def load_from_json(filename):
with open(filename, 'r') as file:
return json.load(file)
# XML 存储与读取
def save_to_xml(data, filename):
root = ET.Element("Exercises")
for item in data:
exercise = ET.SubElement(root, "Exercise")
ET.SubElement(exercise, "Expression").text = str(item['expression'])
ET.SubElement(exercise, "Result").text = str(item['result'])
tree = ET.ElementTree(root)
xmlstr = minidom.parseString(ET.tostring(root)).toprettyxml(indent=" ")
with open(filename, 'w') as f:
f.write(xmlstr)
def load_from_xml(filename):
tree = ET.parse(filename)
root = tree.getroot()
exercises = []
for exercise in root.findall('Exercise'):
expression = exercise.find('Expression').text
result = float(exercise.find('Result').text) # 假设结果都是数字
exercises.append({"expression": expression, "result": result})
return exercises
# 主程序
def main():
print("请选择操作:")
print("1. 生成新的算式并保存")
print("2. 从文件加载算式")
choice = input("请输入选项 (1 或 2): ")
if choice == '1':
count = int(input("请输入要生成的算式数量: "))
exercises = generate_exercises(count)
format_choice = input("请选择保存格式 (csv, json, xml): ").strip().lower()
if format_choice == 'csv':
save_to_csv(exercises, 'exercises.csv')
print("算式已保存到 exercises.csv 文件中.")
elif format_choice == 'json':
save_to_json(exercises, 'exercises.json')
print("算式已保存到 exercises.json 文件中.")
elif format_choice == 'xml':
save_to_xml(exercises, 'exercises.xml')
print("算式已保存到 exercises.xml 文件中.")
else:
print("未知的文件格式,请输入 csv, json 或 xml.")
elif choice == '2':
format_choice = input("请选择加载的文件格式 (csv, json, xml): ").strip().lower()
if format_choice == 'csv':
loaded_data = load_from_csv('exercises.csv')
elif format_choice == 'json':
loaded_data = load_from_json('exercises.json')
elif format_choice == 'xml':
loaded_data = load_from_xml('exercises.xml')
else:
print("未知的文件格式,请输入 csv, json 或 xml.")
return
print(f"从 {format_choice} 文件加载的数据:")
print(loaded_data)
else:
print("无效的选择,请输入 1 或 2.")
if __name__ == "__main__":
main()
![]()
![]()