Ввод функции в импортируемый модуль - PullRequest
0 голосов
/ 26 октября 2018

Я пытаюсь создать игровое меню, которое затем могу использовать в играх, чтобы пропустить необходимость каждый раз создавать новое меню. Однако в настоящее время он просто преобразует функцию gameMain () вместо того, чтобы сначала делать gameMenu (), а затем попытка выбрать игру с помощью «g» или «G» ничего не делает, кроме завершения программы.

Я спрашиваю, возможно ли иметь переменную в модуле, которая является функцией в коде, который ее импортирует.

Вот код для меню, которое называется textbasedadventures.py:

def gameMenu(game,your_choice="Please Enter how you'd like the game described"):
    menu_options = ""
    while not(menu_options == "G" or menu_options == "g":
        title()
        print()
        print("\t\t",your_choice,"\n\n")
        print('G start game')
        menu_options = input("\t\tChoice: ")
        if menu_options == "G" or menu_options == "g":
            game

            input(pause)

и это код для игры:

import sys
sys.path.append("\MyOwnProjects")
import textbasedadventures as t
def veryStart():
    answer = ""
    while not(answer == "1" or answer == "2" or answer == "3"):
        print("\tYou are awoken by the blaring of your alarm clock.How did you sleep last night?")
        print("\n\t1 Very well\n\n\t2 Well\n\n\t3 Not good\n\n\t4 atrociously")
        answer = input("You slept ")
        if answer == "1":
            print("one option")
        elif answer == "2":
            print("\t")
        elif answer == "3":
            pass
        elif answer == "4":
            print("another option")
        else:
            print("\t",answer,"is not a valid entry, please try again")


def gameMain():

    veryStart()


t.gameMenu(gameMain(),"please work")

Если кто-нибудь может сказать мне, как это сделать, или если это вообще возможно, я был бы очень признателен.

1 Ответ

0 голосов
/ 26 октября 2018

Ваша остающаяся проблема привыкает, когда вы вызываете функцию, и когда вы ссылаетесь на функцию как на объект .

вы не получили никаких ошибок при импорте textbasedadventures (который я сократил до tba, чтобы избежать опечаток), я предполагаю, что вы обработали это правильно: файл с именем textbasedadventures.py находится в локальном каталоге.

Мне пришлось удалить строку input(pause), поскольку вы не определили pause, и она там для оболочки, отличной от той, которую я использую.Мне также пришлось удалить title(), поскольку его больше нет в вашем коде.

Когда вы передаете функцию основной игры основной программы, вы должны передать ее как объект функции .Вы сделали это:

t.gameMenu(gameMain(),"please work")

Это вызывает gameMain (из-за скобок), получает возвращаемое значение и передает , что , в t.gameMenu.Поскольку не никакого такого возвращаемого значения, ваше удаленное меню получает только значение None.

. Просто снимите скобки:

t.gameMenu(gameMain,"please work")

Это займетвся функция gameMain (ну, ссылка на нее) и передает ее вашей удаленной функции, где ...

Вместо вызова переданного модуля game, вы просто перечислили его значение.Питон думает: «Хорошо, круто, я должен оценить это выражение. Ну и дела, ссылка на объект - это легко. Значение - это просто сама ссылка. Я даже не должен делать что-либос ним. Готово. "

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

Вместо этого сейчас вы называете это: здесь вы ставите скобки, которые вы сняли на другом конце вызова:

game()

Я внес эти изменения, и вот результат:

enter G to start game
        Choice: g
    You are awoken by the blaring of your alarm clock.How did you sleep last night?

    1 Very well

    2 Well

    3 Not good

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