Как использовать переменную для вызова класса? - PullRequest
0 голосов
/ 03 августа 2020

Код:

class Mega:
    def __init__(self, name, types, moves):
        self.name = name
        self.types = types
        self.moves = moves
  
ropher=Mega('Ropher', 'Sound', ['Screech', 'Coil'])
mijek=Mega('Mijek', 'Light', ['Solar Beam', 'Healing Sunlight'])

input=input('What mega? ').lower
print(f"your mega is {input.name}, a {input.types} type")

Я хочу использовать вводимые пользователем данные, чтобы решить, какую Mega вызывать, но я не могу найти способ go об этом. Идея состоит в том, чтобы заставить его печатать имя Ropher и печатать, если введено ropher, и имя Mijek, если введено mijek. Кто-нибудь может помочь?

Ответы [ 3 ]

5 голосов
/ 03 августа 2020

Лучше использовать словарь вместо отдельных переменных. Затем вы используете поиск по словарю, чтобы найти те, которые вам нужны.

class Mega:
    def __init__(self, name, types, moves):
        self.name = name
        self.types = types
        self.moves = moves

megas = {'ropher': Mega('Ropher', 'Sound', ['Screech', 'Coil']),
         'mijik': Mega('Mijek', 'Light', ['Solar Beam', 'Healing Sunlight'])}

key = input('What mega? ').lower()
print(f"your mega is {megas[key].name}, a {megas[key].types} type")

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

Обратите внимание: если ключ, который вы пытаетесь найти, не существует в словаре, то ваша программа остановится с KeyError. Если вы хотите предотвратить это, вы можете сначала использовать in, чтобы проверить, существует ли ввод как один из ключей в словаре:

if key in megas:
    print(f"your mega is {megas[key].name}, a {megas[key].types} type")
else:
    print("not a valid mega")

или вы можете поймать KeyError:

try:
    print(f"your mega is {megas[key].name}, a {megas[key].types} type")
except KeyError:
    print("not a valid mega")
2 голосов
/ 03 августа 2020

У вас есть несколько объектов, которые вы хотите найти по общему признаку. В данном случае имя в нижнем регистре. Вы можете использовать dict для индексации ваших объектов по имени, а затем легко находить их позже.

class Mega:
    def __init__(self, name, types, moves):
        self.name = name
        self.types = types
        self.moves = moves
  
mega_index = {}
ropher=Mega('Ropher', 'Sound', ['Screech', 'Coil'])
mega_index[ropher.name.lower()] = ropher
mijek=Mega('Mijek', 'Light', ['Solar Beam', 'Healing Sunlight'])
mega_index[mijek.name.lower()] = mijek

my_input=input('What mega? ').lower()
try:
    my_mega = mega_index[my_input]
    print(f"your mega is {my_mega.name}, a {my_mega.types} type")
except KeyError:
    print("No such mega")

Это только верхушка айсберга. Эти переменные ropher и mijek вам действительно не нужны. Они есть в словаре, и теперь с ними можно работать динамически.

1 голос
/ 03 августа 2020

То, что вам нужно, это словарь:

megas = {
    'ropher': Mega('Ropher', 'Sound', ['Screech', 'Coil']),
    'mijek': Mega('Mijek', 'Light', ['Solar Beam', 'Healing Sunlight']),
}

input=megas[input('What mega? ').lower()]
print(f"your mega is {input.name}, a {input.types} type")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...