#python
#python
Вопрос:
Я начинающий программист, и я пытаюсь создать игру в кости для 2 игроков. Я изначально установил значение для player_a и player_b равным false . Но когда я пытаюсь объединить их вместе в цикле while в одной строке, код, похоже, не работает. Вот код, мне все еще нужно поработать над парой вещей, так что…
import random
import time
player_a = input("Player1, please type your name:")
time.sleep(1)
player_b = input("Player2, please type your name:")
time.sleep(1)
print("Welcome to Dice Roller", player_a, "and", player_b)
score_a = 0
score_b = 0
roll_a = False
roll_b = False
while roll_a and roll_b is False: #what is the problem with this line because without this, i'm
not ablee to reset the turn and the end
ans_a = input("Type roll to roll the dice:")
if ans_a == "roll":
roll_a = (random.randint(1, 6))
time.sleep(1)
print(player_a, "has rolled", roll_a)
else:
print("Please check your spelling")
time.sleep(1)
ans_b = input("Your turn to roll, type roll to roll the dice:")
if ans_b == "roll":
roll_b = (random.randint(1, 6))
time.sleep(1)
print(player_b, "has rolled", roll_b)
if roll_a == roll_b:
time.sleep(2)
print("Tie")
if roll_a > roll_b:
score_a = roll_a - roll_b
print(player_a, "has scored", score_a, "points")
if roll_b > roll_a:
score_b = roll_b - roll_a
print(player_b, "has scored", score_b, "points")
break
roll_a = False
roll_b = False
Комментарии:
1. Вам нужно переписать условие для цикла while:
while not all(roll_a, roll_b):
или, альтернативно, это также можно сделать какwhile not roll_a and not roll_b:
, но первая версия более чистая.2. @pavel Эти два логически не эквивалентны.
3. @kaya3, да, спасибо…. Да, первая версия не будет работать.
Ответ №1:
Вы написали:
while roll_a and roll_b is False:
это то же самое, что и все следующие:
while (roll_a is True) and (roll_b is False):
while roll_a is True and roll_b is False:
while (roll_a) and (not roll_b):
while roll_a and not roll_b:
Вы хотите написать любое из следующих (все они эквивалентны):
while (roll_a is False) and (roll_b is False):
while roll_a is False and roll_b is False:
while (not roll_a) and (not roll_b):
while not roll_a and not roll_b:
Комментарии:
1. О, верно, я не знаю, почему я не потрудился записать это так, ха-ха. В любом случае спасибо за помощь…
Ответ №2:
Используйте следующее
while roll_a is False and roll_b is False:
Ответ №3:
Ваш while loop
кажется нормальным, но проблемы возникают в roll_a
roll_b
переменных и. Вы инициализировали эти две переменные, для False
которых boolean
тип, но позже вы присваиваете этим переменным номера внутри while
цикла !! . Вы могли бы хранить оценки из входящих score_a
и score_b
переменных.
Если концепция заключается в том, что игра будет продолжаться до тех пор, пока кто-нибудь не выиграет, см. Приведенный Ниже код.
import random
import time
player_a = input("Player1, please type your name:")
time.sleep(1)
player_b = input("Player2, please type your name:")
time.sleep(1)
print("Welcome to Dice Roller", player_a, "and", player_b)
score_a = 0
score_b = 0
roll_a = False
roll_b = False
while roll_a is False and roll_b is False:
ans_a = input("{}, type roll to roll the dice:".format(player_a))
if ans_a == "roll":
score_a = (random.randint(1, 6))
time.sleep(1)
print(player_a, "has rolled", score_a)
else:
print("Please check your spelling")
time.sleep(1)
ans_b = input("{}, your turn to roll, type roll to roll the dice:".format(player_b))
if ans_b == "roll":
score_b = (random.randint(1, 6))
time.sleep(1)
print(player_b, "has rolled", score_b)
if score_a == score_b:
time.sleep(2)
print("Tie!!..")
if score_a > score_b:
score_a = score_a - score_b
print(player_a, "has won with ", score_a, "points")
roll_a = True
if score_b > score_a:
score_b = score_b - score_a
print(player_b, "has won with ", score_b, "points")
roll_b = True
Ответ №4:
Я не знаю, почему никто не дал этот простой ответ:
while roll_a and roll_b is False:
просто заключите условия в, ()
чтобы сделать их одним объектом, подобным этому:
while (roll_a and roll_b) is False:
или еще лучше
while not (roll_a and roll_b):