Python初学者开发高尔夫成绩展示程序:匹配获奖者姓名与对应成绩
高尔夫比赛统计代码修复方案
现有代码存在的问题
displayReport函数无返回值,导致main函数中拿到的winner变量为None,无法正确输出获奖者姓名- 报表表头打印逻辑放在了遍历球手的循环内,会重复打印多次表头
- 没有统计最低分对应的球手索引,无法关联获胜者姓名和成绩
修复后完整代码
def main(): # 定义主函数 golferNames = [] # 存储球手姓名的空列表 golferScores = [] # 存储球手成绩的空列表 golferCount = inputInfo(golferNames,golferScores) # 调用输入函数,传入两个列表 winner_name, min_score = displayReport(golferNames,golferScores) # 调用报表生成函数,返回获奖者姓名和最低分 # 打印获胜者结果 print(f'获胜者是 {winner_name},夺冠成绩为 {min_score},共有 {golferCount} 位选手参赛。') def inputInfo(golferNames,golferScores): # 定义输入信息函数 golferCount = 0 # 初始化选手计数 another = input('是否需要输入球手信息?(y/n)')# 启动循环的判断条件 while another != 'n': # 循环输入的判断条件 golferName = input('请输入球手姓名:') golferNames.append(golferName) golferScore = int(input('请输入球手成绩:')) golferScores.append(golferScore) golferCount += 1 another = input('是否需要继续输入其他球手信息?(y/n)') return golferCount def displayReport(golferNames,golferScores): # 定义报表生成函数 import datetime # 导入时间模块 curDateTime = datetime.datetime.now() # 获取当前时间 # 打印报表表头,只需打印一次,移出循环 print('SPRINGFORK业余高尔夫俱乐部') print(f'赛事日期:{curDateTime}') print(f'{"球手姓名":<20}{"成绩"}') print('-'*25) # 遍历打印所有选手信息,同时统计最低分对应的索引 min_score = min(golferScores) min_index = golferScores.index(min_score) winner = golferNames[min_index] index = 0 for golfer in golferNames: print(f'{golferNames[index]:<20}{golferScores[index]}') index += 1 # 返回获胜者姓名和最低分 return winner, min_score main() # 调用主函数
核心修改说明
- 把表头打印逻辑移出遍历球手的循环,仅打印一次
- 在
displayReport函数中通过min()获取最低成绩,再通过list.index()方法拿到最低成绩对应的索引,用索引从姓名列表中取出获胜者姓名 - 修改
displayReport函数的返回值,同时返回获胜者姓名和最低成绩,供主函数打印输出使用
内容的提问来源于stack exchange,提问作者Dave Britton
相关产品推荐
相关产品推荐

