zoukankan      html  css  js  c++  java
  • 大爽Python入门教程 57 思路与答案

    大爽Python入门公开课教案 点击查看教程总目录

    改动

    开头的字符串常量

    修改MAIN_MENU如下

    MAIN_MENU = """---------------
    Welcome!
    You can enter `c`, `f`, `u`, `l` or `e`.
    The meaning is as follows
    - c: create student score
    - f: filter student by a score
    - u: update score
    - l: show all student with scores
    - e: exit
    Enter your command: """
    

    新增字符串如下

    CREATE_MENU1 = "Enter new student's name: "
    CREATE_MENU2 = "Enter new student's score: "
    CREATE_MENU_R1 = "The name already exists and cannot be created."
    CREATE_MENU_R2 = "Successfully added student scores."
    

    主函数

    ifelif之间,新增一个elif如下

    elif cmd == "c":
        create_score(scores)
    

    功能函数create_score

    新增函数如下

    def create_score(scores):
        while True:
            name = input(CREATE_MENU1)
            if name in scores:
                print(CREATE_MENU_R1)
            else:
                break
    
        while True:
            score = input(CREATE_MENU2)
            if score.isdigit():
                score = int(score)
                if 0 <= score <= 100:
                    scores[name] = score
                    print(CREATE_MENU_R2)
                    return
    
            print(INVALID)
    

    总代码

    英文版

    SCORE_FILE = "scores.txt"
    
    MAIN_MENU = """---------------
    Welcome!
    You can enter `c`, `f`, `u`, `l` or `e`.
    The meaning is as follows
    - c: create student score
    - f: filter student by a score
    - u: update score
    - l: show all student with scores
    - e: exit
    Enter your command: """
    INVALID = "Invalid Input."
    
    FILTER_MENU1 = "Enter filter score: "
    UPDATE_MENU1 = "Enter student name: "
    UPDATE_MENU2 = "Enter student score: "
    UPDATE_MENU3 = "Updated successfully."
    
    CREATE_MENU1 = "Enter new student's name: "
    CREATE_MENU2 = "Enter new student's score: "
    CREATE_MENU_R1 = "The name already exists and cannot be created."
    CREATE_MENU_R2 = "Successfully added student scores."
    
    SHOW_MENU1 = "Students Scores: "
    EXIT_MENU = "Bye"
    
    
    def read_scores(score_file):
        scores = {}
    
        with open(score_file, 'r') as f:
            fr = f.read()
    
        lines = fr.split("\n")
        for line in lines:
            line = line.strip()
            if line:
                name, score = line.split(",")
                score = int(score)
                scores[name] = score
    
        return scores
    
    
    def show_all(scores, filter_value=0):
        print(SHOW_MENU1)
        for name in scores:
            score = scores[name]
            if score >= filter_value:
                print("{:<15s}: {}".format(name, score))
    
    
    def filter_score(scores):
        while True:
            score = input(FILTER_MENU1)
            if score.isdigit():
                score = int(score)
                show_all(scores, filter_value=score)
                return
            else:
                print(INVALID)
    
    
    def update_score(scores):
        while True:
            name = input(UPDATE_MENU1)
            if name not in scores:
                print(INVALID)
            else:
                break
    
        while True:
            score = input(UPDATE_MENU2)
            if score.isdigit():
                score = int(score)
                scores[name] = score
                print(UPDATE_MENU3)
                return
            else:
                print(INVALID)
    
    
    def save(score_file, scores):
        with open(score_file, 'w') as f:
            for name in scores:
                score = scores[name]
                f.write("{},{}\n".format(name, score))
    
    
    def create_score(scores):
        while True:
            name = input(CREATE_MENU1)
            if name in scores:
                print(CREATE_MENU_R1)
            else:
                break
    
        while True:
            score = input(CREATE_MENU2)
            if score.isdigit():
                score = int(score)
                if 0 <= score <= 100:
                    scores[name] = score
                    print(CREATE_MENU_R2)
                    return
    
            print(INVALID)
    
    
    def main(score_file):
        scores = read_scores(score_file)
        while True:
            cmd = input(MAIN_MENU)
            if cmd == "f":
                filter_score(scores)
            elif cmd == "c":
                create_score(scores)
            elif cmd == "u":
                update_score(scores)
            elif cmd == "l":
                show_all(scores)
            elif cmd == "e":
                save(score_file, scores)
                print(EXIT_MENU)
                break
            else:
                print(INVALID)
    
    
    main(SCORE_FILE)
    

    中文版

    将前面的文本常量改掉就行,如下

    SCORE_FILE = "scores.txt"
    
    MAIN_MENU = """---------------
    欢迎!你可以输入`c`、`f`、`u`、`l`、`e`命令, 意义如下:
    - c: 新建学生
    - f: 查询大于等于某成绩的所有学生
    - u: 修改学生分数
    - l: 展示所有学生分数
    - e: 退出
    请输入命令: """
    INVALID = "输入无效"
    
    FILTER_MENU1 = "请输入查询分: "
    UPDATE_MENU1 = "请输入学生名字: "
    UPDATE_MENU2 = "请输入学生分数: "
    UPDATE_MENU3 = "修改成功。"
    
    CREATE_MENU1 = "请输入新增学生姓名: "
    CREATE_MENU2 = "请输入新增学生分数: "
    CREATE_MENU_R1 = "名字已存在,无法创建。"
    CREATE_MENU_R2 = "成功新增学生分数。"
    
    
    SHOW_MENU1 = "学生成绩: "
    EXIT_MENU = "再见"
    

    后面的逻辑代码是一样的,不用改。

  • 相关阅读:
    [设计模式]<<设计模式之禅>>关于迪米特法则
    [设计模式]<<设计模式之禅>>关于接口隔离原则
    [设计模式]<<设计模式之禅>>关于依赖倒置原则
    /proc/meminfo分析(一)
    Dynamic DMA mapping Guide
    Linux时钟
    Linux系统休眠和设备中断处理
    Linux调度器
    Linux调度器
    Linux标识进程
  • 原文地址:https://www.cnblogs.com/BigShuang/p/15609928.html
Copyright © 2011-2022 走看看