Как остановить пока Loops в питоне? (я пробовал использовать перерыв) - PullRequest
0 голосов
/ 29 августа 2018

Это мой первый пост о программировании! Люди, когда я выполняю этот алгоритм (игра в угадайку), он не перестает спрашивать меня о дополнительных входных данных, даже когда я пишу «выход», который должен был быть словом выхода. Порядок "перерыв" не работает, и я не могу понять, почему. Может быть, это работает, но когда он выходит из цикла, он выполняет «startgame ()» внизу, но мне нужен этот «startgame ()» внизу, чтобы запустить игру в первый раз, так как игра внутри функция, и мне нужно вызвать ее, чтобы начать игру.

import random

def startgame():
    a = random.randint (1,10)
    cont = 0

    while True:
        b = input("Guess a number: ")
        if b == 'quit':
            break
        elif int(b) > a:
            print("Too high!")
            cont += 1
            True
        elif int(b) < a:
            print ("Too low!")
            cont += 1
            True
        elif int(b) == a:
            print ("You got it right!")
            print ('You needed ',cont,'guesses!')
            startgame()

startgame()

Есть идеи, как это решить?

Ответы [ 3 ]

0 голосов
/ 29 августа 2018

В вашем коде есть несколько мелких проблем, но на самом деле он работает, вы просто не достаточно протестировали, чтобы найти свою реальную проблему.

Вопросы:

  • строки True ничего не делают, они вам не нужны для цикла while; while оценит True сразу после него и зациклится навсегда.
  • вы смешиваете одинарные и двойные кавычки для своих строк - это становится трудно читать и сбивать с толку, поэтому вам лучше использовать один стиль, предпочтительно тот, который рекомендует PEP8. https://www.python.org/dev/peps/pep-0008/

Проблема:

  • ваш break работает просто отлично; попробуйте запустить ваш скрипт и ввести 'quit' в первом запросе, он завершится, как и ожидалось.
  • причина, по которой он не работает, заключается в том, что вы перезапускаете всю игру, снова вызывая функцию startgame после победы в игре. Это вызывает новый вложенный вызов изнутри игры (например, «Начало»), и когда игра прерывается, она заканчивается на предыдущем уровне.

Решением было бы удалить вызов на startgame() и вместо этого обернуть все это в секунду, например, так:

import random


def startgame():
    b = 0
    while b != 'quit':
        a = random.randint(1, 10)
        cont = 0

        while True:
            b = input('Guess a number: ')
            if b == 'quit':
                break
            elif int(b) > a:
                print('Too high!')
                cont += 1
            elif int(b) < a:
                print('Too low!')
                cont += 1
            elif int(b) == a:
                print('You got it right!')
                print('You needed ', cont, 'guesses!')


startgame()
0 голосов
/ 29 августа 2018

В такие моменты я обычно использую простую переменную управления и запускаю цикл с ней. Например:

right_guess=False
while not right_guess:

, а затем просто идти

if guess=right:
    right_guess=True
    break 
0 голосов
/ 29 августа 2018

просто удалите startgame () из цикла и замените его на разрыв

import random

def startgame():

    a = random.randint (1,10)
    cont = 0

    while True:
        b = input("Guess a number: ")
        if b == 'quit':
            break
        elif int(b) > a:
            print("Too high!")
            cont += 1

        elif int(b) < a:
            print ("Too low!")
            cont += 1

       elif int(b) == a:
            print ("You got it right!")
            print ('You needed ',cont,'guesses!')
            break # remove this break statement if you want to restart it again after winning  

startgame ()
...