zoukankan      html  css  js  c++  java
  • 9、异常和文件

    1.编写如下程序

    创建一个txt文本文件,来添加数据

    a.第一行添加如下内容:

    name,age,gender,hobby,motto

    b.从第二行开始,每行添加具体用户信息,例如:

    yuze,17,男,假正经, I am yours

    cainiao,18,女,看书,Lemon is best!

    c.具体用户信息要求来自于一个嵌套字典的列表(可自定义这个列表),例如:

    person_info = [{"name":"yuze", "age": 18, "gender": "男", "hobby": "", "motto": "hehe"}

     

    d.将所有用户信息写入到txt文件中之后,然后再读出

     

    2.编写如下程序

    有两行数据,存放在txt文件里面:

    url:/futureloan/mvc/api/member/register@mobile:18866668888@pwd:123456

    url:/futureloan/mvc/api/member/recharge@mobile:18866668888@amount:1000

    请利用上课所学知识,把txt里面的两行内容,取出然后返回如下格式的数据:(可定义函数)

    [{'url':'/futureloan/mvc/api/member/register','mobile':'18866668888','pwd':'123456'},{'url':'/futureloan/mvc/api/member/recharge','mobile':'18866668888','amount':'1000'}]

     

     

     

     

    3.编写如下程序

    优化去生鲜超市买橘子程序

    a.收银员输入橘子的价格,单位:元/斤

    b.收银员输入用户购买橘子的重量,单位:

    c.计算并且 输出 付款金额

    新需求:

    d.使用捕获异常的方式,来处理用户输入无效数据的情况

     

     

     

     

    """
    1212-异常和文件
    截至:12月17日 18:00 下载讨论内容展示词云
    1.编写如下程序
    创建一个txt文本文件,来添加数据
    a.第一行添加如下内容:
    name,age,gender,hobby,motto
    b.从第二行开始,每行添加具体用户信息,例如:
    yuze,17,男,假正经, I am yours
    cainiao,18,女,看书,Lemon is best!
    c.具体用户信息要求来自于一个嵌套字典的列表(可自定义这个列表),例如:
    person_info = [{"name":"yuze", "age": 18, "gender": "男", "hobby": "", "motto": "hehe"}
    d.将所有用户信息写入到txt文件中之后,然后再读出
    """
    from review import my_file_path

    info = [{"name": "yuze", "age": 17, "gender": "男", "hobby": "假正经", "motto": "I am yours"},
    {"name": "cainiao", "age": 18, "gender": "女", "hobby": "看书", "motto": "Lemon is best!"}
    ]

    # 精简答案
    def get_value_lines(info):
    """获取每一行的数据"""
    # 列表转化成行的字符串形式
    # [{},{}] == >name,yuz,...
    lines = ""
    for person in info:
    # {"name": "yuze", "age": 18, "gender": "男", "hobby": "", "motto": "hehe"}
    line = []
    for e in person.values():
    line.append(str(e))

    line_str = ",".join(line) + " "
    lines += line_str
    return lines
    # print(get_value_lines(info))
    # info.txt 可以使用os.path 来写入内容。


    def main():
    """主题逻辑"""
    # 可以取出title = info[0].keys() 然后使用",".join(key)

    with open("info.txt", "w+") as f:
    f.write("name,age,gender,hobby,motto ") # 将标题可以直接写死,注意加一个换行

    data = get_value_lines(info) # TODO 调用第一个函数的返回来写入内容
    with open("info.txt", "a", encoding="utf-8") as f:
    f.write(data)
    with open("info.txt", "r", encoding="utf-8") as f:
    print(f.read())


    # 定义一个嵌套字典的列表存储用户信息。
    # 创建一个txt文本文件。使用w模式,文件不存在则创建,然后使用a模式追加文件内容;有中文写入读取使用utf-8编码格式
    # 读取用户信息readline();
    # 第一行内容为字典的keys(),第二行内容为字典的values()
    # 第一行,获取list[0].keys(),提取元素使用join以逗号连接,用write写入文件。

    # 下面是自己写的
    # 定义一个往txt文档添加内容的函数
    def my_append(info):
    # 获取标题内容
    title = info[0]
    # 循环遍历标题内容,使用逗号,join,得到写入的内容
    write_1 = (",".join(item for item in title.keys()))
    # 创建一个person_info.txt文件,使用写模式,往里面写入标题内容
    f = open("person_info.txt", mode="w", encoding="utf-8")
    # 写入第一行内容
    f.write(write_1)
    # 关闭文件
    f.close()

    # 循环遍历列表中的字典元素
    for x in info[:]:
    # 循环遍历字典的值内容,使用逗号,join,得到写入的内容;因为值有int类型,需要将其转化成str
    append_1 = (",".join(str(item) for item in x.values()))
    # 使用追加模式,打开txt文件,追加内容
    f1 = open("person_info.txt", mode="a", encoding="utf-8")
    # 需要加入换行,否则则会在第一行光标处追加
    f1.write(" ")
    # 逐行追加内容。
    f1.write(append_1)
    # 关闭文件
    f1.close()


    # 定义一个读取文件操作的函数。
    def my_read():
    # 使用r模式读取txt文件
    f2 = open("person_info.txt", mode="r", encoding="utf-8")
    # 方式1:读取全部内容,不涉及值使用用read()
    print(f2.read())
    # 方式2:将读取全部内容。读取出来的列表赋值给变量b
    # b = f2.readlines()
    # # 循环遍历列表,逐行打印每行内容
    # for m in b:
    # print(m, end="")
    # 循环读取结束关闭文件
    f2.close()


    """
    2.编写如下程序
    有两行数据,存放在txt文件里面:
    url:/futureloan/mvc/api/member/register@mobile:18866668888@pwd:123456
    url:/futureloan/mvc/api/member/recharge@mobile:18866668888@amount:1000
    请利用上课所学知识,把txt里面的两行内容,取出然后返回如下格式的数据:(可定义函数)
    [{'url':'/futureloan/mvc/api/member/register','mobile':'18866668888','pwd':'123456'},{'url':'/futureloan/mvc/api/member/recharge','mobile':'18866668888','amount':'1000'}]
    """


    # 分析:读取txt文件内容,将读取的内容转换成列表嵌套字典的数据格式。
    # 创建一个函数,用来写入用户数据。并读取txt中用户数据内容返回目标格式。
    def my_info(info1):
    # 先使用w模式创建一个空文件。
    f3 = open("info.txt", mode="w", encoding="utf-8")
    # 写入空
    f3.write("")
    # 关闭文件
    f3.close()
    # 遍历用户的数据,将其写入到空文件中
    for i in info1[:]:
    # 使用追加模式写入数据
    f4 = open("info.txt", mode="a", encoding="utf-8")
    f4.write(i)
    # 输入换行符
    f4.write(" ")
    # 关闭文件
    f4.close()


    # info_1 = ["url:/futureloan/mvc/api/member/register@mobile:18866668888@pwd:123456",
    # "url:/futureloan/mvc/api/member/recharge@mobile:18866668888@amount:1000"]
    # my_info(info_1)


    # 定义数据转换转换函数。
    def swap_data():
    # 读取已经新建并写入内容的info.txt文件。
    f5 = open("info.txt", encoding="utf-8")
    a = f5.readlines()
    # print(a) # a列表里的元素带有 、@符号、冒号等,需要进行2次分割

    # 定义一个空列表。来接收最终的目标数据。需放在循环外面,放在里面只能接收到最后一个字典元素。
    my_list = []
    #
    for m in range(len(a)):
    # 用变量b来接收每次循环分割得到的列表。TODO 先去除换行符,再将@符合替换为空格,根据空格分割处理好的字符串
    b = a[m].strip(" ").replace("@", " ").split(" ")
    # print(b)
    # 定义一个空列表来接收最终处理好的列表b
    c = []
    # 定义一个空字典来接收组成的新列表元素
    d = {}
    # 循环遍历b列表来进行进行字符串分割,然后将分割后的列表添加到空列表c
    for i in b:
    # 对冒号的字符串进行分割
    c.append(i.split(":"))
    # print(c)
    # 此处的c为列表嵌套列表 [['url', '/futureloan/mvc/api/member/register'], ['mobile', '18866668888'], ['pwd', '123456']]
    # 循环遍历分割好的列表c,使用键值对添加元素到空字典d
    for item in c:
    # 观察发现key为列表的第一个索引值。值为列表的第二个索引值。
    d[item[0]] = item[1]
    # 将添加完成的字典作为一个整体添加到列表中作为元素。
    my_list.append(d)
    return my_list

    # 精简的答案:
    def convert_to_dict(line):
    infos = line.split("@")
    info_dict = {}
    for info in infos:
    info_list = info.split(":")

    info_dict[info_list[0]] = info_list[1]
    return info_dict

    with open(my_file_path, "r", encoding="utf-8") as f:
    # print(f.readlines())
    lines = f.readlines()
    new_lines = []
    for line in lines:
    new = convert_to_dict(line)
    new_lines.append(new)
    print(new_lines)

    """
    3.编写如下程序
    优化去生鲜超市买橘子程序
    a.收银员输入橘子的价格,单位:元/斤
    b.收银员输入用户购买橘子的重量,单位:斤
    c.计算并且 输出 付款金额
    新需求:
    d.使用捕获异常的方式,来处理用户输入无效数据的情况
    """


    def catch_exception():
    while True:
    price = input("收银员输入橘子的价格,单位:元/斤:")
    weight = input("收银员输入用户购买橘子的重量,单位:斤:")
    # pay = float(price) * float(weight)
    try:
    pay_money = float(price) * float(weight)
    return pay_money
    except ValueError as e:
    print("你输入的价格是{},重量为{},其中有类型不正确,给你返回一个异常:{}".format(price, weight, e))


    if __name__ == '__main__':
    # 第一题给函数传入用户信息
    person_info = [{"name": "yuze", "age": 17, "gender": "男", "hobby": "假正经", "motto": "I am yours"},
    {"name": "cainiao", "age": 18, "gender": "女", "hobby": "看书", "motto": "Lemon is best!"}
    ]
    # 调用添加内容函数,不使用print,因为没有返回值。
    my_append(person_info)
    # 调用读取数据操作
    my_read()
    print()
    print("~" * 50, "上面是第一题的答案", "~" * 50)

    info_1 = ["url:/futureloan/mvc/api/member/register@mobile:18866668888@pwd:123456",
    "url:/futureloan/mvc/api/member/recharge@mobile:18866668888@amount:1000"]
    my_info(info_1)

    e = swap_data()
    print("第二题读取并转换得到的最终数据为: {}".format(e))
    print()
    print("~" * 50, "下面是第三题的答案", "~" * 50)

    b = catch_exception()
    print("根据收银员输入的价格和重量得到的付款金额为:{}元".format(b))

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    flex学习网站地址
    ASP.NET 开发人员应该知道的8个网站
    登入页面添加图片有重复页面出现怎么办
    一行代码是有两个??
    c# 枚举基础有[flags]和没有的的区别
    c#中[Flags] 枚举类型定义问题_百度知道
    写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:ID可能不是连续的。
    Margin和Padding之间的区别
    对于top.ascx里面可以不可以放置css的文件进行一个讲解
    设计模式之--适配器模式(Adapter)
  • 原文地址:https://www.cnblogs.com/little-lucky/p/12995667.html
Copyright © 2011-2022 走看看