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

问题描述 投票:5回答:2

我对一般的编程还挺陌生的,刚开始真正接触python.而我正在做一个数字猜测器的项目。

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()

在写的过程中,我遇到了一个问题,就是在没有将每个变量重新定义为全局变量的情况下,我无法执行这个程序。仅仅通过返回一个函数的值,我无法访问例如第二个返回的变量 upper_range_cut,从 range_function

它有办法处理得短一些吗?

另外我对代码本身的每一个注意点(可读性、函数使用、长度)都很满意。我知道也许可以通过使用list comprehension让这段代码变得更短,但我还没有真正的眼光去看到这方面的机会。

所以谢谢大家的帮助

KiliBio

python function return access
2个回答
3
投票

你已经差不多了。你可以删除所有的globals,然后只需将每个函数返回的值存储到本地变量中,并将它们传递给新函数。

我在下面做的唯一的改动是。

否则,你就会很顺利。

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()

1
投票

你不需要定义 global. 你可以将你从函数中返回的值分配给变量。

一个简单的例子。

def add(a, b):
    """This function returns the sum of two numbers"""
    return a + b

现在在你的控制台中,你可以做如下操作

# print the return
>>> print(add(2, 3))
5

# assign it to a variable
>>> c = add(2, 3)
>>> c
5

在你的 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)
© www.soinside.com 2019 - 2024. All rights reserved.