So I created a simple Number guessing game to get back into the python Syntax. While creating it, I ran into the problem that I had to return self.get_guess()
instead of just calling it from the method itself recursively.
So my question is, why I need to return the function.
The method I am referring too:
def get_guess(self):
str_guess = input(
f'Please enter a number between {self.minimum} and {self.maximum}: ')
if self.validate_guess(str_guess):
return int(str_guess)
else:
print(
'Invalid guess, please enter an integer and a number in the given range')
return self.get_guess()
How I call it:
def play(self):
while True:
self.number_of_guesses += 1
guess = self.get_guess()
The complete Code for better understanding
class GuessNumber():
def __init__(self, correct_number, minimum=0, maximum=100):
self.number_of_guesses = 0
self.correct_number = correct_number
self.minimum = minimum
self.maximum = maximum
def get_guess(self):
str_guess = input(
f'Please enter a number between {self.minimum} and {self.maximum}: ')
if self.validate_guess(str_guess):
return int(str_guess)
else:
print(
'Invalid guess, please enter an integer and a number in the given range')
return self.get_guess()
def validate_guess(self, str_number):
try:
guess = int(str_number)
except:
return False
return self.minimum <= guess <= self.maximum
def play(self):
while True:
self.number_of_guesses += 1
guess = self.get_guess()
if guess < self.correct_number:
print('Your guess was under.')
elif guess > self.correct_number:
print('Your guess was over.')
else:
break
print(
f'You guessed the correct number in {self.number_of_guesses} guesses')
guess_game = GuessNumber(correct_number=33, minimum=0, maximum=100)
guess_game.play()
The method get_guess
gets called in play()
It also works without returning the function call as long as I don't hit an Exception by f.e. typing in a letter as a string.
As soon as I type in a String and I don't return the function I get the following error:
TypeError: '<' not supported between instances of 'NoneType' and 'int'
.
So it seems like the new input doesn't get stored somehow
Thank you for your help!