繁体   English   中英

为什么这段代码会使我的Python解释器挂起?

[英]Why does this code make my Python interpreter hang?

我的另一台笔记本电脑也遇到了相同的问题,这导致我得到了这台新笔记本电脑(在Friends感知后在NBC中是新笔记本电脑)-解释器将挂在某种嵌套的迭代上,如果冻结,甚至冻结和/或发疯留给自己的设备。 在这种情况下,大约五秒钟后,我按CTRL + C。 口译员说它在while循环的某行停了下来,每次都不同,这表明它正在工作,但步伐缓慢。 一些测试打印语句似乎显示了迭代控件(计数器等)的某些问题。

是CPU问题,还是什么?

from __future__ import print_function

import sys

# script is a useless dummy variable, setting captures the setting (enc or dec), steps captures the number of lines.
script, setting, steps = sys.argv

# Input handling bloc.
if setting not in ('enc', 'dec'):
    sys.exit("First command line thing must either be 'enc' or 'dec'.")

try:
    steps = int(steps)
except:
    sys.exit("Second command line thing must be convertable to an integer.")

# Input string here.
string_to_convert = raw_input().replace(' ', '').upper()

if setting == 'enc':
    conversion_string = ''

    counter = 0
    while len(conversion_string) < len(string_to_convert):
        for char in string_to_convert:
            if counter == steps:
                conversion_string += char
                counter = 0
            counter += 1
        steps -= 1

print(conversion_string)

根据steps的起始值, countersteps可能永远不相等,这意味着conversion_string永远不会更改,因此它总是比string_to_convert短,并且循环永远不会结束。

一个简单的例子是,让steps=-1 ,因为counter0开始并递增,并且steps总是递减,所以它们永远不会相等。


实际上,在进一步检查时,如果steps长小于len(string_to_convert) ,则此steps始终以无限循环结束。

考虑:

steps=2
string_to_convert="Python"
  1. for循环的第一次迭代将counter迭代为2并获取“ t”; 现在, steps = 1conversion_string="t"
  2. 接下来的for循环将counter迭代到1,获取“ y”; 现在, steps = 0conversion_string="ty"
  3. for循环将counter迭代为0,获取“ P”; 现在, steps = -1conversion_string="tyP"
  4. 现在, steps = -1 ,对于循环结束而无需更改conversion_string情况, counter永远无法等于它。
  5. 第4步在减少steps同时重复执行,没有任何能力退出while循环。

因此,为什么有时起作用而有时却不起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM