Уведомления

Группа в Telegram: @pythonsu

#1 Март 4, 2022 11:00:20

deadun
Зарегистрирован: 2022-03-04
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Прошу помочь с кодом. Python.

Задача:
На вход программе подаётся натуральное число n, а затем n телефонных номеров, каждый на отдельной строке. Необходимо вывести те номера, которые являються корректными.
Корректными номерами являются:
(xxx) xxx-xxxx ; xxx-xxx-xxxx
некорректный это тот, что не подходит под образец, то есть, без тире и ковычек.

Суть проблемы:
Мой код не работает при коде
n=int(input())
for i in range(n)
xinput())
Потому что, ЕСЛИ один номер неправильный, но при этом другие правильные, то выводит нет.

Готовый код с этой проблемой:
[

 def number_phone(n):
    all_numbers = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"]
    flag_one = False
    flag_two = False
    flag_three = False
    for i in range(n):
        phone_number = input() # (123)-123-12-12
        if phone_number[0] == "(" and phone_number[4] == ")":
            flag_one = True
        else:
            return "Error"
        if phone_number[1:4] and phone_number[6:9] and phone_number[10:12] and phone_number[13:-1] in all_numbers:
            flag_two = True
        else:
            return "Error"
        if phone_number[5] == "-" and phone_number[9] == "-" and phone_number[12] == "-":
            flag_three = True
    if flag_one == flag_two == flag_three == True:
        return "Номер введен верно"
    else:
        return "Номер введен неверно"
print(number_phone(2))

Отредактировано deadun (Март 4, 2022 11:08:54)

Офлайн

#2 Март 4, 2022 20:13:07

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Прошу помочь с кодом. Python.

код конечно ересь языческая…
тем не менее у вас в цикле флаги не сбрасываются.
То есть какой либо из флагов получает тру и пока цикл не закончится его состояние таким и останется



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#3 Март 4, 2022 21:27:25

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1352
Репутация: +  118  -
Профиль   Отправить e-mail  

Прошу помочь с кодом. Python.

 def check_phone(ptn, line):
    if len(ptn) != len(line):# если длина разная False
        return False
    for i, p in zip(line, ptn): # сравниваем поэлементно с шаблоном
        if i == p or p == 'x' and i.isdigit():
            print(i,'<>', p, '   ok')
            continue
        else:
            print(i, '&', p, '-> bad')
            return False
    return True
#
l = '(123) 123-1210'
#
res = check_phone('(xxx) xxx-xxxx', l)
print('______\nres = ', res)
print('=========================')
l2 = '123-1a3-1210'
res2 = check_phone('xxx-xxx-xxxx', l2)
print(res2)

>>>
( <> (    ok
1 <> x ok
2 <> x ok
3 <> x ok
) <> ) ok
<> ok
1 <> x ok
2 <> x ok
3 <> x ok
- <> - ok
1 <> x ok
2 <> x ok
1 <> x ok
0 <> x ok
______
res = True
=========================
1 <> x ok
2 <> x ok
3 <> x ok
- <> - ok
1 <> x ok
a & x -> bad
False

Process finished with exit code 0

Отредактировано xam1816 (Март 4, 2022 21:29:14)

Офлайн

#4 Март 4, 2022 22:38:39

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9873
Репутация: +  853  -
Профиль   Отправить e-mail  

Прошу помочь с кодом. Python.

deadun
Потому что, ЕСЛИ один номер неправильный, но при этом другие правильные, то выводит нет.
Ты сделай две функции. Одна проверяет один номер и просто возвращает True или False для него, а другая проверяет все номера, используя эту первую функцию.

Флажки называй осмысленно:
не flag_one, а f_has_parens
не flag_two, а f_has_numbers
не flag_three, а f_has_dashes

Потом, при их проверках, они будут читаемыми, не нужно будет сидеть и разгадывать загадки, вспоминать, что там было. Часто и код такой можешь писать не ты, тогда ты вообще не вспомнишь, что означают эти флаги с неинформативными именами.



Отредактировано py.user.next (Март 4, 2022 22:40:43)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version