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

У меня есть глобальная переменная, которую нужно изменить с помощью пользовательского ввода, сгенерированного функцией.

Я пытаюсь создать текстовую игру в стиле Zork и хочу, чтобы имя персонажа, input, использовалось пользователем при создании персонажа function, чтобы изменило глобальную переменную .

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

Я использую global variable, чтобы определить имя персонажа до стадии создания персонажа. Я использую ключевое слово 'global' в creation() function, чтобы изменить имя variable для пользователя input.

Когда приглашение готово к использованию, оно по-прежнему отображает только имя как 00 вместо input, созданного во время creation() function

Я чрезвычайно новичок. Любые советы, советы или указания будут заветными.

import time
name = "00" ##this is what we want to change

##
def Intro():
    print("\n\n\nWelcome to the game.")
    time.sleep(1)
    print("This is an attempt to make an interactive text based game.")

##
def Creation():
    Character_name = input("\nWhat will your Character's name be: ")
    time.sleep(1)
    print("\nWelcome to the game " + Character_name + " \n" )
    time.sleep(1.5)
    Character_class = input("In one word, name " + Character_name + "'s profession: ")
    t00n = Character_name + " the " + Character_class
    global name ##here I am using the global keyword
    name = t00n
    time.sleep(1)
    print("\n" + t00n + "\n")
    time.sleep(2)
    next_func = input("When ready type 'next' to begin.\n>>>:")

    if next_func == "next":
        segway()
    else:
        Jump()

##
def Jump():
    Jump_Prompt = input("Just 'Jump' on in\n>>>: ")
    if Jump_Prompt == "Jump":
        segway1()
    else:
        Jump()

##
def segway():
    print("A room with options to choose from")
    prompt()    

class Character:

    def __init__(self, name, HP, full_HP, AtS, AR):
        self.name = name ##should = t00n now?
        self.hp = HP
        self.full_HP = full_HP
        self.AtS = AtS
        self.AR = AR

    def stat_bar(self):
        return '{} {} {} {} {} {}'.format("[Name:]", self.name, "[HP:]", self.hp, "[Max HP:]", self.full_HP)

Player1 = Character(name, 100, 100, 1, 0)

##
def prompt():
    _pr = input("<<< " + Character.stat_bar(Player1) + " >>> \n")
    return _pr


#Begin
Intro()
Creation()
segway()

##The prompt() function still displays the name as 00 even tho the creation() function is using the 'global' keyword to change the 'name' variable to the user input.

Ответы [ 2 ]

0 голосов
/ 25 мая 2019

Вам необходимо использовать глобальное ключевое слово в вашем prompt и обновить Player1.name с этим глобальным именем

def prompt():

    #Take name from global scope
    global name

    #Assign it to Player1 name
    Player1.name = name

    _pr = input("<<< " + Character.stat_bar(Player1) + " >>> \n")
    return _pr

Тогда ваше приглашение будет работать так, как задумано, например

Welcome to the game.
This is an attempt to make an interactive text based game.

What will your Character's name be: Joe

Welcome to the game Joe 

In one word, name Joe's profession: Don

Joe the Don

When ready type 'next' to begin.
>>>:next
A room with options to choose from
<<< [Name:] Joe the Don [HP:] 100 [Max HP:] 100 >>> 
0 голосов
/ 25 мая 2019

Аааа, немного, но я думаю, что нашел проблему.

Вы инициализируете Player 1 с помощью переменной name перед вызовом Creation(), где вы изменяете глобальную переменную name, поэтому Player1 создается с исходным именем «00».

Переместить строку:

Player1 = Character(name, 100, 100, 1, 0)

Поставьте его после Creation() внизу, но до segway()

Python более или менее выполняет любой неиспользуемый код (код, которого нет в функции, классе и т. Д.) Сверху вниз.

Итак, перемещаясь сверху вниз в вашей программе, он устанавливает имя на «00», затем создает Player1 с исходным именем, затем вызывает Intro(), Creation() (который меняет имя на t00n) и, наконец, segway().

...