Python中如何通过条件修改一组变量的取值?
你的代码存在多个问题,逐一分析并修正:
核心错误点
map()使用不当:map()不会直接修改原列表,它返回一个迭代器对象,必须将其转换为列表才能得到处理后的结果。另外,原列表存储的是a、b、c的值副本,修改列表元素不会同步改变原变量。percentage函数逻辑混乱:- 缩进错误:
i += 1写在函数体外,导致函数内的while循环会无限执行(i永远是0),且循环逻辑本身不符合「按比例调整」的需求。 - 函数内修改的是局部变量
n,整数是不可变类型,函数内的赋值只会创建新对象,无法影响传入的原始值。
- 缩进错误:
- 变量命名冲突:用
list作为变量名会覆盖Python内置的list类型,容易引发后续问题。 - 原变量与列表元素不同步:
a、b、c是独立变量,列表存储的是它们的值副本,修改列表元素不会改变这些变量的原始值。
修正后的代码示例
如果你的需求是将数值按20%比例调整(若要执行7次乘20%,可看下方补充):
# 避免使用list作为变量名,改用speed_list speed_list = [1, 2, 3] def percentage(n): # 按20%比例调整,返回处理后的值 return n * 0.2 sample = input("Enter a string: ") if sample == "Fox": # 将map返回的迭代器转为列表,覆盖原列表 speed_list = list(map(percentage, speed_list)) # 解包列表,同步更新a、b、c的值 a, b, c = speed_list cat1 = f"The fox ran at a speed of {a}." cat2 = f"The shark swam at a speed of {b}." cat3 = f"The bird flew at a speed of {c}." print(cat1, cat2, cat3) print(speed_list)
若需要执行7次乘20%的逻辑,修改 percentage 函数即可:
def percentage(n): result = n # 循环7次执行乘20%操作 for _ in range(7): result *= 0.2 return result
内容的提问来源于stack exchange,提问作者Giri
相关产品推荐
相关产品推荐

