【问题标题】:Making a Calculator which take input from user until user enter 0 but not working correctly制作一个接受用户输入的计算器,直到用户输入 0 但无法正常工作
【发布时间】:2020-06-29 21:31:20
【问题描述】:

我是 python 的新手,正在尝试制作计算器,但不知道如何制作 我正在制作一个计算器,它将接受用户的输入,直到用户输入 0,然后执行操作 但我被困在这里 如果有人可以帮助我完成这项工作,我将非常感谢他/她。

num = None

# Asking Users for the Specific Operations

print(("1. For Addition \n 2. For Subtraction. \n 3. For Multiplication. \n 4. For Division \n 5.For Exit"))

options = int(input("Enter Your Choice: "))

# For Addition or Option 1

if options == 1:
    total = 0
    while(num != 0):
        try:
            num = float(input("(Enter \'0'\ When Complete.) Enter Number "))
        except:
            print("Error, Enter Valid Number")
            continue
        total = total + num
    print("Your Calculated Number is: {} ".format(total))

# For Subtraction or Option 2

elif options == 2:
    total = 0
    while (num != 0):
        try:
            num = float(input("(Enter \'0'\ When Complete.) Enter Number "))
        except:
            print("Error, Enter Valid Number")
            continue
        total = total - num
    print("Your Calculated Value is: {}".format(total))

# Multiplication for Option 3

elif options == 3:
    total = 1
    while (num != 0):
        try:
            num = float(input("(Enter \'0'\ When Complete.) Enter Number "))
        except:
            print("Error, Enter Valid Number")
            continue
        total = total * num
    print("Your Calculated Value is: {}".format(total))

# Division for Option 4

elif options == 4:
    total = 1
    while (num != 0):
        try:
            num = float(input("(Enter \'0'\ When Complete.) Enter Number "))
        except:
            print("Error, Enter Valid Number")
            continue
        total = total / num
    print("Your Calculated Value is: {}".format(total))

# When User Wants to Exit

else:
    print("Thank You for Using the Calculator")

【问题讨论】:

  • 减法不起作用,因为您从未在该代码块中为total 分配初始值。如果还有其他问题,您需要告诉我们它是什么 - 如果生成了错误,我们期望完整的回溯消息;如果只是出乎意料的结果,我们需要看看您收到了什么,以及您的预期。
  • 我通过添加总计 = 0 更改了减法代码,但是当用户输入第一个数字时出现问题,我的代码从总计中减去零,因此我的代码给了我首先是负值,然后减去其他负值将添加两个数字
  • 当我必须从 5 中减去 3 时,答案应该是 2 但我的代码给了我 -8 因为 0-5 = -5 然后 -5-3 = -8 这就是我不想要的问题一开始它从 0 减到负

标签: python python-3.x python-2.7 calculator


【解决方案1】:

这是使用itertools.reduce 的更好方法。不要重复相同的代码来多次输入一个数字,而是将其放入一个函数中。这也将有助于避免代码中的错误并阐明逻辑。第二个生成器函数可用于获取一系列值,直到用户输入零。

from functools import reduce
import operator

def input_number():
    while True:
        try:
            return float(input("(Enter '0' When Complete.) Enter Number "))
        except:
            print("Error, Enter Valid Number")
        
def input_series():
    while True:
        n = input_number()
        if n == 0:
            return
        yield n

operations = {
      1: operator.add,
      2: operator.sub,
      3: operator.mul,
      4: operator.truediv
      }
# Asking Users for the Specific Operations
print(("1. For Addition \n 2. For Subtraction. \n 3. For Multiplication. \n 4. For Division \n 5.For Exit"))
option = int(input("Enter Your Choice: "))

# For Addition or Option 1

if option == 5:
    print("Thank You for Using the Calculator")
else:
    total = reduce(operations[option], input_series())
    print("Your Calculated Value is: {}".format(total))
    

【讨论】:

  • 我正在使用 Pycharm,它给了我 Import Error 'Cannot import name 'reduce' from 'itertools'(位置未知)
  • 抱歉应该是functools - 已更正代码
【解决方案2】:

代替

elif options == 2:
    total = 0
    while (num != 0):
        try:
            num = float(input("(Enter \'0'\ When Complete.) Enter Number "))
        except:
            print("Error, Enter Valid Number")
            continue
        total = total - num

使用(更改仅在2nd行和last行)

elif options == 2:
    total = None
    while (num != 0):
        try:
            num = float(input("(Enter \'0'\ When Complete.) Enter Number "))
        except:
            print("Error, Enter Valid Number")
            continue
        total = total - num if total is not None else num

您可以对elif options == 4: 分支使用相同的方法。

【讨论】:

  • 非常感谢您的帮助
【解决方案3】:

减法的问题是变量total没有初始化。

乘除的问题在于,当用户输入“0”时,变量total在被while语句检查之前被乘以或除以零。我通常会这样做:

elif options == 3:
total = 1
while True:
    try:
        num = float(input("(Enter '0' When Complete.) Enter Number "))  # No need to escape single quotes when your string uses double quotes 
        if num == 0:
            break
    except ValueError:
        print("Error, Enter Valid Number")
        continue
    total = total * num
print("Your Calculated Value is: {}".format(total))

但是,如果您想快速解决问题,您可以让用户输入 1 而不是 0 来进行乘法和除法:

elif options == 4:
total = 1
while (num != 1): 
    try:
        num = float(input("(Enter '1' When Complete.) Enter Number "))
    except:
        print("Error, Enter Valid Number")
        continue
    total = total / num
print("Your Calculated Value is: {}".format(total))

编辑:如果您希望除法按照您指定的方式工作,您可以执行以下操作:

elif options == 2:
    total = 1
    try:
        first_number = float(input("(Enter '0' When Complete.) Enter Number "))
        if first_number == 0:
            print("Your Calculated Value is: 0")
            exit()
    except ValueError:
        print("Error, Enter Valid Number")
        continue

    total = 1
    while True:
        try:
            num = float(input("(Enter '0' When Complete.) Enter Number "))
            if num == 0:
                break
        except ValueError:
            print("Error, Enter Valid Number")
            continue
        total = total * num
    print("Your Calculated Value is: {}".format(total + first_number))

【讨论】:

  • 当我必须从 5 中减去 3 时,答案应该是 2 但我的代码给了我 -8 因为 0-5 = -5 然后 -5-3 = -8 这就是我不想要的问题一开始是从0减-Saad_Ali786刚刚编辑删除
猜你喜欢
  • 1970-01-01
  • 2014-01-02
  • 2016-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-18
  • 1970-01-01
相关资源
最近更新 更多