为什么这段代码使我的Python解释器挂起?
我的另一台笔记本电脑也有同样的问题,这让我得到了这台新的(在《老友记》之后,NBC上出现了新的)——解释器会挂起某种嵌套迭代,如果让它自己使用,甚至会冻结和/或发狂。在这种情况下,我在大约五秒钟后按CTRL+C组合键。翻译说它停在while循环中的某一行,每次都不同,这表明它正在工作,但速度很慢。一些测试打印语句似乎显示了迭代控件(计数器等)的一些问题 这是CPU问题还是什么为什么这段代码使我的Python解释器挂起?,python,Python,我的另一台笔记本电脑也有同样的问题,这让我得到了这台新的(在《老友记》之后,NBC上出现了新的)——解释器会挂起某种嵌套迭代,如果让它自己使用,甚至会冻结和/或发狂。在这种情况下,我在大约五秒钟后按CTRL+C组合键。翻译说它停在while循环中的某一行,每次都不同,这表明它正在工作,但速度很慢。一些测试打印语句似乎显示了迭代控件(计数器等)的一些问题 这是CPU问题还是什么 from __future__ import print_function import sys # script
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)
from\uuuuu future\uuuuu导入打印功能
导入系统
#脚本是一个无用的虚拟变量,设置捕获设置(enc或dec),步骤捕获行数。
脚本,设置,步骤=sys.argv
#输入处理集团。
如果设置不在('enc','dec'):
sys.exit(“第一个命令行内容必须是'enc'或'dec'))
尝试:
步长=int(步长)
除:
sys.exit(“第二个命令行内容必须可转换为整数。”)
#在这里输入字符串。
字符串转换为原始输入()
如果设置==“enc”:
转换字符串=“”
计数器=0
而len(字符串转换)根据步数的起始值,计数器
和步数
可能永远不相等,这意味着转换字符串
永远不会改变,因此它总是短于字符串
,循环永远不会结束
一个简单的例子是,让步骤=-1
,因为计数器从0
开始并递增,步骤总是递减,所以它们永远不会相等
实际上,在进一步检查时,如果步骤
小于len(字符串转换)
这将始终以无限循环结束
考虑:
steps=2
string_to_convert="Python"
for循环的第一次迭代将计数器
迭代到2并获取“t”;现在steps=1
,conversion\u string=“t”
接下来for循环将计数器迭代到1,获取“y”;现在steps=0
,conversion\u string=“ty”
对于循环迭代计数器
到0,获取“P”;现在steps=-1
,conversion\u string=“tyP”
现在,steps=-1
,计数器
永远不能等于它,因为循环结束时不会更改转换字符串
步骤4在减少步骤的同时重复,但无法退出while循环
因此,为什么它有时工作,有时不工作。示例输入和输出?示例输出:“DERPDERPDERP”,预期输出是从中收集的字符串文字(此代码的最终结果应该是围栏密码,但这不是重点),输出只不过是一个空的解释程序行。可能循环永远不会结束。如果计数器==步数
不为真,则会发生这种情况。检查步长值和计数器。你的循环都是乱七八糟的,while或for都可以算出。我一直认为解释器可以捕捉到这样的无限循环。不,有时候无限循环是有用的。