简体   繁体   English

通过另一个函数访问一个函数的返回值

[英]Accessing returned values from a function, by another function

I'm kinda new to programming in general, just started to really get into python.我对编程有点陌生,刚刚开始真正进入 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 eg the second returned variable upper_range_cut from the range_function仅通过从一个函数返回值,我无法访问例如从 range_function 返回的第二个变量 upper_range_cut

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奇力生物

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 .您不需要定义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.在您的main函数中,您需要将不同函数返回的值分配给您可以进一步传递给其他函数的变量。

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)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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