Создание цикла while внутри класса и добавление пользовательского ввода в список? - PullRequest
0 голосов
/ 23 октября 2019

***** ОБНОВЛЕНИЕ: благодаря помощи, разобрался с циклом while, изо всех сил пытаясь напечатать список с типом животного и именем, которое пользователь ввел в список. ******

# Define your pet Class
# Setup attributes for the type of animal and a name
# Include type of animal and name in the __init__ method

class petClass:
    def __init__(self, animal, name):
        self.animal = animal
        self.name = name

# Create an empty List to store your pet objects

myPetObjects = []

# Create a While loop that continues to ask the user for the information for a new pet object
# Within the loop, create new pet objects with the inputted name and animal type.
# Add this new pet to our pet List
# Ask if the user wants to add more.  If not, exit the While loop

while True:
new_pet = petClass(input("what type of animal"), input("what is its name"))
myPetObjects.append(new_pet)
response = input("add another animal?")
if response == 'no':
    break 

# Create a new For loop that goes through your pet List.
# Print out the animal type and name of the pets within your List
for pet in myPetObjects:
    print(myPetObjects)

вывод распечатанного списка - это не то, что я ищу, просто ищу имена и тип животных.

Ответы [ 2 ]

2 голосов
/ 23 октября 2019

Вот что я заметил с помощью этого кода.

Прежде всего, ваша строка:

if input = no:

должна быть изменена на

if response == 'no':

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

Оператор == проверяет эквивалентность своих операндов, в этомввод регистра и «нет». Единственное равенство = - это оператор присваивания в python, означающий, что оно сохраняет значение справа от знака = в имени, указанном слева. Например,

myPetObjects = []

назначает пустой список справа имени myPetObjects слева.

Другое изменение в коде, которое вы можете заметить в переписанной мной строке, - это цитатыдобавлено к «нет». Это позволит сравнить значение, указанное в имени «input», со строковым литералом «no». Как было написано ранее, «без» без кавычек относится к имени / переменной no, которое не было определено и может привести к путанице в Python.

Другое дело: поскольку вы используете оператор break, который однажды выйдет из циклаrun, вы можете обновить строку цикла while, просто сказав

while True:

Таким образом, цикл будет продолжаться бесконечно, пока не будет явно завершен с оператором "break" (который вы включили).

Что касается фактического тела цикла while, он нуждается в небольшом рефакторинге. Оператор

input("what type of animal")

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

Итак, мы можем рассматривать его как строку. Имея это в виду, давайте создадим ваши любимые объекты. Создание объекта в Python имеет общий синтаксис

object_name = class_name(parameters)

, где параметры ссылаются на параметры, принятые __init__. Это назначит экземпляр объекта вашего класса имя_класса для имя_объекта с помощью оператора присваивания =.

Чтобы добавить новый объект в myPetObjects, нам не нужно присваивать нашему новому объекту имя. Вместо этого мы можем сделать:

myPetObjects.append(class_name(parameters))

В вашей ситуации это может быть записано:

myPetObjects.append(petClass(input("what type of animal"), input("what is its name")))

Итак, весь наш цикл:

while True:
    myPetObjects.append(petClass(input("what type of animal"), input("what is its name")))
    response = input("add another animal?")
    if response == 'no':
        break 

Возможно, болеелегко читаемая версия:

while True:
    new_pet = petClass(input("what type of animal"), input("what is its name"))
    myPetObjects.append(new_pet)
    response = input("add another animal?")
    if response == 'no':
        break 

Я надеюсь, что это поможет, и дайте мне знать, если у вас есть еще вопросы, если что-то не понятно, или я не отвечал на вопрос так, как вы хотели,Удачи!

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

Предоставляя true или false условию while, вы можете управлять итерацией:

#prompting user to enter inputs to the object
while answer != 'no':
    animalInput = input('What type of animal: ')
    nameInput = input('what is its name: ')

    #creating instances and adding to the list
    myPetObjects.append(petClass(animalInput, nameInput))

    #Adding more pets into object
    answer = input("Do you want to add more(yes/no): ")

    if answer == "yes":
        # Do this again

    elif answer == "no":
    break

#print all            
for pet in myPetObjects:
     print(pet.animal +":"+ pet.name)
...