"TypeError: '>' not supported between instances of 'int' and 'NoneType'"

"TypeError: '>' not supported between instances of 'int' and 'NoneType'"

我正在使用 def 函数,当我 运行 代码时,我得到了 "TypeError: '>' not supported between instances of 'int' and 'NoneType'"。我明白了错误的意思,但是有什么方法可以将非类型更改为 int 吗?

import random 
random.randint(1,3)

def P1():
   print("pick ")
   playerinput = int(input("rock(1), paper(2), scissors(3):"))

   if playerinput == 1:
        print("Player 1 chose: rock")
   elif playerinput == 2:
        print("Player 1 chose: paper")
   elif playerinput == 3:
        print("Player 1 chose: scissors")
   return (playerinput)

def P2():
    computer = random.randint(1,3)  
    if computer == 1:
        print("CPU chose: rock")
    elif computer == 2:
        print("CPU chose: paper")
    elif computer == 3:
        print("CPU 2 chose: scissors")

def winner():
    if P1()>P2():
        print("Player 1 wins")


def main():
   winner()

main() 

欢迎来到 SO。

您可能忘记了 return 定义 P2 时的值。

def P2():
computer = random.randint(1,3)  
if computer == 1:
    print("CPU chose: rock")
elif computer == 2:
    print("CPU chose: paper")
elif computer == 3:
    print("CPU 2 chose: scissors")
# Here we return the random value chosen
return computer

这样我们现在 returning 一个 int 而不是 NoneType,因此比较 P1()>P2 应该有效。

if P1()>P2(): 你的错误发生在这里

在Python中,所有的函数都隐式地returnNone,并且return语句可以用来给出一个有用的值

def f():
    pass

returns None 调用时

def f():
    return 1

returns 1 调用时

请注意您的函数 P2 没有 return 语句,因此调用它会导致 None。 正如您的错误消息所述,intNoneType 之间不支持 >(大于运算符,您将其与 P2() 的结果一起使用)。一般来说,None除了==之外没有可比性,但是在判断一个值是否为None

时,使用is被认为更好

What is the difference between " is None " and " ==None "