Операторы if и elif не работают / не распознаются python - PullRequest
1 голос
/ 09 июля 2020

Я пытаюсь создать небольшую игру «Камень, ножницы, бумага», поскольку я новичок, но у меня проблемы с операторами if и elif.

import random
player_score = 0
computer_score = 0
options = ['rock', 'paper', 'scissors']

def player_choice():
    input('Rock, Paper or Scissors? ')
    return player_choice
def computer_choice():
    print(random.choice(options))
    return computer_choice

ps = print('player score: ', player_score)
cs = print('computer_score: ',computer_score)

while player_score or computer_score < 10:
    player_choice()
    computer_choice()

if player_choice == 'rock' and computer_choice == 'rock':
        print('Tie')
elif player_choice == 'rock' and computer_choice == 'paper':
        print('Computer wins')
        computer_score = computer_score + 1
        print(ps)
        print(cs)
elif player_choice == 'rock' and computer_choice == 'scissors':
        print('You win')
        player_score = player_score + 1
        print(ps)
        print(cs)

Кажется, что весь блок if / elif игнорируется, ничего не печатается и не увеличивается. Никакой ошибки не появляется, она просто игнорируется.

Ответы [ 5 ]

5 голосов
/ 09 июля 2020

Есть пара проблем с вашим кодом, и я попытаюсь решить их все.

Первая связана с именованием ваших переменных. Вы называете свои функции computer_choice и player_choice, а затем проверяете, равны ли они "rock" или другим строкам. Это вернет только False, потому что computer_choice - это функция, а не строка. Я бы рекомендовал изменить имена ваших функций на get_computer_choice() и get_player_choice()

Во-вторых, ps = print('player score: ', player_score). Я не знаю, что вы там пытаетесь делать. ps будет None, потому что print() ничего не возвращает.

В-третьих, ваши функции возвращают сами .

def my_func():
    return my_func

Вернет функция. Что вы хотите сделать для обеих выбранных вами функций, так это:

def get_player_choice():
    player_choice = input('Rock, Paper or Scissors? ')
    return player_choice

def get_computer_choice():
    computer_choice = random.choice(options) # Set computer_choice to computers choice
    print(computer_choice)
    return computer_choice

В-четвертых, под вашим while l oop вы вызываете функции, но ничего не делаете с возвратами. Измените

while player_score or computer_score < 10:
    player_choice()
    computer_choice()

на

while player_score or computer_score < 10:
    player_choice = get_player_choice()
    computer_choice = get_computer_choice()

Наконец, операторы if ... else должны иметь отступ под while l oop, иначе они никогда не будут выполнены.

0 голосов
/ 09 июля 2020

Несколько примечаний:

1. Я изменил имя ваших функций, чтобы избежать более поздней ошибки при их вызове.

2. Как предлагается в других ответах, вы должны передать переменную для хранения результата функций.

3. Это было отсутствует отступ

4. Некоторые из ваших условий были неправильными. Например, условие while: если ((player_score <10) <strong>или (computer_score <10)), даже если кто-то наберет 10 очков, игра продолжится. Мы этого не хотим, поэтому должно быть условие <code>and.

Вот решение:

import random

player_score = 0
computer_score = 0

options = ['rock', 'paper', 'scissors']

def choice_player():
    
    result_player = str((input('rock, paper or scissors? ')))
    return (result_player)

def choice_computer():
    result_computer = random.choice(options)
    return (result_computer)


#---------------------------------------------
ps = print('player score: ', player_score)
cs = print('computer_score: ',computer_score)

while ((player_score<10) and (computer_score < 10)):
    
    player_choice = choice_player()
    computer_choice = choice_computer()

    if ((player_choice == 'rock') and (computer_choice == 'rock')):
        print('Tie')
    elif ((player_choice == 'rock') and (computer_choice == 'paper')):
        print('Computer wins')
        computer_score = computer_score + 1
        print('player score: ', player_score)
        print('computer_score: ',computer_score)
    elif ((player_choice == 'rock') and (computer_choice == 'scissors')):
        print('You win')
        player_score = player_score + 1
        print('player score: ', player_score)
        print('computer_score: ',computer_score)
0 голосов
/ 09 июля 2020

Было несколько проблем с вашим кодом.

def player_choice():
    input('Rock, Paper or Scissors? ')
    return player_choice

player_choice не инициализирован. Ввод принимает пользовательский ввод, но результат нигде не сохраняется.

def get_player_choice():
    choice = input("Rock, Paper or Scissors? ")
    return choice

Та же процедура для computer_choice.

Тогда есть:

ps = print('player score: ', player_score)
cs = print('computer_score: ',computer_score)

I Предположим, вы пытались построить строку, содержащую оценки. Я предлагаю вместо этого

def print_score():
    print('player score: ', player_score)
    print('computer_score: ',computer_score)

. Затем вы можете вызвать функцию, когда захотите увидеть счет.

И, наконец, отступ был неправильным для операторов if-else. Это должно было быть в то время l oop. Теперь он просто запрашивает у пользователя ввод и генерирует выбор для компьютера в бесконечном l oop.

Вот все изменения, которые я предложил вместе:


import random
player_score = 0
computer_score = 0
options = ['rock', 'paper', 'scissors']

def get_player_choice():
    player_choice= input('Rock, Paper or Scissors? ')
    return player_choice
def get_computer_choice():
    computer_choice = random.choice(options)
    print(computer_choice)
    return computer_choice

def print_score():
    print('player score: ', player_score)
    print('computer_score: ',computer_score)

while player_score < 10  and computer_score < 10:
    player_choice = get_player_choice()
    computer_choice = get_computer_choice()

    if player_choice == 'rock' and  computer_choice == 'rock':
        print('Tie')
    elif player_choice == 'rock' and computer_choice == 'paper':
        print('Computer wins')
        computer_score = computer_score + 1
        print_score()
    elif player_choice == 'rock' and computer_choice == 'scissors':
        print('You win')
        player_score = player_score + 1
        print_score()
0 голосов
/ 09 июля 2020

Пожалуйста, проверьте 13-ю строку вашего кода. Я не мог понять, что означает ps = print(...).

0 голосов
/ 09 июля 2020

Вы должны записать возвращаемое значение ввода в переменную и вернуть эту переменную в функции player_choice.

def player_choice():
    player_choice = input('Rock, Paper or Scissors? ')
    return player_choice
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...