«TypeError: '>' не поддерживается между экземплярами int и NoneType» - PullRequest
1 голос
/ 23 февраля 2020

Я использую функции def, и когда я запускаю код, я получаю "TypeError: '>' не поддерживается между экземплярами 'int' и '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() 

Ответы [ 2 ]

0 голосов
/ 23 февраля 2020

if P1()>P2(): здесь происходит ваша ошибка

В Python все функции неявно возвращают None, и операторы return могут использоваться для получения полезного значения

def f():
    pass

возвращает None при вызове

def f():
    return 1

возвращает 1 при вызове

Обратите внимание, что ваша функция P2 не имеет оператора возврата, поэтому вызов ее приведет к None. Как указано в сообщении об ошибке, > (больше, чем оператор, который вы используете с результатом P2()) не поддерживается между int и NoneType. В общем, None несопоставимо с ==, но считается, что лучше использовать is при определении, является ли значение None

В чем разница между "Нет" "и" == Нет "

0 голосов
/ 23 февраля 2020

Добро пожаловать на SO.

Возможно, вы забыли вернуть значение, когда определили 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

Таким образом, теперь мы возвращаем int вместо NoneType, и поэтому сравнение P1 ()> P2 должно работать .

...