Пусть логическое значение var следует в другой файл

У меня есть два файла в моей текстовой игре. Назначаемой переменной будет keep_note.

Если вы введете «Взять», логическое значение True будет назначено для have_note-001, но в следующем файле, когда if have_note_001 == True, я получаю сообщение об ошибке, говорящее, что have_note-001 не определено

If keep_note is == "Take":
    have_note_001 = True

Затем в следующем файле я хочу, чтобы это значение True переместилось в следующий файл.

If have_note_001 == True: print("This Value Is True")            
keep_paper = input("Do you want to Leave the piece of paper or Take it? > ")
if keep_paper == "Take":
     have_note_01 = True
if have_note_01 == True:
     print("You have chosen to keep the piece of paper")
     print("You leave the house with the note(" + note_001 + ")")

Это мой следующий файл

from intros.intro_001 import have_note_001
if have_note_01 == True:
    print("True")
elif have_note_01 == False:
    print("False")

В файле импорт работает. Я импортирую файл have_note_001. Это просто не передача значения True over. Кажется, он не помнит, когда вы даете ему это значение в первом файле, во втором

Как я могу перенести значение, присвоенное переменной, в другой файл при импорте?


person 16 Year Old Dev    schedule 03.09.2018    source источник
comment
Я просто вижу, что та часть, где я объясняю, что я хочу, находится в части кода. Я сожалею об этом.   -  person 16 Year Old Dev    schedule 03.09.2018
comment
Нет, как на pyCharm, форматирование в порядке, если бы не pyCharm, он бы мне сказал. Я скопировал и вставил его в это, и там было написано «нажми контроль + k», я так и сделал, и вот что получилось   -  person 16 Year Old Dev    schedule 03.09.2018
comment
Что вы подразумеваете под переносом на следующий файл?   -  person Stephen Rauch    schedule 03.09.2018
comment
Я обновил код, стало лучше? Я сказал, форматирование в PyCharm говорит, что это правильно, я скопировал и вставил код из PyCharm в поле вопроса, когда задавал вопрос. Переполнение стека сказало, что это неправильно, поэтому я использовал Ctrl + k в своем коде внутри stackoverflow. Я обновил формат, это лучше?   -  person 16 Year Old Dev    schedule 03.09.2018
comment
Ну If недействителен Python. (Заглавная I) Так что нет, это, по крайней мере, означает, что пост нуждается в доработке.   -  person Stephen Rauch    schedule 03.09.2018
comment
@StephenRauch Я имею в виду, что когда я импортирую have_note-001 в свой следующий файл, тогда if have-note-001 == True, затем print(True), но я получаю сообщение об ошибке, говорящее, что have_note-001 не определено, но в первом файле, если вы input Take, когда он тоже спрашивает вас, присваивает значение True.   -  person 16 Year Old Dev    schedule 03.09.2018


Ответы (1)


Я не уверен, что то, о чем вы просите, в ваших интересах. Значения, хранящиеся в переменных, уже переносятся по умолчанию, когда вы импортируете файл, из которого они взяты. Однако такой тип спорадической архитектуры на самом деле не считается хорошей практикой. Позвольте мне дать вам несколько отзывов о вашей программе. Сначала давайте проверим входные данные:

# start off setting keep_paper to nothing
keep_paper = ''

# As long as the player does not enter 'take' or 'leave' we are going to
# keep asking them to enter a proper response. 
while keep_paper not in ['take', 'leave']:
    # here we are going to "try" and ask the player for his choice
    try:
         # here we are getting input from the user with input(...)
         # then converting it into a string with str(...)
         # then converting it to lowercase with .lower()
         # all together str(input(...)).lower()
         keep_paper = str(input("Do you want to Leave the piece of paper or Take it? > ")).lower()
    # if the player entered an invalid response such as "53" we will go back 
    # to the beginning and ask for another response. 
    except ValueError:
        print("Sorry, I didn't understand that.")
        # ask the user to provide valid input
        continue

 if have_note_01 == True:
        print("True")
    elif have_note_01 == False:
        print("False")

Теперь давайте обратимся к основной теме вашего вопроса. Перенос значения переменной при импорте. Как я уже упоминал, это, как правило, не то, что вам нужно, поэтому большинство программ Python имеют код, включающий:

if __name__ == "__main__":
    # do xyz....

Это гарантирует, что xyz запускается только в том случае, если файл запускается, и не запускается, если файл импортирован.

На всякий случай я рекомендую вам оформить заказ: https://github.com/phillipjohnson/text-adventure-tut/tree/master/adventuretutorial, прочтение кода в этом проекте даст вам лучшее представление о том, как вы можете реализовать свой собственный проект. (Основы функций, классов и наследования)

person Philip DiSarro    schedule 03.09.2018
comment
Хорошо, поэтому я ценю ответ, и я уверен, что он правильный, но я очень новичок в Python и понятия не имею, что в этом происходит. Спасибо за ответ на самом деле, просто я понятия не имею, лол. Я не буду просить вас объяснять, но я проверю эту ссылку. - person 16 Year Old Dev; 03.09.2018
comment
@ 16YearOldDev Я добавил еще несколько объяснений. Дайте мне знать, если вам нужно прояснить что-либо здесь. - person Philip DiSarro; 03.09.2018