【问题标题】:Using the value of a variable in multiple functions在多个函数中使用变量的值
【发布时间】:2021-10-18 20:40:35
【问题描述】:

我正在编写一个简单的猜数程序,我想为代码的不同部分使用函数。第一个函数决定用户猜测的范围。我想将 user_input 的值携带到下一个函数中。我知道的唯一方法是使 user_input 成为全局变量。只是想知道有没有比将变量设为全局更好的方法来实现这一点?

def decide_range():
    flag = True
    while flag:
        global user_input
        user_input = input("Enter a value for range ")
        if user_input.isdigit():
            user_input = int(user_input)
            if user_input < 2:
                print("Number must be 2 or greater to play this game")
                continue
            print(f"You have entered {user_input}")


            flag = False

        else:
            print("Not a valid integer")

def guess_Number():
    print("Guess a number between 1 and",user_input)

【问题讨论】:

  • 通常对于“我应该使用全局变量”的问题,答案通常是否定的,你不应该......(但你可以)......尝试使用命名空间封装(可能写一个类具有您需要的成员和功能)
  • 比使用global 指令更好的方法是创建一个在内部保存值的对象实例。这样引用保持不变,您可以在不使用global 的情况下修改值。事实上,我有时会使用相当于 globals 的类来保存我所有的共享值。
  • 这能回答你的问题吗? Python Alternatives to Global Variables
  • 我会更改“decide_range”以返回用户的输入,然后让“guess_number”调用“decide_range”。
  • 你需要回到你的关于函数的资料,学习如何传递参数和返回值。

标签: python function scope global


【解决方案1】:

您可以让第一个函数返回 user_input 的值,然后可以将其作为值传递给第二个函数。在这种情况下,第二个函数只需要知道 user_input 作为参数。

def decide_range():
    flag = True
    user_input = 0
    while flag:
        user_input = input("Enter a value for range ")
        if user_input.isdigit():
            user_input = int(user_input)
            if user_input < 2:
                print("Number must be 2 or greater to play this game")
                continue
            print(f"You have entered {user_input}")
            flag = False
        else:
            print("Not a valid integer")
    return user_input

def guess_Number(user_input):
    print("Guess a number between 1 and", user_input)

number = decide_range()
guess_Number(number)

【讨论】:

    【解决方案2】:

    有一个更好的方法。 . .创建一个类

    class decide_range(object):
        def __init__(self):
            flag = True
            while flag:
                self.user_input = input("Enter a value for range ")
                if self.user_input.isdigit():
                    self.user_input = int(self.user_input)
                    if self.user_input < 2:
                        print("Number must be 2 or greater to play this game")
                        continue
                    print(f"You have entered {self.user_input}")
                    flag = False
                else:
                    print("Not a valid integer")
    
        def guess_Number(self):
            print("Guess a number between 1 and", self.user_input)
    
    decide_range().guess_Number()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 2023-01-07
      • 1970-01-01
      • 2016-04-13
      • 1970-01-01
      • 1970-01-01
      • 2021-09-12
      相关资源
      最近更新 更多