Проблема с назначением ввода в список

1

Я знаю, что это, вероятно, простой вопрос, но после просмотра документации для python 2.6.4 я не могу понять, что не так. Это мой файл, в нем полностью. У меня проблема: get_phone_number(). После запроса количества телефонных номеров, я получаю эту ошибку:

Traceback (most recent call last):
  File "/home/charles/workspace/HelloWorld/hello.py", line 27, in <module>
    c.get_phone_number()
  File "/home/charles/workspace/HelloWorld/hello.py", line 17, in get_phone_number
    self.phone_number[phone_count]
AttributeError: Contact instance has no attribute 'phone_number'

Кажется, что я могу определить атрибут "на лету", но не если это список? Пожалуйста, помогите!

class Name():
        def get_name(self):
            self.first = raw_input("First Name?\n")
            self.middle = raw_input("Middle Name?\n")
            self.last = raw_input("Last Name?\n")
        pass
    class Address():
        def get_address(self):
            self.street = raw_input("Street?\n")
            self.city = raw_input("City?\n")
            self.zip = raw_input("Zip Code?\n")
        pass
    class Phone_Number():
        def get_phone_number(self):
            count = 0
            phone_count = raw_input("How many phone numbers?\n")
            self.phone_number[phone_count]
            while count < (phone_count - 1):
                self.phone_number[phone_count] = raw_input("Phone Number: ")
                phone_count -= 1
        pass
    class Contact(Name, Address, Phone_Number):
        pass
    c = Contact()
    c.get_name()
    c.get_address()
    c.get_phone_number()
  • 1
    Отступ не может быть правильным. Пожалуйста, исправьте это так, чтобы оно соответствовало вашему файлу. Копировать. Вставить. И нажмите кнопки с «101010», чтобы отформатировать этот материал как код.
  • 0
    Отступы верны. Я использую Eclipse 3.5 на Ubuntu 9.10. У меня автоотступ установлен на 4 пробела.
Теги:

3 ответа

1
Лучший ответ

Ваш код содержит довольно много ошибок и не является Pythonic. Некоторые моменты: вам нужно преобразовать первый пользовательский ввод в целое число. Вы можете использовать цикл for вместо цикла while. На Python 2.5 вы можете использовать xrange вместо диапазона, но для диапазона использования Python 3.0. Используйте append для добавления элемента в список.

class Phone_Number():
    def get_phone_numbers(self):
        phone_count = int(raw_input("How many phone numbers?\n"))
        self.phone_numbers = []
        for _ in range(phone_count):
            self.phone_numbers.append(raw_input("Phone Number: "))

p = Phone_Number()
p.get_phone_numbers()
for phone_number in p.phone_numbers:
    print phone_number
  • 0
    Спасибо, сэр! Вы исправили мои ошибки. Я пытаюсь узнать, как Python приходит с C ++.
2

заменить

self.phone_number[phone_count]

с

self.phone_number = []

Первый оператор ничего не делает (на самом деле он пытается получить доступ к элементу phone_count-th из списка с именем phone_number в self, которого нет и, следовательно, ошибка).

Второй оператор определяет новый список с именем phone_number.

0

Вам нужно инициализировать self.phone_number

 def get_phone_number(self):
            count = 0
            phone_count = raw_input("How many phone numbers?\n")
            self.phone_number = []
            while count < (phone_count - 1):
                self.phone_number.append (raw_input("Phone Number: "))
                phone_count -= 1

Ещё вопросы

Сообщество Overcoder
Наверх
Меню