Python中使用for循环与条件筛选时出现Index out of range错误
问题原因分析
你的错误根源在于输入无效值时的列表操作逻辑错误:
- 当输入≤0的值时,你先把这个无效值添加到了
Current列表,接着又在else块里追加了一个新输入值,导致Current的长度会超过6,而循环是固定执行6次,最终Current会存在多余元素。 - 只有输入有效值时才会往
Power里添加元素,出现无效输入时Power的长度不会对应增长。后续循环中x持续递增,但Power的长度跟不上x的索引,比如第一次输入无效值后Power为空,第二次循环x=1时,尝试访问Power[1]就会触发索引越界错误。
解决思路
核心是确保每次循环都能获取到有效的正数电流值,再添加到列表并计算功率,而非先添加无效值再补加。可以用while循环重复获取输入,直到满足条件为止。
修正后的代码
Resistance = [12, 16, 27, 39, 56, 81] Current = [] Power = [] print("Enter 6 positive values for current:") for x in range(6): # 循环获取输入,直到得到正数 while True: current_val = float(input()) # 用float替代eval更安全,避免执行恶意代码 if current_val > 0: break print("Positive values only. Enter again:") # 确认有效值后再添加到列表 Current.append(current_val) # 计算对应功率并添加到Power列表 power_val = current_val ** 2 * Resistance[x] Power.append(power_val) print(Resistance) print(Current) print(Power)
关键改动说明
- 用
while True循环包裹输入逻辑,直到用户输入正数才退出循环,避免无效值进入Current列表。 - 替换
eval(input())为float(input()),eval存在安全风险(比如用户输入恶意代码),用float更适合处理数值类输入。 - 只有得到有效值后,才执行添加到
Current和计算功率的操作,保证Current和Power的长度始终与循环次数一致,不会出现索引偏差。
内容的提问来源于stack exchange,提问作者LaprasLazuli
相关产品推荐
相关产品推荐

