gpt4 book ai didi

python - 尝试在 Python 中创建打印计算器程序,程序无限输出 0

转载 作者:可可西里 更新时间:2023-11-01 11:28:34 26 4
gpt4 key购买 nike

我试图在 Python 2.7.8 中制作这个打印计算器程序,但每当我运行它时,它都会输出:

0
0
0
0

等等。它无限地这样做,永不停止。我真的很感激任何帮助。这是我的代码。谢谢!

import msvcrt             # Windows only!
def getch():
return msvcrt.getch()
def putch(ch):
msvcrt.putch(ch)

total = 0
pendingOp = 0
print "*** Calculator ***"
while True:
ch = getch()
if ch == "q": break # quit
if ch == "c": # clear the display
total = 0
pendingOp = 0
elif ch == "a" or "s" or "m" or "d": # add, subtract, multiply, divide
pendingOp = ch
elif (ch >= "0" and ch <= "9"):
newNumber = int(ch)
if pendingOp == 0:
total = newNumber
else:
if pendingOp == "a": total = total + newNumber
elif pendingOp == "s": total = total - newNumber
elif pendingOp == "m": total = total * newNumber
elif pendingOp == "d": total = total / newNumber
pendingOp = 0
print total

最佳答案

您的问题是,出于某种原因,您没有控制台。

Python 的 msvcrt.getch是 MSVCRT 函数的薄包装器 _getch .虽然那里的文档说“没有错误返回”,但事实并非如此。如果应用程序没有控制台,这些函数会立即返回,返回 -1(转换为适当的类型,这意味着你得到 '\xff' 代表 getchu'\uffff' 代表 getwch——这正是你想要的重新看到)。

那么,为什么没有控制台呢?

最常见的原因是您在某些 GUI IDE 中运行应用程序,例如 IDLE 或 PyWin,而不是从 cmd shell(也称为“DOS 提示符”)。你不能使用 msvcrt处于空闲状态。*

还有其他可能性,例如明确关闭控制台或从控制台分离,但我怀疑这些与此相关。

那么,您可以做什么?

好吧,如果您使用的是 IDLE,它实际上是在 Tkinter GUI 上模拟命令行输入。该模拟不提供任何方式来一次输入一个字符,一次只能输入一行。所以,你可以只使用 raw_input而不是 msvcrt.getch在这里。

理论上您可以挂接 IDLE 模拟输入,但这比仅仅为您的应用构建您自己的 Tkinter GUI(或 Qt 或 Win32 或任何 GUI)要多得多,而且 yield 要少得多。

或者,您可以停止在 IDLE 中运行该程序。打开 cmd 窗口并使用 python myscript.py 运行程序(或 C:\Python27\python D:\mystuff\myscript.py 或其他)。如果您不知道如何在 Windows 上使用 shell,现在是学习的好时机。


* 那么,您可以通过 ctypes 调用 Windows API 函数来显式分配控制台或 win32api .但是如果你这样做,它会弹出一个单独的 cmd shell 窗口供你输入,无论如何它仍然不会影响 IDLE 的输入。

关于python - 尝试在 Python 中创建打印计算器程序,程序无限输出 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26921492/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com