代码之家  ›  专栏  ›  技术社区  ›  Charles Ray

向列表分配输入时出现问题

  •  1
  • Charles Ray  · 技术社区  · 16 年前

    我知道这可能是一个简单的问题,但是在查看了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()
    
    3 回复  |  直到 16 年前
        1
  •  1
  •   Mark Byers    16 年前

    您的代码包含相当多的错误,并且不是蟒蛇式的。一些要点:您需要将第一个用户输入转换为整数。可以使用for循环而不是while循环。在python 2.5上,可以使用xrange而不是range,但对于python 3.0,可以使用range。使用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
    
        2
  •  2
  •   Ofri Raviv    16 年前

    代替

    self.phone_number[phone_count]
    

    具有

    self.phone_number = []
    

    第一个语句什么也不做(实际上,它试图访问一个名为phone_number的列表中的phone_count-th元素,这个元素本身并不存在,因此会出现错误)。

    第二个语句定义了一个名为phone_number的新列表。

        3
  •  0
  •   Robert Christie    16 年前

    您需要初始化self.phone\u号码

     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