不支持的操作数类型 *: 'NoneType' 和 'NoneType'(Python)

4

我目前只是在定义函数方面进行尝试,但我遇到了这个错误。我只是想创建一个简单的函数,让用户输入2个数字,然后将它们相乘。请尽可能简单地解释我做错了什么。(我是新手)

我目前只是在定义函数方面进行尝试,但我遇到了这个错误。我只是想创建一个简单的函数,让用户输入2个数字,然后将它们相乘。请尽可能简单地解释我做错了什么。(我是新手)
def userinput():
    while True:
        try:
            number = int(input("Number: "))
            break
        except ValueError:
            print("NOPE...")

def multiply(x,y):
    z = x * y
    print(z)

while True:
    x = userinput()
    y = userinput()
    multiply(x,y)
    again = input("Again? ")
    if again == "No" or again == "no":
        break
    else:
        pass

你可以使用 if again.lower() == 'no': 来捕获所有形式的“no”,包括“NO”和“nO”。 - SethMMorton
另外,这些代码都在一个函数内吗?否则,你最后一个if块中的break就没有意义了。 - SethMMorton
1个回答

6
在你的函数userinput()中,你从未返回number,所以python默认为return None。 因此,当你将xy传递给multiply()时,你试图执行None * None,因此会出现错误。
userinput()的try / except结构之后加上return number
如果你还想检查浮点数,可以这样做:
while True:
    number = input("Number: ")
    try:
        return int(number)
    except ValueError:
        try:
            return float(number)
        except ValueError:
            print("NOPE...")

或者更好的方式是,不需要创建number变量。只需执行return int(input("Number: "))。那么就不需要使用break了。 - SethMMorton
@Haidro 另外,我该如何让用户输入小数呢?现在运行代码时,每次我输入小数它都无法识别并停留在循环中。 - Suds2
@Suds2 在你的 except: 中,你可以再加一个 try/except 结构。我会编辑我的回答。 - TerryA
好的,谢谢 @Haidro。你对像我这样的编程新手来说是一个很大的帮助。 - Suds2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接