Coursera作业中Python列表输入引用问题求助
问题分析与解决方案
核心问题
你当前代码的主要问题有两个:
input()获取的是字符串类型,不是数字列表,直接对其执行sum()或遍历运算会触发类型错误(因为字符串的元素是单个字符,无法参与数值计算)。- 变量名与作业要求冲突:注释明确要求使用全局标识符
my_list,但你定义了list1,还把均值结果错误赋值给了my_list,导致逻辑混乱。
修正后的完整代码
def stats(): # 声明使用全局变量my_list(符合作业注释要求) global my_list # 输出原列表 print(my_list) # 计算均值(仅计算一次,避免重复运算) mean = sum(my_list) / len(my_list) # 格式化输出均值,保留两位小数 print(f"mean is {mean:.2f}") # 计算总体标准差:先求平方和,再算方差,最后开根号 squared_diff_sum = sum((x - mean) ** 2 for x in my_list) population_std_dev = (squared_diff_sum / len(my_list)) ** 0.5 # 格式化输出标准差,保留两位小数 print(f"population standard deviation is {population_std_dev:.2f}") # 处理系统输入:将输入字符串按空格分割为数字列表,赋值给全局的my_list my_list = list(map(float, input().split())) # 调用函数执行统计计算 stats()
关键改动说明
- 输入处理:
input().split()将输入的整段字符串按空格拆分为单个字符串元素,map(float, ...)把每个元素转换为浮点数,最终得到可参与数值计算的数字列表。 - 全局变量合规:通过
global my_list声明函数内使用的是全局作用域的my_list,完全符合作业注释的要求。 - 计算优化:仅计算一次均值
mean,避免重复调用sum(my_list)/len(my_list),既提升效率又减少潜在错误。 - 简洁输出:使用f-string格式化输出,直接指定保留两位小数,无需手动调用
round()再转换字符串,代码更简洁易读。
特殊情况说明
如果Coursera系统已经预先将输入列表绑定到全局的my_list(无需你手动读取输入),只需删除最后两行的输入处理代码,直接调用stats()即可。
内容的提问来源于stack exchange,提问作者DonBrownie
相关产品推荐
相关产品推荐

