在一个类中,在__repr__
构造函数中,python对什么是字符串以及什么不是很困惑。这是一个学校项目,不用担心,我实际上不会在这里处理社会安全号码。
以下代码不起作用:
def __repr__(self):
return (
'\nName:\t'+self.getName()+':\t\t\tNurse\n'+
'\tPhone:\t\t\t\t\t\t('+str(self.getPhoneNumber())[0:3]+') '+
str(self.getPhoneNumber())[3:6]+'-'+str(self.getPhoneNumber())[6:10]+'\n'+
'\tOverseeing Doctor:\t\t\t'+self.getDoctor()+'\n'
'\tDescription:\t\t\t\t'+self.getDesc()+'\n'+
'\tBirthday:\t\t\t\t\t'+self.getBDay()+'\n'+
'\tSocial Security Number:\t\t***-**-'+str(round(self.getSocial()))[5:9]+'\n'+#error is in this line
str(self._cases[i] for i in range(len(self._cases)))
)
然而,在另一个类中,我有几乎相同的代码可以工作:
def __repr__(self):
return (
'\nName:\t'+self.getName()+':\t\t\tDoctor\n'+
'\tPhone:\t\t\t\t\t\t('+str(self.getPhoneNumber())[0:3]+') '+
str(self.getPhoneNumber())[3:6]+'-'+str(self.getPhoneNumber())[6:10]+'\n'+
'\tDepartment:\t\t\t\t\t'+self.getDepartment()+'\n'
'\tDescription:\t\t\t\t'+self.getDesc()+'\n'+
'\tBirthday:\t\t\t\t\t'+self.getBDay()+'\n'+
'\tSocial Security Number:\t\t***-**-'+str(self.getSocial())[5:9]+'\n'+
str(self._cases)+'\n'
)
请告诉我两者之间有什么不同,以及如何修复初始代码。
答案 0 :(得分:1)
您声称此部分中存在错误:
str(round(self.getSocial()))[5:9]
但没有告诉我们你的实际错误; 追溯和异常消息会出现错误,但如果没有这些细节,我们无法告诉您有关可能出现的问题。也许self.getSocial()
会返回一个字符串,round()
只需要浮点数:
>>> round('123')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: a float is required
您需要向我们提供错误消息以及您的输入(self.getSocial()
的返回值)和预期输出,以便我们可以帮助您解决该部分;也许你误解了round()
的作用。
接下来,您尝试将生成器表达式转换为字符串:
str(self._cases[i] for i in range(len(self._cases))
括号之间的所有内容都是延迟评估循环,但str()
不会为您评估它。
如果您想要生成所有案例的字符串,并与标签一起使用,请使用str.join()
代替:
'\t'.join([str(self._cases[i]) for i in range(len(self._cases)])
你真的应该考虑使用str.format()
模板;它将为很多改进和可读的代码做出贡献。你的工作&#39;示例将转换为:
def __repr__(self):
phone = str(self.getPhoneNumber())
social = str(self.getSocial())
return (
'\n'
'Name:\t{name}:\t\t\tDoctor\n'
'\tPhone:\t\t\t\t\t\t({phone1}) {phone2}-{phone3}\n'
'\tDepartment:\t\t\t\t\t{dept}\n'
'\tDescription:\t\t\t\t{desc}\n'
'\tBirthday:\t\t\t\t\t{bday}\n'
'\tSocial Security Number:\t\t***-**-{social}\n'
'{cases}\n').format(
name=self.getName(),
phone1=phone[:3], phone2=phone[3:6], phone3=phone[6:10],
dept=self.getDepartment(), desc=self.getDesc(),
bday=self.getBDay(), social=social[5:9],
cases=self._cases)