I'm kinda new to programming in general, just started to really get into python. And I'm working on a number guesser project.
import random
def main(): # main function
print("Welcome to the number guesser game")
range_func()
max_guess_number(lower_range_cut, upper_range_cut)
evaluation(random_number, total_guesses)
def range_func(): # allows user to select a range for the number guess
print("Please select a range in which you would like to guess.")
lower_range_cut = int(input("Lower boundary limit: "))
global lower_range_cut
upper_range_cut = int(input("Upper boundary limit: "))
global upper_range_cut
random_number = random.randint(lower_range_cut,upper_range_cut)
global random_number
return lower_range_cut, upper_range_cut, random_number
def max_guess_number(low,high): # returns the total number of guesses
total_numbers = (high - low) + 1
total_guesses = 0
while (2**total_guesses) < total_numbers:
total_guesses += 1
print ("You have a total of %d guesses\n"
"for your range between %d to %d"
% (total_guesses, low, high))
global total_guesses
return total_guesses
def evaluation(random_number, total_guesses): # evaluates the users input
guess_count = 0
while guess_count < total_guesses:
user_guess = int(input("Your guess: "))
print("Your guess is: %d" % (user_guess))
if (random_number == user_guess):
print("You got it ")
break
elif user_guess > random_number:
print("Guess lower!")
guess_count += 1
else:
print("Guess higher!")
guess_count += 1
if __name__ == "__main__":
main()
One problem I've experienced while writing that, is that I wasn't able to execute this program without redefining each variables as a global variable. Just by returning the values from one function, I was not able to access e.g. the second returned variable upper_range_cut from the range_function
It there a way to handle that somehow shorter?
Also I'm happy about every note on the code itself (readability, function use, length). I know it could have made this code a lot shorter maybe by using list comprehension, but I don't really have the eye for seeing opportunities in this area yet.
So thanks for any help!
KiliBio
Simply call a function to pass the output into the second function as a parameter will use the return value in another function python.
Using a value returned from a function Instead in your first function, check_channel_number() , you can have it return user_channel_number . You can then call that function inside of delete_events() , like the following: def check_channel_number(): user_channel_number = ...
A function is an instance of the Object type. You can store the function in a variable. You can pass the function as a parameter to another function. You can return the function from a function.
You can return two things at once from any function, but you can only use one return statement. by using return x, y this returns a tuple (x, y) , which you can use in your main function.
You're pretty much there. You can remove all globals, then just store the values returned from each function to local variables, and pass them in to new functions.
The only other changes I've made below are:
Otherwise you're looking good.
import random
def main(): # main function
print("Welcome to the number guesser game")
lower, upper, rand = range_func()
total_guesses = max_guess_number(lower, upper)
evaluation(rand, total_guesses)
def range_func(): # allows user to select a range for the number guess
print("Please select a range in which you would like to guess.")
lower_range_cut = int(input("Lower boundary limit: "))
upper_range_cut = int(input("Upper boundary limit: "))
random_number = random.randint(lower_range_cut, upper_range_cut)
return lower_range_cut, upper_range_cut, random_number
def max_guess_number(low,high): # returns the total number of guesses
total_numbers = (high - low) + 1
total_guesses = 0
while (2**total_guesses) < total_numbers:
total_guesses += 1
print ("You have a total of %d guesses\n"
"for your range between %d to %d"
% (total_guesses, low, high))
return total_guesses
def evaluation(random_number, total_guesses): # evaluates the users input
guess_count = 0
while guess_count < total_guesses:
guess_count += 1
user_guess = int(input("Your guess: "))
print("Your guess is: %d" % (user_guess))
if (random_number == user_guess):
print("You got it!")
break
else:
print "Sorry, you didn't guess it in time. The answer was: %d" % random_number
if __name__ == '__main__':
main()
You don't need to define global
. You can just assign the values you are returning from a function to variable(s).
A simple example:
def add(a, b):
"""This function returns the sum of two numbers"""
return a + b
Now in your console, you could do following
# print the return
>>> print(add(2, 3))
5
# assign it to a variable
>>> c = add(2, 3)
>>> c
5
In your main
function you need to assign the values which are returned by different functions to variables which you can further pass to other functions.
def main(): # main function
print("Welcome to the number guesser game")
lower_range_cut, upper_range_cut, random_number = range_func()
total_guesses = max_guess_number(lower_range_cut, upper_range_cut)
evaluation(random_number, total_guesses)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With