Валидация номера телефона в 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)