You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python函数参数与变量传递存疑,求修正评分星号展示代码

Python参数传递与评分星号功能修正

原代码的核心问题

  • 变量作用域错误:determine_stars函数直接使用avg变量,但avg是main函数的局部变量,函数间无法直接访问彼此的局部变量,必须通过参数传递。
  • 平均分计算逻辑错误:每次循环都覆盖score变量,最后仅用最后一个分数除以5,正确做法是累加所有5个分数后再求平均。
  • 条件判断逻辑错误:所有if/elif用了or,应替换为and,否则会出现逻辑混乱(比如任何≤10的数都会匹配第一个条件)。
  • 输入验证不完整:仅第一个输入做了范围检查,后续4个输入未验证是否在0-10之间。

修正后的代码

def main():
    total_score = 0.0
    # 获取5个有效评分
    for _ in range(5):
        while True:
            try:
                score = float(input("Enter a score between 0 and 10: "))
                if 0 <= score <= 10:
                    total_score += score
                    break
                else:
                    print("ERROR! Enter a score between 0 and 10: ")
            except ValueError:
                print("ERROR! Please enter a valid number.")
    
    avg = total_score / 5
    # 将平均分作为实参传给determine_stars函数的参数
    stars = determine_stars(avg)
    print(f'Your average score of {avg:.1f} gives you {stars}')
        
def determine_stars(avg):  # 定义参数avg接收传入的实参
    if 9.0 <= avg <= 10.0:
        return "*****"
    elif 8.0 <= avg <= 8.9:
        return "****"
    elif 7.0 <= avg <= 7.9:
        return "***"
    elif 6.0 <= avg <= 6.9:
        return "**"
    elif 5.0 <= avg <= 5.9:
        return "*"
    else:
        return "No Stars"

main()

关键修改说明

  • 参数传递实现:给determine_stars定义参数avg,在main调用时将计算好的平均分作为实参传入,解决变量作用域问题,这就是函数参数传递的核心语法。
  • 分数累加逻辑:用total_score累加所有有效分数,最后除以5得到正确平均分。
  • 完善输入验证:每个输入都通过循环校验,同时处理非数字输入的异常,确保所有输入都是0-10之间的有效数字。
  • 修复条件判断:把or替换为and,并用Python链式比较写法简化逻辑,更清晰直观。
  • 函数返回值优化:直接返回星号字符串,简化代码结构。

内容的提问来源于stack exchange,提问作者r00

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 05:53:16