Python中的计算器练习

时间:2018-01-11 03:25:08

标签: python

这是我的第一篇文章,所以如果我没有正确地做到这一点,请告诉我!另外,请不要为我的代码太过刻苦,我(非常)新!

我正在尝试创建一个基本的“计算器”,它将两个数字作为输入并将总和反馈给用户。如果用户键入'quit',我希望程序中断,如果他们输入字符串而不是整数,我希望程序响应,告诉他们输入一个数字。我还希望程序在添加数字后继续,以便用户可以继续添加数字,直到他们选择键入“退出”。

我的问题是:

程序运行,并询问用户第一个和第二个数字,但是,如果用户键入字符串,则STILL会产生回溯错误。我假设我没有以某种方式正确输入异常。此外,循环永远不会结束,因此它返回输入的两个数字的常量字符串。

number1 = int(input("Enter a number: "))
number2 = int(input("Enter another number: "))
error_msg = print("That isn't a number. Please enter a number")

flag = True

while flag == True:
    try:
        print(number1)
    except ValueError:
        print(error_msg)
    try:
        print(number2)
    except ValueError:
        print(error_msg)
    summation = number1 + number2
    print(summation)

    if number1 or number2 == 'quit':
        flag == False

这是我的错误消息:

Enter a number: 3
Enter another number: f
Traceback (most recent call last):
  File "errors.py", line 2, in <module>
    number2 = int(input("Enter another number: "))
ValueError: invalid literal for int() with base 10: 'f'

编辑 - 错误消息,谢谢你,larsks。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

你在那里要求输入:

number1 = int(input("Enter a number: "))
number2 = int(input("Enter another number: "))

然后,您同时使用int(...)将用户输入转换为整数。如果键入非整数值,则会出现异常:

Traceback (most recent call last):
  File "calc.py", line 1, in <module>
    number1 = int(input("Enter a number: "))
ValueError: invalid literal for int() with base 10: 'hello'

这些行周围没有try / except块,因此回溯会导致程序退出。

您的代码后面会有一些try / except个阻止,但他们什么都不做:

try:
    print(number1)
except ValueError:
    print(error_msg)

print(number1)永远不会引发ValueError例外(因为print并不关心你是否给它一个数字或字符串或其他东西)。

答案 1 :(得分:1)

你几乎得到了它,但你的输入是在错误的地方,这里是一个更加pythonic的方法。

import sys

flag = True
while flag:
    number1 = input("Enter a number: ")
    if number1 == 'quit':
      sys.exit(1)

    number2 = input("Enter another number: ")
    if number2 == 'quit':
      sys.exit(1)

    try:
        number1 = int(number1)
        number2 = int(number2)
    except (ValueError, AttributeError):
        print("That isn't a number. Please enter a number")
    else:
      summation = number1 + number2
      print(summation)