FCPORTO1893
FCPORTO1893

Reputation: 41

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.

Upvotes: 0

Views: 70

Answers (2)

Mahesh Kumaran
Mahesh Kumaran

Reputation: 907

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.

Upvotes: 1

Prayson W. Daniel
Prayson W. Daniel

Reputation: 15568

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)

Upvotes: 0

Related Questions