Reputation: 41
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.
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))
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
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
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