我的另一台笔记本电脑也遇到了同样的问题,这导致我买了这台新笔记本电脑(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
code> 永远不会改变,因此它总是比 string_to_convert
短,并且循环永远不会结束。
一个简单的例子是,让steps=-1
,因为counter
从0
开始并递增,并且steps
code> 总是递减,它们永远不会相等。
实际上,经过进一步检查,如果 steps
小于 len(string_to_convert)
,这将总是以无限循环结束。
考虑:
steps=2
string_to_convert="Python"
- for 循环的第一次迭代会将
counter
迭代到 2 并获取“t”;现在steps = 1
,conversion_string="t"
- 接下来的 for 循环会将
counter
迭代到 1,获取“y”;现在steps = 0
,conversion_string="ty"
- for 循环将
counter
迭代到 0,获取“P”;现在steps = -1
,conversion_string="tyP"
- 现在,
steps = -1
,counter
永远无法等于它,for 循环结束时不会更改conversion_string
。 - 重复第 4 步,同时减少
步数
,但无法退出 while 循环。
这就是为什么它有时有效有时无效的原因。
关于python - 为什么这段代码会让我的 Python 解释器挂起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27833489/