Пока цикл работает слишком много раз? - PullRequest
0 голосов
/ 28 июня 2019

РЕДАКТИРОВАТЬ: я понял, это была действительно очевидная ошибка (я использовал winLoseDraw () вместо переменной, которую я назначил ему ...)

Я сделал этот код как вызов для созданияигра рок-бумага-ножницы без использования каких-либо утверждений.По какой-то причине циклы while не работают (хотя я использовал этот тип кода несколько раз в C ++).

По сути, если все идет хорошо, программа делает это: создает массив из всех возможныхкомбинации ([компьютер выигрывает] [компьютер проигрывает] [рисует]), массив
1. получает случайное число для компьютера (может быть 0, 1, 2 для камня, бумаги, ножниц).
2. попросите игрока ввести камень, бумагу или ножницы.
3. создать массив [компьютер, игрок].
4. проверить, кто победит.

Я пробовал печатать, и хотя он находит правильную комбинацию, по какой-то причине цикл while в winLoseDraw () запускается три раза.

import random

true = True
false = False
rock = "ROCK"
paper = "PAPER"
sissors = "SISSORS"
possibleHands = [rock, paper, sissors]
possibleCombinations = [ [[paper, rock], [rock, sissors], [sissors, paper]],
                         [[sissors, rock], [paper, sissors], [rock, paper]],
                         [[rock, rock], [sissors, sissors], [paper, paper]]
                         ]
results = ['WIN', 'LOST', 'DRAWED']

def getRandomHandComp():
    x = random.randint(0, 2)
    handComp = possibleHands[x]
    return handComp

def getHandPlayer():
    x = input("please choose: 0 = rock, 1 = paper, 2 = sissors ")
    while (x != '1') and (x != '0') and (x!= '2'):
        x = input("Invalid! please choose: 0 = rock, 1 = paper, 2 = sissors")
    handPlayerNum = int(x)
    handPlayer = possibleHands[handPlayerNum]
    return handPlayer

def winLoseDraw():
    comp = getRandomHandComp()
    player = getHandPlayer()
    match = [comp, player]
    found = false
    number1 = 0
    number2 = 0
    while (not found) and (number1 < 3):
        while (not found) and (number2 < 3):
            found = possibleCombinations[number1][number2] == match
            print(match)
            print(possibleCombinations[number1][number2])
            print(found)
            number2 += 1
        print(found)
        number2 = 0
        number1 += 1
    number1 -= 1
    result = results[number1]
    return [result, comp, player]

gameOver = false
trueFalse = [false, true]
while not gameOver:
    result = winLoseDraw()[0]
    print('COMPUTER PLAYED ' + winLoseDraw()[1] + '!' + 'YOU PLAYED ' + winLoseDraw()[2] + '!')
    print('YOU ' + result + '!')
    x = input("Wanna continue? 0 = yes 1 = no")
    while x != '1' and x != '0':
        x = input("INVALID INPUT! Wanna continue? 0 = yes 1 = no")
    gameOver = trueFalse[int(x)]

Вот вывод, который я получил:

please choose: 0 = rock, 1 = paper, 2 = sissors 1

['ROCK', 'PAPER']

['PAPER', 'ROCK']

False

['ROCK', 'PAPER']

['ROCK', 'SISSORS']

False

['ROCK', 'PAPER']

['SISSORS', 'PAPER']

False

False

['ROCK', 'PAPER']

['SISSORS', 'ROCK']

False

['ROCK', 'PAPER']

['PAPER', 'SISSORS']

False

['ROCK', 'PAPER']

['ROCK', 'PAPER']

True

True

please choose: 0 = rock, 1 = paper, 2 = sissors 1

['SISSORS', 'PAPER']

['PAPER', 'ROCK']

False

['SISSORS', 'PAPER']

['ROCK', 'SISSORS']

False

['SISSORS', 'PAPER']

['SISSORS', 'PAPER']

True

True

please choose: 0 = rock, 1 = paper, 2 = sissors 1

['ROCK', 'PAPER']

['PAPER', 'ROCK']

False

['ROCK', 'PAPER']

['ROCK', 'SISSORS']

False

['ROCK', 'PAPER']

['SISSORS', 'PAPER']

False

False

['ROCK', 'PAPER']

['SISSORS', 'ROCK']

False

['ROCK', 'PAPER']

['PAPER', 'SISSORS']

False

['ROCK', 'PAPER']

['ROCK', 'PAPER']

True

True

COMPUTER PLAYED SISSORS!YOU PLAYED PAPER!

YOU LOST!

Wanna continue? 0 = yes 1 = no

Я подозреваю, что что-то не так со случайным (я уже использовал этот вид кода на C ++, и он работал как положено, если я помню), но я не совсем уверен

Большое спасибо!

...