Моя простая игра на питоне не работает, пожалуйста, определите мои ошибки - PullRequest
0 голосов
/ 31 октября 2019
from random import randint
import sys
l2= ["Rock", "Paper", "Scissors"]

computer = l2[randint(0,2)]
wins = 0
losses = 0

player = False

while player == False:
    player = input("Rock," "Paper," "Scissors")
    if player == computer:
        print("Tie")    
    elif player == "Rock":
        if computer == "Paper":
            print("You lose")
        else:
            print("You win Congrats")
    elif player == "Paper":
        if computer == "Scissors":
            print("You lose")
        else:
            print("You win Congrats")    
    elif player == "Scissors":
        if computer == "Rock":
            print("Try again")
        else:
            print("You won")
    elif player == "Rock":
        if computer == "Scissors":
            print("You won")
    elif player == "Paper":
        if computer == "Rock":
            print("You won")
    elif player == "Scissors":
        if computer == "Paper":
            print("You won")
    else:
        print("That is not a valid play Game Over for you")
    player = False
    computer = l2[randint(0,2)] 

Мой код по какой-то причине не запускается, и на терминале он показывает только оператор else. Я не знаю, что я сделал не так. Пожалуйста, помогите мне, начинающему изучать Python и сделать несколько простых проектов для начала.

Ответы [ 3 ]

3 голосов
/ 31 октября 2019

Прежде всего, вы не должны добавлять теги python 2.x и python 3.x к одному и тому же вопросу. Для простоты я попробовал ваш код на 3.x, и он частично работает. Во-вторых, опишите вашу проблему. Не просто пишите "не будет бегать по какой-то причине". В-третьих, опишите, чего вы хотите достичь. Я сделаю это для вас в качестве примера.

Ваша игра работает следующим образом:

  1. Определите, что компьютер делает (работает)

  2. Спросите, что делает игрок (работает частично)

  3. Сравните действия игрока и компьютера и результат печати (не работает)

  4. Начните с 1 (не работает)

Ваша первая проблема - это цикл while, вы должны сделать что-то вроде этого:

while True:

Почему? Вы хотите бесконечный цикл, только если игрок вводит неправильное действие, а затем вы хотите принудительно завершить цикл, вы делаете это с помощью оператора «break».

Ваша вторая проблема - вы используете слишком многоконструкции if-else вам не нужно так много для обработки всех случаев. Вот мой рабочий код Python 3:

from random import randint
import sys

l2 = ["Rock", "Paper", "Scissors"]

computer = None
player = None
wins = 0
losses = 0
ties = 0

def win():
    global wins
    wins += 1 
    print("You win")

def loss():
    global losses
    losses += 1
    print("You lose")

def tie():
    global ties
    ties += 1
    print("Game ended with a tie")

while True:
    # determine computer action
    computer = l2[randint(0,2)]
    player = input("Choose your action. Possible values are Rock, Paper or Scissors.\n")
    if player not in l2:
        print("Invalid choice, game will end now.")
        print("You won {0} games and lost {1} games, {2} game(s) ended with a tie.".format(wins, losses, ties))
        # ending the loop
        break
    if player == computer:
        tie()
    elif player == "Rock":
        if computer == "Paper":
            win()
        else:
            loss()
    elif player == "Paper":
        if computer == "Scissors":
            loss()
        else:
            win()   
    elif player == "Scissors":
        if computer == "Rock":
            loss()
        else:
            win()

Если у вас есть какие-либо вопросы, задавайте.

Редактировать: Вам также следует подумать о перемещении функций и основного цикла в свои собственные (игра), тогда вам не нужен уродливый «глобальный» оператор для доступа к переменным.

1 голос
/ 31 октября 2019

Глядя на ваш код, примерно половина ваших случаев не работает. Что не так с вашим кодом? Код работает и функционирует. Вы можете исключить половину своих дел, потому что они никогда не будут выполнены. Если и elif являются последовательными. Если вы все еще думаете, что ваш код не работает, отлаживайте медленно в каждом конкретном случае. Например, установите для компьютера постоянную и протестируйте все случаи.

Я скопировал, вставил ваш код, и он работал нормально, по крайней мере, для видимой функции. Удаление ненужного элифа:

from random import randint
import sys
l2= ["Rock", "Paper", "Scissors"]

computer = l2[randint(0,2)] 

wins = 0
losses = 0

player = False

while player == False:
    player = input("Rock,Paper,Scissors: ") #clean up the query
    print("Computer had ",computer) #You use this to debug to make sure the logic is working. 
    print("You entered ",player) # another print to make it look nicer
    if player == computer:
        print("Tie")    
    elif player == "Rock":
        if computer == "Paper":
            print("You lose")
        else:
            print("You win Congrats")
    elif player == "Paper":
        if computer == "Scissors":
            print("You lose")
        else:
            print("You win Congrats")    
    elif player == "Scissors":
        if computer == "Rock":
            print("Try again")
        else:
            print("You won")
    else:
        print("That is not a valid play Game Over for you")
    player = False
    computer = l2[randint(0,2)] 

Логика работает просто отлично. Удачи в добавлении остальных функций в вашу игру.

Я бы порекомендовал попробовать использовать upper (), чтобы уменьшить количество ошибок при опечатках, а также, возможно, команду выхода из строки. Для функции выигрыша / проигрыша, которую вы, кажется, хотите добавить, просто сделайте флаг, который добавляет к числу выигрыша / проигрыша. Вы также можете добавить другие «команды» в вашу игру с большим количеством других случаев. Удачи и удачи.

0 голосов
/ 05 ноября 2019

У меня также есть игра с ножницами из каменной бумаги

Вот рабочий код:

import random
computer = random.choice(["rock", "paper", "scissors"])
player = input("What do you choose?")
player = player.lower()
print(f"Computer picks {computer} and Player picks {player}")
if computer == player:
    print('Game is a tie, play again!')
if player == "paper":
  if computer == "rock":
    print('Player wins!')
  if computer == "scissors":
    print('Computer wins!')
if player == "rock":
  if computer == "paper":
    print('Computer wins!')
  if computer == "scissors":
    print('Player wins!')
if player == "scissors":
  if computer == "rock":
    print('Computer wins!')
  if computer == "paper":
    print('Player wins!')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...