将输入分配给列表的问题
我知道这个问题可能很简单,但在查看了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 个回答
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
2
把
self.phone_number[phone_count]
替换成
self.phone_number = []
第一条语句其实没什么用(它试图访问一个叫做 phone_number 的列表中第 phone_count 个元素,但这个元素并不存在,所以就出错了)。
第二条语句则是定义了一个新的列表,叫做 phone_number。
1
你的代码有不少错误,而且不太符合Python的风格。几点建议:你需要把第一个用户输入的内容转换成整数。你可以用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