Python 关于字符串方法

Python 关于字符串方法,python,python-3.x,Python,Python 3.x,我目前正在用Python书完成一些枯燥的工作,并在上遇到了一个奇怪的问题。 尝试执行以下代码时: def isPhoneNumber(text): if len(text) != 12: return False for i in range(0, 3): if not text[i].isdecimal(): return False if text[3] != "-": return Fals

我目前正在用Python书完成一些枯燥的工作,并在上遇到了一个奇怪的问题。 尝试执行以下代码时:

def isPhoneNumber(text):
    if len(text) != 12:
        return False

    for i in range(0, 3):
        if not text[i].isdecimal():
            return False

    if text[3] != "-":
        return False

    for i in range(4, 7):
        if not text(i).isdecimal():
            return False

    if text[7] != "-":
        return False

    for i in range(8, 12):
        if not text[i].isdecimal():
            return False

    return True


print("415-555-4242 is a phone number:")
print(isPhoneNumber("415-555-4242"))
print("Moshi moshi is a phone number:")
print(isPhoneNumber("Moshi moshi"))
我收到以下错误消息:

Traceback (most recent call last):
  File "automation.py", line 27, in <module>
    print(isPhoneNumber("415-555-4242"))
  File "automation.py", line 13, in isPhoneNumber
    if not text(i).isdecimal():
TypeError: 'str' object is not callable

将str.isdecimal方法切换为str.isdigit方法允许我正确执行代码,但我想知道为什么isdecimal方法不起作用

错误与isdecimal无关。您在如何从文本中提取字符方面有输入错误。

应该读

if not text[i].isdecimal():

注意方括号。

错误与isdecimal无关。您在如何从文本中提取字符方面有输入错误。

  File "automation.py", line 13, in isPhoneNumber
    if not text(i).isdecimal():
TypeError: 'str' object is not callable
应该读

if not text[i].isdecimal():
请注意方括号

  File "automation.py", line 13, in isPhoneNumber
    if not text(i).isdecimal():
TypeError: 'str' object is not callable
typeError在第13行,您在那里调用一个string对象。不使用[]


typeError在第13行,您在那里调用一个string对象。使用[]not

如果你的书教你这种Python,那么你最好另找一种。这段代码非常不和谐。正如@EliKorvigo所说,这将是一个非常好的应用程序用例。正则表达式“\d{3}-\d{3}-\d{4}”与您的电话号码类型相匹配。texti.isdigit将引发相同的错误。你一定是同时纠正了打字错误。@EliKorvigo:别怪这本书。Python中所有CS1级别的书籍都遵循这种方法。对于第一门编程课程的学生来说,正则表达式非常难掌握。@DYZ我更关心这种迭代风格。如果你的书教你这种Python,那么你最好再找一种。这段代码非常不和谐。正如@EliKorvigo所说,这将是一个非常好的应用程序用例。正则表达式“\d{3}-\d{3}-\d{4}”与您的电话号码类型相匹配。texti.isdigit将引发相同的错误。你一定是同时纠正了打字错误。@EliKorvigo:别怪这本书。Python中所有CS1级别的书籍都遵循这种方法。对于第一门编程课程的学员来说,正则表达式非常难掌握。@DYZ我更关心这种迭代风格。我不是反对者,但也许,据猜测,他认为这个答案应该是一个评论,再加上投票结束,因为只是一个打字错误。@NPE谢谢!本应更加注意可能的拼写错误。我不是落选者,但也许,猜测一下,他认为这个答案应该是一个评论,加上投票结束,因为只是一个拼写错误。@NPE谢谢!应该更加注意可能的打字错误。