简体   繁体   中英

How to go back to the start of the loop

Problem: Creating a program which lets the user guess the number generated by computer. The player has 5 tries and if he guesses wrong the program ends.

I did this program in 2 ways.

first way

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 ()

second way

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))

Basicaly what i dont understand is the fact the the while loop is structered identically in my two programs. However in the second program if i type a wrong number i get the following output.

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.


Why are my two programs behavoring differently.

That is because you get the input from the user everytime in the first while loop here:

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

whereas in the second while loop, you just get it only once outside the while loop

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

Just add this line of code inside you while to make it work just like your first code.

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

Tip: Please use the debugger to traceback such confusion.

The issue is with the placing of the input. Your second function takes in one input and does the while loop with it. You need to place the input in the while loop:


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)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM