Как вернуться к началу цикла - PullRequest
0 голосов
/ 04 ноября 2019

Проблема: создание программы, которая позволяет пользователю угадывать число, сгенерированное компьютером. У игрока есть 5 попыток, и если он угадает, программа заканчивается.

Я сделал эту программу двумя способами.

первый путь

import random  
import sys  

def computer_number () :
  return random.randint (1, 20) 

def user_number () :
  return int (input ("Number: "))

def number_verification () :
  w_ans = 0  # counts the number of wrong ans..
  t = 0  # counts the number of turns so far...
  while True :
    cpu_number = computer_number ()
    print (cpu_number)
    player_number = user_number ()
    if cpu_number == player_number :
      print ("Right guess.")
      sys.exit ()  # program ends when user guesses right
    else:
      w_ans += 1
      t += 1
      print ("Wrong answer.", 5 - t, " turns left.")
      if t > 4 :
        print ("Maximum tries exceded.")
        sys.exit ()
  return w_ans, t

number_verification ()

второй путь

import sys
import random

def number_validation (cpu_number, player_number) :
    w_ans = 0 
    t = 0 
    while t < 5 :
        if cpu_number == player_number :
            print ("OK")
            sys.exit ()
        else :
            w_ans += 1
            t += 1
            print ("Wrong number", 5 - t, " turns left.")
            if t > 4 :
                print ("Maximum tries exceded.")
                sys.exit ()


cpu_number = random.randint (1, 20)
print (cpu_number)
player_number = int (input ("Number: "))
print (number_validation (cpu_number, player_number))

По сути, я не понимаю, это фактцикл while структурирован одинаково в двух моих программах. Однако во второй программе, если я ввожу неправильное число, я получаю следующий вывод:

1
Number: 9
Wrong number 4  turns left.
Wrong number 3  turns left.
Wrong number 2  turns left.
Wrong number 1  turns left.
Wrong number 0  turns left.
Maximum tries exceded.


Почему мои две программы ведут себя по-разному.

Ответы [ 2 ]

0 голосов
/ 04 ноября 2019

Проблема с размещением ввода. Ваша вторая функция принимает один вход и выполняет цикл while с ним. Вам нужно поместить вход в цикл while:


import sys
import random

def number_validation (cpu_number) :
    w_ans = 0
    t = 0
    while t < 5 :
        player_number = int (input ("Number: "))
        if cpu_number == player_number :
            print ("OK")
            sys.exit ()
        else :
            w_ans += 1
            t += 1
            print ("Wrong number", 5 - t, " turns left.")
            if t > 4 :
                print ("Maximum tries exceded.")
                sys.exit ()


cpu_number = random.randint (1, 20)
print (cpu_number)
number_validation (cpu_number)

0 голосов
/ 04 ноября 2019

Это потому, что вы получаете ввод от пользователя каждый раз в первом цикле while здесь:

while True :
  cpu_number = computer_number ()
  print (cpu_number)
  player_number = user_number ()

, тогда как во втором цикле while вы просто получаете его только один раз за пределами whileloop

cpu_number = random.randint (1, 20)
print (cpu_number)
player_number = int (input ("Number: "))
print (number_validation (cpu_number, player_number))

Просто добавьте эту строку кода внутри себя while, чтобы она работала так же, как ваш первый код.

player_number = int (input ("Number: "))

Совет: используйте отладчик, чтобы отследить такую ​​путаницу,

...