对于我的代码,我不需要替换数字,只需替换括号和破折号之类的东西,我以为我在代码中指定了它,但仍然无法正常工作。这是代码:
def standardize_phone_number(phone_number):
phone_number = str(phone_number.replace('(', '')\
.replace(')', '')\
.replace(' ', '')\
.replace('-', ''))
if not (phone_number.isdigit() and len(phone_number) == 10):
return None
if phone_number[0] == '(' and phone_number[4:6] == ')' and \
phone_number[9] == '-' and len(phone_number) == 13:
return phone_number.replace('(', '').replace(')', '-')
if phone_number[3] == '-' and phone_number[7] == '-' and \
len(phone_number) == 11:
return phone_number.replace('-', '').replace('-', '')
if phone_number[5] == ' ' and phone_number[9] == '-' and \
len(phone_number) == 13:
return phone_number.replace(' ', '').replace('-', '')
else:
return None
print(standardize_phone_number(123-456-7890))
答案 0 :(得分:4)
问题是您将int
作为输入传递给standardize_phone_number
,特别是int
123-456-7890
,而{{ 1}}需要一个字符串。
您想要的是:
-8223
编辑:返回standardize_phone_number
使用上面的输入,您的代码将到达最后的standardize_phone_number('123-456-7890')
,因此返回None
。由于您删除了所有出现的字符else
,None
,'('
和')'
,因此' '
字符串将只是输入的数字(假设输入有效的电话号码格式)。因此,您的'-'
条件都不会等于phone_number
。
看起来您是要从电话号码中删除字符if
,True
,'('
和')'
的所有实例,然后返回数字电话号码。在这种情况下,您可以将代码减少为:
' '
使用'-'
,您可以将所有这些def standardize_phone_number(phone_number):
phone_number = str(phone_number.replace('(', '')\
.replace(')', '')\
.replace(' ', '')\
.replace('-', ''))
if phone_number.isdigit() and len(phone_number) == 10:
return phone_number
else:
raise ValueError("The number you entered is not a valid phone number")
调用压缩为一个:
re.sub
当然,replace
是可选的,您可以实施您认为对无效电话号码正确的处理。
答案 1 :(得分:0)
更改您的调用方法
print(standardize_phone_number(123-456-7890))
从这里到
print(standardize_phone_number('123-456-7890'))
然后它将正常工作,因为只有具有“ replace()”方法的字符串对象
答案 2 :(得分:0)
您的代码检查phone_number是否为数字,如果不是,则不返回任何数字。 在应用了这篇文章的建议后,它将始终返回None,因为现在phone_number始终是字符串。
if not (phone_number.isdigit() and len(phone_number) == 10):
return None
注释掉这两行,应该可以解决您的重复性问题。