通过另一个函数访问一个函数的返回值 [英] Accessing returned values from a function, by another function

查看:180
本文介绍了通过另一个函数访问一个函数的返回值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一般对编程还是有点陌生​​,刚开始真正接触python。
而且我正在做一个数字猜测器项目。

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

我在编写该程序时遇到的一个问题是,如果不将每个变量重新定义为全局变量,就无法执行该程序。仅仅从一个函数返回值,我无法访问例如第二个从range_function返回的变量upper_range_cut

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.

所以谢谢你的帮助!

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:

  • Breaking out of the evaluation loop if the answer is guessed correctly.
  • Printing a message if no guess is found in the given time. See: Else clause on Python while statement
  • The bottom two lines allow the script to be run from the command line. See: What does if __name__ == "__main__": do?

否则,您看起来不错。

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

这篇关于通过另一个函数访问一个函数的返回值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆