day15 python作业

1.有五个学⽣坐在⼀起,问第五个⼈多少岁?答⽐第四个⼤2岁,第四个⼈说它⽐
第三个⼈⼤2岁,,…第⼀个⼈说他10岁。请写⼀个递归函数计算第5个学⽣多少岁
(递归实现)

def calculate_age(n):
    if n == 1:
        return 10
    return calculate_age(n - 1) + 2


if __name__ == '__main__':

    print(calculate_age(5))

2.某班期末考试科⽬为数学和计算机,有最多不超过30⼈参加考试。学⽣的信息包
括学号、姓名。考试后要求: (1)计算每个学⽣的总分和平均分; (2)按总分
成绩由⾼到低排出成绩的名次; (3)打印出名次表,表格内包括学⽣姓名、学
号、各科分数、总分和平均分; (4)任意输⼊⼀个学号,能够查找出该学⽣在班
级中的排名及其考试分数
编写要求: (1) 要对⽤户输⼊进⾏验证,如果输⼊的不是0-4显示错误,然后继续输
⼊ (2) 要能够连续不断的进⾏选择 (3) 每⼀项功能都要封装函数完成,函数单独放
到⼀个模块中
(4) 菜单及其⽤户选择的处理放到主模块中。
(5) 学⽣数据保存到⽂件
欢迎使⽤成绩管理系统**
[1] 学⽣信息输⼊
[2] 学⽣信息输出
[3] 查找学⽣信息
[4] 成绩排序
[0] 退出


请输⼊你的选择:1
请输⼊第1个学⽣的信息(按姓名、学号、数学成绩、计算机成绩输⼊):
张三 2009001 85 89
请输⼊第2个学⽣的信息(按姓名、学号、数学成绩、计算机成绩输⼊):
李四 2009002 86 78

请重新输⼊您的选择(0~4):2
姓名 学号 数学成绩 计算机成绩 总成绩 平均成绩
张三 2009001 85 89 174 87
李四 2009002 86 78 164 82

请重新输⼊您的选择(0~4):3
请输⼊要查找的学⽣学号: 2009001
查找成功!该学⽣信息如下:
1 张三 2009001 85 89 174 87
‘’’

import os

# 菜单及其用户选择
def manu():
    print('''******欢迎使用成绩管理系统********
   [1] 学生信息输入
   [2] 学生信息输出
   [3] 查找学生信息
   [4] 成绩排序
   [0] 退出
**********************************''')
    # 用户选择选项
    while True:
        choice = int(input('请输入你的选择:'))
        if choice not in range(5):
            choice = int(input('请重新输入你的选择(0-4):'))
        if choice == 0:
            break
        elif choice == 1:
            info_input()
        elif choice == 2:
            info_output()
        elif choice == 3:
            info_find()
        else:
            grade_sort()




students_infomation = []  # 保存学生信息



# 学生信息输入
def info_input():
    def student(name=None, number=None, math_grade=None, com_grade=None):
        stu_info = {}
        stu_info['姓名'] = name
        stu_info['学号'] = number
        stu_info['数学成绩'] = math_grade
        stu_info['计算机成绩'] = com_grade
        stu_info['平均成绩'] = com_grade + math_grade
        stu_info['总成绩'] = (com_grade + math_grade)
        students_infomation.append(stu_info)  # 以字典形式保存学生信息并放在列表里

    n = 1
    while n<=2:
        try:
            name, number, math_grade, com_grade = (input(f'请输入第{n}个学生的信息(按姓名、学号、数学成绩、计算机成绩输入(以空格作为间隔):')).split(' ')
            student(name=name, number=number, math_grade=int(math_grade), com_grade=int(com_grade))
            n += 1
        except:
            print('信息输入格式错误')

    print('.' * 20)


# 学生信息输出
def info_output():
    if len(students_infomation) != 0:
        print('{:^4}{:^10}{:^8}{:^8}{:^8}{:^8}'.format('姓名', '学号', '数学成绩', '计算机成绩', '总成绩', '平均成绩'))
        for info in students_infomation:
            print('{:^6}{:^12}{:^10}{:^14}{:^14}{:^8}'.format(info['姓名'], info['学号'], info['数学成绩'], info['计算机成绩'],
                                                              info['总成绩'], info['平均成绩']))

    else:
        print('还未录入信息,请重新选择!')
    print('.' * 20)


# 查找学生信息
def info_find():
    if len(students_infomation)!=0:
        no = input('请输入要查找的学生学号:')
        for info in students_infomation:
            print('{:^4}{:^10}{:^8}{:^8}{:^8}{:^8}'.format('姓名', '学号', '数学成绩', '计算机成绩', '总成绩', '平均成绩'))
            if no == info['学号']:
                print('{:^6}{:^12}{:^10}{:^14}{:^14}{:^8}'.format(info['姓名'], info['学号'], info['数学成绩'], info['计算机成绩'],
                                                                  info['总成绩'], info['平均成绩']))
                break
    else:
        print('还未录入信息,请重新选择!')
    print('.' * 20)



# 成绩排序
def grade_sort():
    if len(students_infomation) != 0:
        students_infomation.sort(key=lambda x: x['总成绩'], reverse=True)
        info_output()
    else:
        print('还未录入信息,请重新选择!')
    print('.' * 20)
    
# 保存文件
def save_file():
    for i in students_infomation:
        with open('学生信息.txt', 'a') as wstream:
            wstream.write(str(i)+'\n')
    # with open('学生信息.txt', 'w') as wstream:
    #     wstream.write(str(students_infomation))
    exit()



if __name__ == '__main__':
    manu()
    save_file()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值