【问题标题】:Accessing returned values from a function, by another function通过另一个函数访问一个函数的返回值
【发布时间】:2016-09-02 11:25:39
【问题描述】:

总的来说,我对编程有点陌生,刚刚开始真正接触 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()

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

有没有办法以某种方式缩短处理时间?

此外,我对代码本身的每个注释(可读性、功能使用、长度)都很满意。我知道可能通过使用列表理解可以使这段代码更短,但我还没有真正看到这个领域的机会。

非常感谢您的帮助!

KiliBio

【问题讨论】:

    标签: python function return


    【解决方案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)
    

    【讨论】:

      【解决方案2】:

      你几乎在那里。您可以删除所有全局变量,然后将每个函数返回的值存储到局部变量中,然后将它们传递给新函数。

      我在下面所做的唯一其他更改是:

      否则你看起来不错。

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

      【讨论】:

        猜你喜欢
        • 2011-07-14
        • 2010-09-15
        • 1970-01-01
        • 2012-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-26
        • 1970-01-01
        相关资源
        最近更新 更多