Форум сайта python.su
Задача:
На вход программе подаётся натуральное число 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)
Офлайн
код конечно ересь языческая…
тем не менее у вас в цикле флаги не сбрасываются.
То есть какой либо из флагов получает тру и пока цикл не закончится его состояние таким и останется
Офлайн
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)
Офлайн
deadunТы сделай две функции. Одна проверяет один номер и просто возвращает True или False для него, а другая проверяет все номера, используя эту первую функцию.
Потому что, ЕСЛИ один номер неправильный, но при этом другие правильные, то выводит нет.
Отредактировано py.user.next (Март 4, 2022 22:40:43)
Офлайн