Python错误(简单)(我疯了吗?)

时间:2015-02-08 10:55:31

标签: python python-3.x

世界上哪里出错了?这看起来对我有用。有一个未使用的变量;我需要导入数学吗?这个帖子的底部有一个错误图片。

import sys

def menu(retries=4):
    menu = ['+ [1]', '- [2]', '/ [3]', '* [4]', 'Exit [0]']
    print(menu)
    x = input("Choose and option 0-4: ")[:1]
    if x == '1':
        add()
    elif x == '2':
        sub()
    elif x == '3':
        div()
    elif x == '4':
        mult()
    elif x == '0':
        print("Terminating")
        xterm()
    else:
        print("Issue")

def xterm():
    sys.exit()
def add():
    a=input("Number 1: ")
    b=input("Number 2: ")
    print(a+b)
def sub():
    a=input("Number 1: ")
    b=input("Number 2: ")
    print(a-b)
def div():
    a=input("Number 1: ")
    b=input("Number 2: ")
    print(a/b)
def mult():
    a=input("Number 1: ")
    b=input("Number 2: ")
    print(a*b)

menu()

错误: http://i.stack.imgur.com/svlKG.png

2 个答案:

答案 0 :(得分:4)

在Python中,您可以添加字符串但不能减去它们。 input()为您提供了一个字符串。 "hello "+"world"会产生"hello world",但"hello "-"world"会给您一个错误。您也可以乘以字符串,但只能乘以一个数字(整数),如下所示:"a"*3=="aaa"

在这里,您希望输入的数据是一个数字。然后使用int()float()

答案 1 :(得分:1)

输入是一个字符串,你需要在尝试添加之前对每一个进行转换等等。:

 a = int(input("Number 1: "))
 b = int(input("Number 2: "))

如果您担心用户在比较第一个用户输入时输入额外的空格,请使用str.strip

x = input("Choose and option 0-4: ").strip()

如果你使用x = input("Choose and option 0-4: ")[:1]并且用户输入一个后跟1 " 1"的空格,你将获得一个空字符串作为strip将删除空格的值。

您只需要在正在进行数学运算的函数中进行强制转换。可以将x"1"等进行比较。

您可以使用while循环验证初始用户输入:

def menu():
    menu = ['+ [1]', '- [2]', '/ [3]', '* [4]', 'Exit [0]']
    print(menu)
    while True:
        x = input("Choose and option 0-4: ")[:1]
        if x == '1':
            add()
        elif x == '2':
            sub()
        elif x == '3':
            div()
        elif x == '4':
            mult()
        elif x == '0':
            print("Terminating")
            return
        else:
            print("Invalid choice")


def add():
    a = int(input("Number 1: "))
    b = int(input("Number 2: "))
    print(a  +b)

def sub():
    a = int(input("Number 1: "))
    b = int(input("Number 2: "))
    print(a  -b)

def div():
    a = int(input("Number 1: "))
    b = int(input("Number 2: "))
    print(a / b)

def mult():
    a = int(input("Number 1: "))
    b = int(input("Number 2: "))
    print(a * b)

但是使用dict,运算符模块和一个辅助函数会好得多:

 from operator import add, truediv, sub, mul

def get_nums():
    while True:
        try:
            a = float(input("Number 1: "))
            b = float(input("Number 2: "))
            return  a,b
        except ValueError:
            print("Not a valid number")


def menu():
    menu = ['+ [1]', '- [2]', '/ [3]', '* [4]', 'Exit [0]']
    print(menu)
    ops = {"1":add,"2":sub,"3":truediv,"4":mul}
    while True:
        x = input("Choose and option 0-4: ")
        if x == '0':
            print("Terminating")
            return
        if x in ops:
            a,b = get_nums()
            print(ops[x](a,b))
        else:
            print("Invalid choice")