#python #python-3.x #function #variables
#python #python-3.x #функция #переменные
Вопрос:
Я новичок в python, и я работаю над созданием игры, подобной монополии, и работаю над аспектом настроек программы, и у меня есть функция, которая запрашивает пользователя, что он хочет ввести для каждой настройки. Затем я использую другую функцию для импорта этих настроек в текстовый файл, чтобы они моглисохранить для последующего использования, а также использовать их программой в качестве настроек. Вот где возникает моя проблема, я ожидаю, что у меня будет около 15 или около того заданных вопросов, и единственный способ, которым я могу думать о том, чтобы вывести их из функции для использования в другой, а также импортировать их в глобальную область, чтобы они могли использоваться программой, — это использовать return естьдругой способ сделать это или мне просто нужно использовать return для каждой переменной
Спасибо,
# 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():
Комментарии:
1. Вы можете использовать глобальные переменные, но не должны
2. Вы должны вернуть объект, содержащий выбранные параметры конфигурации. Затем вызывающий объект
gameSettingsSetup
может решить, что с ним делать: сохранить его как глобальную переменную, распаковать в несколько глобальных переменных и т.д.
Ответ №1:
Не разделяйте переменные между используемыми методами global
; вместо этого сделайте их атрибутами объекта.
class Game:
def __init__(self):
self.questions = []
self.ai_level = 'easy'
Глобальные переменные приводят к связыванию между методами, о которых трудно рассуждать.
Сегодня вы можете понять код,
но после того, как он вырастет на несколько недель, это будет совершенно другой зверь.
Кроме того, пожалуйста, следуйте рекомендациям PEP-8 по использованию snake_case
имен методов и переменных for:
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, внесите предлагаемые изменения.
Ответ №2:
Вы могли бы сделать
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
словарь тем функциям, которые в нем нуждаются, а также легко сохранить все это на диск.
Ответ №3:
numPlayers = 0
def gameSettingsSetup():
global numPlayers
numPlayers = ...
С помощью global
вы можете переносить глобальные переменные в функцию и изменять их.