如何用python 3制作一个简单的计算器?

如何用python 3制作一个简单的计算器?,python,function,calculator,python-3.6,Python,Function,Calculator,Python 3.6,我正在使用python 3制作这个计算器,到目前为止我已经有了: print("Welcome to Calculator!") class Calculator: def addition(self,x,y): added = x + y return added def subtraction(self,x,y): subtracted = x - y return subtracted def mul

我正在使用python 3制作这个计算器,到目前为止我已经有了:

print("Welcome to Calculator!")

class Calculator:
    def addition(self,x,y):
        added = x + y
        return added
    def subtraction(self,x,y):
        subtracted = x - y
        return subtracted
    def multiplication(self,x,y):
        multiplied = x * y
        return multiplied
    def division(self,x,y):
        divided = x / y
        return divided

calculator = Calculator()

print("1 \tAddition")
print("2 \tSubtraction")
print("3 \tMultiplication")
print("4 \tDivision")
operations = int(input("What operation would you like to use?:  "))

x = int(input("How many numbers would you like to use?:  "))

if operations == 1:
    a = 0
    sum = 0
    while a < x:
        number = int(input("Please enter number here:  "))
        a += 1
        sum = calculator.addition(number,sum)
    print("The answer is", sum)
if operations == 2:
    s = 0
    diff = 0
    while s < x:
        number = int(input("Please enter number here:  "))
        s += 1
        diff = calculator.subtraction(number,diff)
    print("The answer is", diff)
if operations == 3:
    m = 0
    prod = 1
    while m < x:
        number = int(input("Please enter number here:  "))
        m += 1
        prod = calculator.multiplication(number, prod)
    print("The answer is", prod)
if operations == 4:
    d = 0
    quo = 1
    while d < x:
        number = int(input("Please enter number here:  "))
        d += 1
        quo = calculator.division(number, quo)
    print("The answer is", quo)
print(“欢迎使用计算器!”)
类计算器:
def添加(自身、x、y):
添加=x+y
返回添加
def减法(自、x、y):
减去=x-y
减去返回值
def乘法(自、x、y):
乘以=x*y
回报倍增
def分区(自身、x、y):
除以=x/y
收益分配
计算器=计算器()
打印(“1\t添加”)
打印(“2\t提取”)
打印(“3\t倍增”)
打印(“4\tVision”)
operations=int(输入(“您希望使用什么操作:”)
x=int(输入(“您希望使用多少个数字?”:”)
如果操作==1:
a=0
总和=0
而a

加法和乘法很好,减法和除法是这里的问题。减法的一个例子是,如果我尝试使用两个数字,9和3,我会得到-6。。。这绝对是错误的。至于除法,如果我试着把两个数字,10和2除法,我会得到0.2,这也是错误的。对于部门,我试着切换数字和现状,同样的问题(10/2),我会得到0.05。。。另外,我不想使用python的任何内置函数,所以请帮助我以最简单的方式修复这些错误。

您的算法在减法和除法方面是错误的。让我们看看减法:

s = 0
diff = 0
while s < x:
    number = int(input("Please enter number here:  "))
    s += 1
    diff = calculator.subtraction(number,diff)
你当然可以进一步浓缩这一点

terms = [int(input("Please enter number here: ")) for _ in range(x)]
terms[1:] = [x * (-1) for x in terms[1:]]
return sum(terms)

类似地,在划分时,在你的头脑中逐步进行:

d = 0
quo = 1
while d < x:
    number = int(input("Please enter number here:  "))
    d += 1
    quo = calculator.division(number, quo)
print("The answer is", quo)
我们可以编写类似的算法

terms = [int(input("Please enter number here: ")) for _ in range(x)]
head, tail = terms[0], terms[1:]
result = head
for term in tail:
    result /= term

请注意,所有这些都可以使用
functools.reduce
操作符之一编写

terms = [int(input("Number please! ")) for _ in range(int(input("How many numbers? ")))]
sum_ = functools.reduce(operator.add, terms)
diff = functools.reduce(operator.sub, terms)
prod = functools.reduce(operator.mul, terms)
diff = functools.reduce(operator.truediv, terms)

考虑减法选项(使用问题中提供的测试输入): 我们说我们给出2个数字。 第一个数字是9。所以
diff=number-diff=9-0=0
。 现在我们输入下一个数字,3,因此
diff=number-diff=0-3=-3
,现在如果它工作正常,我们需要切换diff的计算,因此它应该是
diff=diff-number
,现在如果我们运行它,它将给出
-12
,这是技术上正确的答案,当我们问
-9-3=-12
,现在我假设你真的想找到
9-3=6
,唯一“简单”的解决办法是将diff设置为第一个数字,在本例中为9,然后按照我上面说的做(给出预期的9-3=6)。除法函数不起作用的原因与减法相同,您可以使用与上面类似的逻辑来修复它

除此之外,使用加法、减法、乘法和除法会破坏方法的要点,即防止多次使用相同的代码,并且必须编写更少的代码,但在这种情况下,运行
计算器。加法(a,b)
比简单地使用
a+b


python还有一个内置的计算器函数,名为
eval
,它将获取一个字符串并将其作为python代码运行,这意味着它支持bidma、多个运算符、数学函数(假设您已导入它们)等。

请不要创建不同的帐户。我看到了昨天问的这个问题。@cricket_007,太棒了,让我们结束吧!这些似乎是独立的问题,都不值得结束。@Theresa试图限制到一个特定的问题。由于所有函数都大致相同,因此一个操作的解决方案可以修复所有函数。您是否尝试过使用python调试器单步执行代码?文档与(‘pdb’模块)一起提供[
terms = [int(input("Please enter number here: ")) for _ in range(x)]
head, tail = terms[0], terms[1:]
result = head
for term in tail:
    result /= term
terms = [int(input("Number please! ")) for _ in range(int(input("How many numbers? ")))]
sum_ = functools.reduce(operator.add, terms)
diff = functools.reduce(operator.sub, terms)
prod = functools.reduce(operator.mul, terms)
diff = functools.reduce(operator.truediv, terms)