РЕДАКТИРОВАТЬ: я понял, это была действительно очевидная ошибка (я использовал 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 ++, и он работал как положено, если я помню), но я не совсем уверен
Большое спасибо!