Как выйти из цикла while в Python?

Я должен сделать эту игру для моего комп-класса, и я не могу понять, как вырваться из этого цикла. Видите ли, я должен играть против «компьютера», бросая большие числа и наблюдая, у кого больше очков. Но я не могу понять, как "вырваться" из своей очереди и перейти в компьютерную очередь. Мне нужно "Q" (выход), чтобы сигнализировать о начале хода компьютеров, но я не знаю, как это сделать.

ans=(R)
while True:
    print('Your score is so far '+str(myScore)+'.')
    print("Would you like to roll or quit?")
    ans=input("Roll...")
    if ans=='R':
        R=random.randint(1, 8)
        print("You rolled a "+str(R)+".")
        myScore=R+myScore
    if ans=='Q':
        print("Now I'll see if I can break your score...")
        break

person Ninja    schedule 30.01.2013    source источник
comment
Использовать break так, как вы это делаете, можно, но вы должны ввести именно Q. q например не будет работать. В первой строке должно быть ans=('R')? тебе это все равно не нужно   -  person John La Rooy    schedule 30.01.2013


Ответы (4)


Несколько изменений означают, что выпадет только R или r. Любой другой персонаж уйдет

import random

while True:
    print('Your score so far is {}.'.format(myScore))
    print("Would you like to roll or quit?")
    ans = input("Roll...")
    if ans.lower() == 'r':
        R = np.random.randint(1, 8)
        print("You rolled a {}.".format(R))
        myScore = R + myScore
    else:
        print("Now I'll see if I can break your score...")
        break
person John La Rooy    schedule 30.01.2013
comment
Пожалуйста, поправьте меня, если необходимо - break посылает ложный сигнал, чтобы остановить цикл while? - person SIslam; 23.10.2015
comment
@SIslam Вроде. break останавливает цикл while, но нет «ложного сигнала»: while означает «цикл, в то время как выражение, следующее за оператором while, оценивается как True», поэтому, если то, что следует после while, является самим True, while будет зацикливаться навсегда; break означает «остановить цикл прямо сейчас» и работает с любым циклом, включая циклы while и for. - person Westcroft_to_Apse; 21.08.2016

Что бы я сделал, это запустить цикл, пока ответ не будет Q

ans=(R)
while not ans=='Q':
    print('Your score is so far '+str(myScore)+'.')
    print("Would you like to roll or quit?")
    ans=input("Roll...")
    if ans=='R':
        R=random.randint(1, 8)
        print("You rolled a "+str(R)+".")
        myScore=R+myScore
person Phil    schedule 30.01.2013

Не используйте операторы while True и break. Это плохое программирование.

Представьте, что вы пришли отлаживать чужой код и видите значение while True в строке 1, а затем вам нужно просмотреть еще 200 строк кода с 15 операторами break в нем, прочитав бесчисленное количество строк кода, чтобы каждая из них сработала. что на самом деле заставляет его добраться до разрыва. Вы хотели бы убить их... много.

Условие, которое заставляет цикл while прекращать итерацию, всегда должно быть ясно из самой строки кода цикла while без необходимости искать где-либо еще.

У Фила есть «правильное» решение, так как оно имеет четкое конечное условие прямо в самом операторе цикла while.

person Steve Todd    schedule 30.01.2019

оператор моржа (выражения присваивания добавлены в python 3.8) и while-loop-else-clause может сделать это более питоническим:

myScore = 0
while ans := input("Roll...").lower() == "r":
    # ... do something
else:
    print("Now I'll see if I can break your score...")
person DRPK    schedule 22.01.2021