我现在开始学习Python并选择了Al Sweigart的“用Python自动化无聊的东西”来帮助我完成我的第一步。因为我非常喜欢Visual Studio Code的外观和感觉,所以我试图在本书的第一部分之后进行切换。
以下代码来自在线资料,因此应该是正确的。不幸的是,它在IDLE中工作正常但在VS Code中没有。
def isPhoneNumber(text):
if len(text) != 12:
return False # not phone number-sized
for i in range(0, 3):
if not text[i].isdecimal():
return False # not an area code
if text[3] != '-':
return False # does not have first hyphen
for i in range(4, 7):
if not text[i].isdecimal():
return False # does not have first 3 digits
if text[7] != '-':
return False # does not have second hyphen
for i in range(8, 12):
if not text[i].isdecimal():
return False # does not have last 4 digits
return True # "text" is a phone number!
print('415-555-4242 is a phone number:')
print(isPhoneNumber('415-555-4242'))
print('Moshi moshi is a phone number:')
print(isPhoneNumber('Moshi moshi'))
我收到以下错误:
415-555-4242 is a phone number:
Traceback (most recent call last):
File "/Users/.../isPhoneNumber.py", line 20, in <module>
print(isPhoneNumber('415-555-4242'))
File "/Users/.../isPhoneNumber.py", line 5, in isPhoneNumber
if not text[i].isdecimal(): AttributeError: 'str' object has no attribute 'isdecimal'
我很高兴你的建议让它发挥作用。我已经安装了Python扩展并用pip3安装了建议的东西。
提前致谢。
答案 0 :(得分:1)
只有Unicode字符串具有isdecimal(),因此您必须将其标记为。
要在python中将字符串转换为unicode字符串,您可以这样做:
s = "Hello!"
u = unicode(s, "utf-8")
在您的问题中,您只需将print(isPhoneNumber('415-555-4242'))
更改为print(isPhoneNumber(u'415-555-4242'))
,将print(isPhoneNumber('Moshi moshi'))
更改为print(isPhoneNumber(u'Moshi moshi'))
U&#39;串&#39;在python中确定该字符串是一个unicode字符串