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

Автор решения: Ben Puls

Насколько я понимаю, проблема заключалась в том, что в функции 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
→ Ссылка
Автор решения: Rijen

int(phone[9])==int Тут вы выбираете 9 символ из строки с номером, и сравниваете его с типом.

Для того чтобы узнать длину номера, используйте сравнение len(phone)==10.

Для того чтобы убедиться, что это число используйте phone.isnumeric().

→ Ссылка
Автор решения: Rijen
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)
→ Ссылка