Валидация номера телефона в Python
Надо выдать True когда город москва и номер из 10 чисел и начинается с 7 или 8 Сейчас выдаёт только False В чём именно ошибка и как исправить?
applications = [
'name=Аня,phone=8800234 ,city=москва',
'name=КОЛЯ,phone=8800900871 ,city=МОСКВА',
'name=Валентина,phone=7950900871 ,city=волгоград',
'name=,phone=7999901871,city=москва',
'name=Иван,phone=7999901871,city=москва',
'name=Инга,phone=,city=москва'
]
# функция проверки валидности номера
def check_phone(phone):
#Ваш код здесь
if (phone[0]=='8' or phone[0]=='7') and phone[9].isnumeric():
return True
else:
return False
# функция проверки города
def check_city(city):
#Ваш код здесь
if city == 'москва':
return True
else:
return False
# функция проверки одной анкеты
def check_application(application):
#Ваш код здесь
normalized_string = application.lower()
normalized_string = normalized_string[normalized_string.find('p')::]
city = normalized_string[normalized_string.find('city=')+5:-1]
phone = application[application.find('phone=')+6:application.find('phone=')+16]
if check_city(city) and check_phone(phone) == True:
return True
else:
return False
# функция проверки списка анкет
def find_valid_applications(applications):
#Ваш код здесь
for i in range(len(applications)):
print(f'{applications[i]} --- {check_application(applications[i])}')
Ответы (3 шт):
Насколько я понимаю, проблема заключалась в том, что в функции check_phone()
вы проверяете, что первое число должно начинаться с 8 или с 7, а затем вы зачем-то проверяете, что последнее число должно быть равно типу.
Если исходить из вашего описания, вам нужно проверить длину, тогда для того будет использоваться функция len()
, таким образом, исправленный код функции будет выглядеть так:
def check_phone(phone):
if len(phone) == 10 and (phone[0]=='8' or phone[0]=='7'):
return True
return False
int(phone[9])==int
Тут вы выбираете 9 символ из строки с номером, и сравниваете его с типом.
Для того чтобы узнать длину номера, используйте сравнение len(phone)==10
.
Для того чтобы убедиться, что это число используйте phone.isnumeric()
.
applications = [
'name=Аня,phone=8800234 ,city=москва',
'name=КОЛЯ,phone=8800900871 ,city=МОСКВА',
'name=Валентина,phone=7950900871 ,city=волгоград',
'name=,phone=7999901871,city=москва',
'name=Иван,phone=7999901871,city=москва',
'name=Инга,phone=,city=москва'
]
# функция проверки валидности номера
def check_phone(phone):
if len(phone)>0 and (phone[0]=='8' or phone[0]=='7') and phone.isnumeric() and len(phone)==10:
return True
else:
return False
# функция проверки города
def check_city(city):
if len(city)>0 and city == 'москва':
return True
else:
return False
# функция проверки одной анкеты
def check_application(application):
#Ваш код здесь
normalized_string = application.lower()
app_dict = dict(x.split("=") for x in normalized_string.split(","))
print (app_dict)
if check_city(app_dict["city"].strip()) and check_phone(app_dict["phone"].strip()) == True:
return True
else:
return False
# функция проверки списка анкет
def find_valid_applications(applications):
for i in range(len(applications)):
print(f'{applications[i]} --- {check_application(applications[i])}')
find_valid_applications(applications)