Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这段代码使我的Python解释器挂起?_Python - Fatal编程技术网

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

为什么这段代码使我的Python解释器挂起?,python,Python,我的另一台笔记本电脑也有同样的问题,这让我得到了这台新的(在《老友记》之后,NBC上出现了新的)——解释器会挂起某种嵌套迭代,如果让它自己使用,甚至会冻结和/或发狂。在这种情况下,我在大约五秒钟后按CTRL+C组合键。翻译说它停在while循环中的某一行,每次都不同,这表明它正在工作,但速度很慢。一些测试打印语句似乎显示了迭代控件(计数器等)的一些问题 这是CPU问题还是什么 from __future__ import print_function import sys # script

我的另一台笔记本电脑也有同样的问题,这让我得到了这台新的(在《老友记》之后,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)
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都可以算出。我一直认为解释器可以捕捉到这样的无限循环。不,有时候无限循环是有用的。