首页 > 其他分享 >软件构造,生成算式采用CSV、XML、JSON三种形式进行存储并读取。

软件构造,生成算式采用CSV、XML、JSON三种形式进行存储并读取。

时间:2024-10-12 15:48:30浏览次数:12  
标签:XML xml 算式 json choice JSON filename exercises csv

编写代码完成将生成的算式及习题长期保存下来,采用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()

 

 

标签:XML,xml,算式,json,choice,JSON,filename,exercises,csv
From: https://www.cnblogs.com/youxiandechilun/p/18460700

相关文章

  • C# 后端回传的Json数据转换为实体对象转换器JsonConverter的使用
    publicclassJsonDateTimeConverter:JsonConverter<DateTime?>{privatereadonlystring_dateTimeFormat;publicJsonDateTimeConverter(stringdateTimeFormat){_dateTimeFormat=dateTimeFormat;}publicoverridevoidWri......
  • vscode调试launch.json
    {//使用IntelliSense了解相关属性。//悬停以查看现有属性的描述。//欲了解更多信息,请访问:https://go.microsoft.com/fwlink/?linkid=830387"version":"0.2.0","configurations":[{"name":"Python:......
  • JWT(JSON Web Token)、Token、Session和Cookie
    JWT(JSONWebToken)、Token、Session和Cookie都是Web开发中常用的概念,它们各自在不同的场景下发挥着重要的作用。以下是对这四个概念的详细解释和比较:一、JWT(JSONWebToken)定义:JWT是一个紧凑的、自包含的用于双方之间安全传输信息的JSON对象。它通过将Token划分为头部(Header......
  • 函数、匿名,箭头函数、对象、内置方法(日期和时间)、JSON对象,正则对象、Math对象
    【一】函数【1】函数的语法格式function函数名(参数){代码体}function函数名(形参,形参,形参...){函数体代码}【2】函数的调用函数名+()函数调用时,会立即执行,代码体里面的代码可以多次调用,每次调用是独立不相关的函数的执行跟定义位置无关,只与调用的位置有关。......
  • 多层嵌套json字符串(jsonStr)写入redis
    1、连接redisJedisjedis=newJedis("localhost",6379);2、将字符串转为json格式JSONObjectjs=JSONObject.fromObject(jsonStr);3、对json格式进行解析4、将json写入redispublicstaticvoidRedisSet(JSONObjectjs,Jedisjs01){//获取json中的所有key......
  • 【C#】复杂数据结构和Json的相互转换
    数据结构定义//数据结构定义publicclassPeople{publicstringname;publicBaseInfobaseInfo;publicList<School>education;}publicclassBaseInfo{publicintage;publicboolgender;publicList<Connection>connection;}注意一......
  • json-server的使用
    1.简介json-server可以帮助前端快速的mock数据,快捷方便2.安装可以通过npm或者yarn安装npmijson-server-g3.数据在项目的根目录下创建一个文件夹,名字随意,可以叫做db然后再db目录下新建一个index.json,在里面定义要模拟的数据例{"list":[{......
  • 【Flink 系列二十三】hudi 消失的 HIVE_CONF_DIR,HIVE 读不到 hive-site.xml 读不到
    问题现象Unabletofindconfigfilehive-site.xmlUnabletofindconfigfilehivemetastore-site.xmlUnabletofindconfigfilemetastore-site.xml本文记录这个问题是如何导致的,并记录如何向Hive、Hudi提供hive-site.xml以便正确加载。问题分析:HiveMetaStore是......
  • Python 处理 JSON 格式数据
    Author:ACatSmilingSince:2024-10-09需求:将文件中的JSON格式数据,指定Key的值替换。对于文件的整个文本为JSON格式的数据。示例:{'A':{'a':23.45,'b':56.78,'c':89.01}}Python代码:importjson#读取原始JSON数......
  • 读取xml文件写到csv文件中
    #xml数据提取,拼合为csv文件importosimportcsvimportxml.dom.minidomimportglobdefto_int(str_value):try:returnint(str_value)exceptValueError:try:float_value=float(str_value)returnint(floa......