Проблемы с условием while или циклом условий (новичок)

#python #while-loop

#python #цикл while

Вопрос:

у меня возникли некоторые проблемы с пониманием того, почему мой цикл while / or не прерывается после выполнения второго условия

 ## Guess the word game
import random
secret_word = "computer"
guess = ""
vclueinput, vclueletter , vcluepos = "", "", ""
vtries, vlimit = 0, 5
while guess != secret_word or vlimit > 0: ## I've also tried with vlimit != 0 and fliping the condition's order
    print("You have "   str(vlimit)   " guesses left")
    guess = input("Guess the word: ")
    if guess != secret_word and vlimit > 0:
        vtries  = 1
        vlimit -= 1
        vclueinput = input("Wrong! Do you want a clue? [Y/N]: ")
        if vclueinput == "Y" or vclueinput == "y":
            vcluepos = random.randint(0, int(len(secret_word)))
            vclueletter = secret_word[vcluepos]
            print((vcluepos) * "_"   vclueletter   ((int(len(secret_word))) - vcluepos - 1) * "_")
            print("")
        elif vclueinput == "N" or vclueinput == "n":
            print("")
        else:
            print("error")
            print("")
    elif guess == secret_word:
        print("Correct! The secret word is: "   secret_word )
        print("It took you "   str(vtries)   " guesses")
    elif vlimit <= 0:
        print("You are out of Guesses")
  

Как вы можете видеть, у меня есть счетчик уменьшения (vlimit), который может тормозить цикл while, как только он достигает 0, по какой-то причине цикл прерывается, guess = secret_word но не тогда, когда vlimit = 0 он просто идет

 print("You have "   str(vlimit)   " guesses left") ##vlimit being 0
guess = input("Guess the word: ")
print("You are out of Guesses")
  

Я надеюсь, что вы сможете мне помочь

Ответ №1:

Если вы используете or , только одно из условий должно быть истинным для продолжения цикла.
Если вы хотите прервать цикл, если одно условие становится ложным, используйте and . Нравится
while guess != secret_word and vlimit > 0:

Комментарии:

1. Привет! спасибо за ваш ответ! в этом случае я хочу, чтобы цикл прерывался, если выполняются либо условия, а не оба, в этом случае цикл прерывается только при выполнении первого условия, но если выполняется второе условие, цикл не прерывается

2. Этот подход делает именно то, что вы просите. Если какое-либо условие становится истинным, цикл прерывается

Ответ №2:

Кажется, вы можете добавить два break оператора в свои коды, чтобы вы могли прервать цикл, если пользователь угадает правильно или когда его попытки достигнут предела, он выйдет.

 ## Guess the word game
import random
secret_word = "computer"
guess = ""
vclueinput, vclueletter , vcluepos = "", "", ""
vtries, vlimit = 0, 5
while guess != secret_word or vlimit > 0: ## I've also tried with vlimit != 0 and fliping the condition's order
    print("You have "   str(vlimit)   " guesses left")
    guess = input("Guess the word: ")
    if guess != secret_word and vlimit > 0:
        vtries  = 1
        vlimit -= 1
        vclueinput = input("Wrong! Do you want a clue? [Y/N]: ")
        if vclueinput == "Y" or vclueinput == "y":
            vcluepos = random.randint(0, int(len(secret_word)))
            vclueletter = secret_word[vcluepos]
            print((vcluepos) * "_"   vclueletter   ((int(len(secret_word))) - vcluepos - 1) * "_")
            print("")
        elif vclueinput == "N" or vclueinput == "n":
            print("")
        else:
            print("error")
            print("")
    elif guess == secret_word:
        print("Correct! The secret word is: "   secret_word )
        print("It took you "   str(vtries)   " guesses")
        break
    elif vlimit <= 0:
        print("You are out of Guesses")
        break
  

Два break оператора находятся в последних двух elif операторах.

Надеюсь, вам понравится. Получайте удовольствие 🙂

Комментарии:

1. Большое вам спасибо!, я изучу break инструкции, чтобы узнать, когда и как их использовать.