Python 3.6 - переменная класса вызова пользовательского ввода - PullRequest
0 голосов
/ 27 апреля 2018

Я очень плохо знаком с Python (и программированием в целом), поэтому я прошу прощения, если задаю неправильный вопрос.

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

class Fruit:
  def __init__(self, name, color):
    self.name = name
    self.color = color

banana = Fruit('banana', 'yellow')

fruit_choice = input("What fruit would you like to know about?")

Здесь я попробовал множество способов заставить входную строку («банан») вызывать переменную (банан), а затем выполнять другие методы, определенные в классе. Использование ключа словаря не работает, потому что я хочу включить несколько атрибутов, а не только 1.

Ответы [ 4 ]

0 голосов
/ 27 апреля 2018

Вот мой:

class Fruit:
  def __init__(self, name, color, price):
    self.name = name
    self.color = color
    self.price = price
  def __str__(self):
    return "name: "+self.name+" color: "+self.color+" price: $"+str(self.price)

dict_of_fruits = {}
banana = Fruit('banana', 'yellow', 3)
apple = Fruit('apple', 'red', 2)

dict_of_fruits[banana.name] = banana
dict_of_fruits[apple.name] = apple


fruit_choice = input("What fruit would you like to know about?")

if fruit_choice in dict_of_fruits:
  print("Here are the attr. of ",fruit_choice,': ',dict_of_fruits[fruit_choice])
else:
  print("Sorry I could not find ",fruit_choice," in my records")

Я включил метод __str__(), чтобы сделать печать более привлекательным, а также новое свойство price, так как вы упомянули, что их было более 2

Выход:

What fruit would you like to know about? banana
Here are the attr. of  banana :  name: banana color: yellow price: $3
0 голосов
/ 27 апреля 2018

вы можете использовать что-то подобное, это только черновик, чтобы показать подход

class Fruit:
  def __init__(self, name, color):
    self.name = name
    self.color = color

  def __str__(self):
    return "{} : {}".format(self.name, self.color)

fruit_dict = dict()
banana = Fruit('banana', 'yellow')
fruit_dict.update({banana.name : banana})

fruit_choice = input("What fruit would you like to know about?")
user_fruit = fruit_dict.get(fruit_choice)
if user_fruit is not None:
    print(user_fruit)

вывод (если ввод был бананом)

banana : yellow
0 голосов
/ 27 апреля 2018

Если вы используете словарь, в котором ключ - это имя фрукта, а значение - ваш Fruit экземпляр, вы можете просто найти значения и переопределить __str__, используя любое описание фрукта. :

class Fruit:
  def __init__(self, name, color):
    self.name = name
    self.color = color

  def __str__(self):
    return '{}s are {}'.format(self.name, self.color)

dct = {}
dct['banana'] = Fruit('banana', 'yellow')

Теперь вы можете использовать свой текущий метод, чтобы найти атрибуты фрукта:

In [20]: ask = input('What fruit would you like to know about? ')
What fruit would you like to know about? banana

In [21]: dct.get(ask, 'Fruit not found')
Out[21]: bananas are yellow

Это также будет обрабатывать случаи, когда фрукт отсутствует в вашем словаре:

In [23]: dct.get('apple', 'Fruit not found')
Out[23]: 'Fruit not found'
0 голосов
/ 27 апреля 2018

Вы все равно должны использовать словарь поиска. Его значениями могут быть другие условия, содержащие атрибуты каждого фрукта, или объект Fruit.

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