Python实现数字翻倍至上限的循环时如何正确统计迭代次数
代码修正方案
首先梳理原代码的核心问题:
- 冗余的外层for循环:
for number in range(0, upper_range)没有实际作用,既会和内部输入的number变量冲突,也和while循环的翻倍逻辑重复,完全可以移除。 - 计数逻辑误用enumerate:enumerate的适用场景是遍历序列类对象时同步获取索引值,你将最终数值转成字符串拆分为列表再套enumerate,本质是在统计字符串的字符数,和循环执行次数没有关联;且enumerate是惰性迭代器,直接转字符串会输出内存地址,完全达不到计数效果。
- 冗余的无效代码:
number * 2这行计算结果没有赋值给任何变量,属于无意义代码,可以直接删除。 - 输出格式不匹配:循环内的打印没有同步迭代序号,最终统计语句没有使用实际计数值。
修正实现步骤
- 初始化独立的循环计数器:在进入while循环前设置
iteration_count = 0,每执行一次翻倍操作,将计数器值加1,这是统计循环执行次数最直接的方式,不需要依赖enumerate或者字符串转换的旁路逻辑。 - 调整循环内的打印格式:每次完成翻倍操作后,按照
{当前计数}: {翻倍后的值}的格式输出,匹配你期望的展示样式。 - 修正最终统计语句:直接调用计数器存储的数值作为迭代次数,将原有错误的enumerate对象替换为实际计数值,统计目标值使用预设的上限即可。
修正后的可运行代码
def double_function(): print('Enter an upper range to target') upper_range = int(input()) print('Enter a number to double') initial_number = float(input()) current_value = initial_number iteration_count = 0 while current_value < upper_range: iteration_count += 1 current_value = current_value * 2 print(f"{iteration_count}: {current_value}") print(f"It took {iteration_count} iterations to reach {upper_range}") double_function()
运行效果验证
当输入上限为1000、初始值为1时,输出完全匹配预期:
1: 2.0 2: 4.0 3: 8.0 4: 16.0 5: 32.0 6: 64.0 7: 128.0 8: 256.0 9: 512.0 10: 1024.0 It took 10 iterations to reach 1000
补充说明:如果确实需要用enumerate实现类似逻辑,也可以在循环时把每次翻倍后的结果存入列表,再用enumerate遍历列表生成带序号的输出,但这种方式会额外存储所有历史翻倍值,对于翻倍类的简单循环来说,直接用独立计数器的实现更高效。
内容的提问来源于stack exchange,提问作者jcm42
相关产品推荐
相关产品推荐

