【发布时间】:2018-03-27 05:17:11
【问题描述】:
我正在使用 Python 3 编写一个计算器应用程序,并且一切正常(我认为),除非我尝试使用我的 double_factorial() 函数。如果我输入一个大于 3 的数字,程序不会输出任何内容,并且我的电脑会过热(我使用的是 Macbook Pro,完全定制为尽可能强大)。这要么是直接的计算机问题,要么是由于我的代码有问题而导致的计算机问题。我的代码有什么问题是我作为初学者可能无法发现的吗? (注意:我只发布相关部分):
def add(a,b):
return(a + b)
def subtract(a,b):
return(a - b)
def multiply(a,b):
counter = 0
for i in range(a):
counter = add(counter, b)
return(counter)
def divide(a,b):
quotient = 0
while a >= b:
quotient = add(quotient, 1)
a = subtract(a,b)
return (quotient, a)
def factorial(a):
c = 1
while a > 1:
c = multiply(c,a)
a = subtract(a,1)
return(c)
def double_factorial(a):
og = factorial(a)
return factorial(og)
def equation():
d = None
print("Valid operations: +, -, *, /, !, !!, =")
c = eval(input("Integer: "))
while d != "=":
d = input("Operation: ")
if d in ('+', '-', '*', '/', '!', '!!', '='):
if d == "+":
c = add(c, eval(input("Integer: ")))
elif d == "-":
c = subtract(c, eval(input("Integer: ")))
elif d == "*":
c = multiply(c, eval(input("Integer: ")))
elif d == "/":
c = divide(c, eval(input("Integer: ")))
elif d == "!":
c = factorial(c)
elif d == "!!":
c = double_factorial(c)
elif d != "=":
print("invalid")
print(str(c))
【问题讨论】:
-
请贴出
multiply()和subtract()的函数定义。 -
请注意,双因子的扩展速度相当快,例如
10的输入将需要 3628800 次multiply()调用才能进行第二级计算。 -
顺便说一句,你不应该使用
eval(input(...))。像这样的事情并不是真正的问题,但一般来说,应该避免eval,尤其是在接受输入时,因为it is dangerous。你应该只使用int或float,因为无论如何这就是你想要的。 -
一切都已更新!为了方便起见,我只是添加了所有功能。另外,在完成我的代码时,我会牢记 eval 的事情,那篇文章真的很有帮助!
标签: python python-3.x performance