Найти - Пользователи
Полная версия: Прошу помочь с кодом. Python.
Начало » Python для новичков » Прошу помочь с кодом. Python.
1
deadun
Задача:
На вход программе подаётся натуральное число 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))
ZerG
код конечно ересь языческая…
тем не менее у вас в цикле флаги не сбрасываются.
То есть какой либо из флагов получает тру и пока цикл не закончится его состояние таким и останется
xam1816
 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
py.user.next
deadun
Потому что, ЕСЛИ один номер неправильный, но при этом другие правильные, то выводит нет.
Ты сделай две функции. Одна проверяет один номер и просто возвращает True или False для него, а другая проверяет все номера, используя эту первую функцию.

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

Потом, при их проверках, они будут читаемыми, не нужно будет сидеть и разгадывать загадки, вспоминать, что там было. Часто и код такой можешь писать не ты, тогда ты вообще не вспомнишь, что означают эти флаги с неинформативными именами.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB