Как переместить несколько переменных из функции в глобальную область? - PullRequest
1 голос
/ 11 апреля 2019

Я новичок в python, и я работаю над созданием игры, подобной монополии, и я работаю над аспектом настроек программы, и у меня есть функция, которая спрашивает пользователя, что они хотят вставить для каждого параметра, которым я являюсьзатем с помощью другой функции импортируйте эти настройки в текстовый файл, чтобы их можно было сохранить для последующего использования, а также чтобы программа использовала их в качестве настроек.Вот где возникает моя проблема. Я предполагаю, что у меня будет около 15 или около того заданных вопросов, и я могу думать только о том, чтобы вывести их из функции для использования в другой, а также импортировать их в глобальную область видимости, чтобы их можно было использовать.программа использует возврат, есть ли другой способ сделать это, или мне просто нужно использовать возврат для каждой переменной

Спасибо,

# Settings file, if user chooses to run setup this is all the setup 
questions
def gameSettingsSetup():
   print("Lets setup")
   numPlayers = int(input("How many real players are playing: "))
   numAIplayers = int(input("How many AI players will be playing?: 
   "))
   AILevel = input("What AI difficulty level would you like?: ") 

# Game settings all the main game settings

# sends over the settings into the text file
def gameSettingsSave():

Ответы [ 3 ]

2 голосов
/ 11 апреля 2019

Не делить переменные между методами, используя global; вместо этого сделайте их объектными атрибутами.

class Game:

    def __init__(self):
        self.questions = []
        self.ai_level = 'easy'

Глобальные значения приводят к объединению методов, о которых трудно рассуждать. Сегодня вы можете понять код, но после того, как он вырастет на несколько недель, это будет совсем другой зверь.

Также, пожалуйста, следуйте советам PEP-8 по использованию snake_case для имен методов и переменных:

    def game_settings_setup(self):
        print("Let's setup.")
        self.num_players = int(...)
        self.num_ai_players = int(...)
        self.ai_level = ...

Сделай себе одолжение. Запустите $ pip install flake8, а затем $ flake8 *.py, чтобы получить подсказки о написанном вами коде. Следуйте совету flake8, внесите необходимые изменения.

1 голос
/ 11 апреля 2019

Вы могли бы сделать

return numPlayers, numAIplayers, AILevel

но может быть проще сохранить все ваши настройки в словаре:

def gameSettingsSetup():
    print("Lets setup")
    settings = {}
    settings["numPlayers"] = int(input("How many real players are playing: "))
    setting["numAIplayers"] = int(input("How many AI players will be playing?: "))
    settings["AILevel"] = input("What AI difficulty level would you like?: ")
    return settings

Затем вы можете передать словарь settings любой функции, которая потребуется, а также легко сохранить ее на диск.

0 голосов
/ 11 апреля 2019
numPlayers = 0
def gameSettingsSetup():
    global numPlayers
    numPlayers = ...

Используя global, вы можете извлекать глобальные переменные в функцию и изменять их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...