Использование var () для создания экземпляра объекта из пользовательского ввода. Ошибка синтаксиса - PullRequest
0 голосов
/ 30 сентября 2019

Я создал эти классы, и теперь я пытаюсь создать функцию, которая позволяет создавать экземпляр нового объекта из данных, введенных пользователем. Но я получаю синтаксические ошибки при использовании var ()

Структура класса состоит в том, что есть один main с двумя подклассами. Основной «Gokemon»:

class Gokemon:
    def __init__(self,NAME,TYPE,HEALTH,POWER): #Contructor #Mayb think about using dict key words
        self._Name = str(NAME)
        self._Type = str(TYPE) #Water, Earth, Fire or Flying. Used in Battle() to allow adders
        self._HP = int(HEALTH) #Health Points
        self._DP = int(POWER) #Power Points - attacking power

, а два подкласса называются «ручными» и «дикими».

class Tame(Gokemon):
    def __init__(self,NAME,TYPE,HEALTH,POWER):
        Gokemon.__init__(self,NAME,TYPE,HEALTH,POWER)
        self._Owner = ""
        self._Time = 0 #How long have they owned it

class Wild(Gokemon):
    def __init__(self,NAME,TYPE,HEALTH,POWER):
        Gokemon.__init__(self,NAME,TYPE,HEALTH,POWER)

Функция создания нового объекта с помощью пользовательского ввода выглядит следующим образом:

 def NewGokemon():
        n = input("What's its name?: ")
        while True:
            t = input("what's its type?: ")
            if t == "Water" or t == "Fire" or t=="Earth" or t =="Flying":
                break
            else:
                print("please try again, the types include:\nFire\nWater\nEarth\nFlying")
        while True:
            h = input("How many Health Points(HP) does it have")
            try:
                int(h)/2
            except ValueError:
                print("Sorry please input a numerical value")
            else:
                break
        while True:
            p = input("How many Health Points(HP) does it have")
            try:
                int(p)/2
            except ValueError:
                print("Sorry please input a numerical value")
            else:
                break
        while True:
            dom  = input("Is the Gokemon tame(input t) or wild(input w)?")
            if dom =="t":
                return var()[n] = Tame(n,t,h,p) 
            if dom == 'w':

                return var()[n] = Wild(n,t,h,p)

Функция работает нормально до тех пор, пока не скомпилируется для запуска моего редактора (VSкод) говорит.

  File "c:\Users\rufar\Desktop\python\little projects\Gokemon - learning class\Gokemon.py", line 38
    return var()[n] = Tame(n,t,h,p) 
                    ^
SyntaxError: invalid syntax

Что я делаю не так? Есть ли лучший способ сделать это?

1 Ответ

0 голосов
/ 02 октября 2019

заменил весь бит на vars () следующим образом:

   while True:
            dom  = input("Is the Gokemon tame(input t) or wild(input w)?")
            if dom =="t":
                globals()[n] = Tame(n,t,h,p)
                return n 
            elif dom == 'w':
                globals()[n] = Wild(n,t,h,p)
                return n
            else:
                print("Did not understand input")

И теперь все работает нормально.

...