Игра в угадайку с использованием цикла while

#python #python-3.x

#python #python-3.x

Вопрос:

 import random

x=random.randint(1,9)


print(x)

guess=2

print('You have {} chance to guess the number'.format(guess 1))

y=int(input('Your guess: '))

while x!=y:
    print('Guess left: {}'.format(guess))
    y=int(input('Your guess: '))
    guess-=1
    
    if guess==0:
        print('Try again. The number was {}'.format(x))
        break
    
print('Well done')
  

Здравствуйте, когда я делаю x не равным y намеренно 3 раза или делаю x не равным y намеренно 2 раза и делаю x равным y в-третьих, я получаю сообщения «Попробуйте еще раз ..» и «Хорошо сделано» одновременно. Как я могу это исправить? Пожалуйста, не используйте while true или специальные функции, спасибо.

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

1. Что вы хотите, чтобы это делало? Когда цикл while заканчивается, 'Well Done' всегда будет выводиться.

2. Я не хочу, чтобы программа печатала хорошо выполненную, если все догадки неверны.

Ответ №1:

Попробуйте:


 import random

x=random.randint(1,9)
print(x)

guess=3

print(f'You have {guess} chance to guess the number')

flag = 1
while (guess and flag):
    y=int(input('Your guess: '))

    guess-=1
    print(f'Guess left: {guess}')
    
    if guess==0 and (x!=y): 
        print(f'Try again. The number was {x}')
        
    if (x==y):
        print('Well done')
        flag = 0
  

 6
You have 3 chance to guess the number
Your guess: 1
Guess left: 2
Your guess: 2
Guess left: 1
Your guess: 3
Guess left: 0
Try again. The number was 6
  

 6
You have 3 chance to guess the number
Your guess: 6
Guess left: 2
Well done
  

 3
You have 3 chance to guess the number
Your guess: 1
Guess left: 2
Your guess: 2
Guess left: 1
Your guess: 3
Guess left: 0
Well done
  

Редактировать:

 import random

x=random.randint(1,9)


print(x)

guess=2

print('You have {} chance to guess the number'.format(guess 1))

y=int(input('Your guess: '))


while x!=y:
    print('Guess left: {}'.format(guess))
    y=int(input('Your guess: '))
    guess-=1
    
    if guess==0 and (x!=y): # <--here
        print('Try again. The number was {}'.format(x))
        break
if (x==y):   # <-- here
    print('Well done')
  

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

1. Когда вы выполняете x! = y первые два шага и x = y на третьем, вы все равно получаете два сообщения одновременно.

2. Спасибо, но есть ли какое-либо более базовое решение, потому что я предполагаю, что здесь мы используем while true.

3. @blitz: проверьте отредактированную версию. Я только что добавил несколько условий в ваш код.

4. Да, спасибо, это лучше и работает, но мы уже написали x! = y рядом с циклом while, почему мы должны повторять это снова рядом с условием if в цикле while?

5. на самом деле предположим, что это будет ваш последний шанс угадать, и вы угадаете это правильно, но это даст вам Try again. The number was 5 Well done выход из цикла только тогда, когда заданное вами число совпадает с x . Поскольку вы сравниваете предыдущее введенное значение с x в цикле while. Но внутри него вы указываете текущее введенное значение.

Ответ №2:

Я думаю, я понимаю, в чем была ваша проблема. Все, что вам нужно сделать, это поместить печать (‘Молодец!’) в оператор if или использовать else.

 import random

x = random.randint(1, 9)

print(x)

guess = 2

print('You have {} chance to guess the number'.format(guess   1))

y = int(input('Your guess: '))

while x != y:
    print('Guess left: {}'.format(guess))
    y = int(input('Your guess: '))
    guess -= 1

    if guess == 0:
        print('Try again. The number was {}'.format(x))
        break
if x==y:
    print('Well done')
  

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

1. Когда вы выполняете x! = y первые два шага и x = y на третьем, вы все равно получаете два сообщения одновременно.