[英]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
的起始值, counter
和steps
可能永远不相等,这意味着conversion_string
永远不会更改,因此它总是比string_to_convert
短,并且循环永远不会结束。
一个简单的例子是,让steps=-1
,因为counter
从0
开始并递增,并且steps
总是递减,所以它们永远不会相等。
实际上,在进一步检查时,如果steps
长小于len(string_to_convert)
,则此steps
将始终以无限循环结束。
考虑:
steps=2
string_to_convert="Python"
counter
迭代为2并获取“ t”; 现在, steps = 1
, conversion_string="t"
counter
迭代到1,获取“ y”; 现在, steps = 0
, conversion_string="ty"
counter
迭代为0,获取“ P”; 现在, steps = -1
, conversion_string="tyP"
steps = -1
,对于循环结束而无需更改conversion_string
情况, counter
永远无法等于它。 steps
同时重复执行,没有任何能力退出while循环。 因此,为什么有时起作用而有时却不起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.