Python 闲置 Python 3.5.2 "crashing"

Python IDLE with Python 3.5.2 "crashing"

好吧,我先说一句:我是Python的新手。我只是在尝试 IDLE,然后我遇到了这个奇怪的问题 "crash"。我将 "crash" 放在语音标记中,因为我不确定它是否符合崩溃条件,而不是程序只是像普通程序在 Windows 中那样崩溃,它仍然运行,但每当我按回车键并尝试让它接受新文本它什么都不做。例如。如果您尝试键入 "print('a')" 然后按回车键,它只会转到下一行(并且不会打印 'a')。我试图制作一个简单的函数,将整数转换为字符串,其中字符串中的每个字符都是“1”或“0”,形成表示所述(无符号)整数的二进制数。

>>> def int_to_str(int_in):
        str_out=''
        bit_val=1<<int_in.bit_length()
        while(int_in>0):
            if(int_in>bit_val):
                str_out+='1'
                int_in-=bit_val
            else:
                str_out+='0'
            bit_val>>=1
        return str_out

>>> print('a')
print('c')

基本上,它对我的​​输入完全没有反应,并允许我 edit/change "print('a')",即使如果它实际上 "accepted" 我的输入我不应该这样做。为什么是这样?我做了什么 wrong/messed 了?

此外,我通过关闭 shell 并再次打开它并只为 "int_to_string" 函数输入所述代码来确保它不是我之前搞砸的东西,并且我没有更改任何设置或事先导入任何模块或类似的东西(以防万一)。

编辑:我尝试重新安装,这有点帮助我现在可以做其他事情了,但是当我尝试使用 "str_to_int()" 函数时,它有同样奇怪的行为 not accepting/interpreting 任何更多的用户输入。

你的 while 循环永远不会终止,你需要重新安排你的逻辑。打印变量可以是一种有效的调试工具——像这样:

>>> def int_to_str(int_in):
        str_out=''
        bit_val=1<<int_in.bit_length()
        while(int_in>0):
            print(int_in, bit_val)
            if(int_in>bit_val):
                str_out+='1'
                int_in-=bit_val
            else:
                str_out+='0'
            bit_val>>=1
        return str_out

如果您的程序似乎运行时间过长,您可以使用 ctrl-c 停止它。