Не работает

PythonStudent

Новичок
Пользователь
Авг 5, 2020
5
0
1
1596637736380.png
Здравствуйте уважаемые специалисты. Переменная "k" не берет значения из цыкла фор
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Программа определяет корректность открытия и закрытия скобок, тоесть если n=")((((" на первом шаге цикла k примет значения -1 и дальше считать скобки не нужно, так как скобки поставлены с ошибкой. Если n="(())" k принимает 1 2 1 0 (по циклу)
Вот пример:
Python:
n = "dsadsa((( "
k = 0
for i in n:
    if i == '(':
        k += 1
    elif i == ')':
        k -= 1
    # если закрывающая скобка перед открывающей
    if k < 0:
        print('No')
        break
else:
    # если скобки закрыты корректно
    if k == 0:
        print('Yes')
    else:
        print('No')
 

alext

Популярный
Пользователь
Май 10, 2020
288
66
28
Вообще нет желания перепечатывать код с картинки, не понимаю, кто мешал вставить его текстом.
Вопрос такой: что значит "не берет"?
 
  • Мне нравится
Реакции: Student

PythonStudent

Новичок
Пользователь
Авг 5, 2020
5
0
1
Python:
import sys
#n = sys.argv[1]
n="dsadsa((( "
k=0
while k>=0:  
    for i in range(len(n)):
        if n[i]=="(":
            k+=1
        elif n[i]==")":
            k-=1
if k==0:
    print("YES")
else:
    print("NO")
print(k)
#по логике: если переменная k примет отрицательное значение, то подсчет можна прекратить и она примет значение (-1)
 

alext

Популярный
Пользователь
Май 10, 2020
288
66
28
k в начале равно нулю. В исходной строке 3 открывающиеся скобки. На открывающейся скобке k увеличивается на 1. Как оно может стать отрицательным?
 

PythonStudent

Новичок
Пользователь
Авг 5, 2020
5
0
1
k в начале равно нулю. В исходной строке 3 открывающиеся скобки. На открывающейся скобке k увеличивается на 1. Как оно может стать отрицательным?
Программа определяет корректность открытия и закрытия скобок, тоесть если n=")((((" на первом шаге цикла k примет значения -1 и дальше считать скобки не нужно, так как скобки поставлены с ошибкой. Если n="(())" k принимает 1 2 1 0 (по циклу)
 

PythonStudent

Новичок
Пользователь
Авг 5, 2020
5
0
1
Вот пример:
Python:
n = "dsadsa((( "
k = 0
for i in n:
    if i == '(':
        k += 1
    elif i == ')':
        k -= 1
    # если закрывающая скобка перед открывающей
    if k < 0:
        print('No')
        break
else:
    # если скобки закрыты корректно
    if k == 0:
        print('Yes')
    else:
        print('No')
Спасибо. Помогло в том что я не знал функцию прерывание цикла "break" ( на курсе где учу питона не показывали её). Теперь понятно.
Не непонятно почему в моём коде не правильно работает "while", по моей логике "while" прекращает роботу цикла если k примет отрицательное значение и оставляет его "-1" то есть подсчет скобок прекратиться
 

alext

Популярный
Пользователь
Май 10, 2020
288
66
28
k = 0
k >= 0? да
первая скобка в строке в твоем коде - открывающаяся, k += 1, k == 1.
k >= 0? да
вторая скобка тоже открывающаяся, k += 1, k == 2
...
k == 3
строка закончилась.
цикл while продолжается пока условие верное, и k >= 0 верно, т.к. к этому моменту k == 3. цикл продолжается бесконечно.
Тебе не нужен тут while, просто внутри for засунь if k < 0: break
 

PythonStudent

Новичок
Пользователь
Авг 5, 2020
5
0
1
k = 0
k >= 0? да
первая скобка в строке в твоем коде - открывающаяся, k += 1, k == 1.
k >= 0? да
вторая скобка тоже открывающаяся, k += 1, k == 2
...
k == 3
строка закончилась.
цикл while продолжается пока условие верное, и k >= 0 верно, т.к. к этому моменту k == 3. цикл продолжается бесконечно.
Тебе не нужен тут while, просто внутри for засунь if k < 0: break


n = "dsadsa((( " это просто исходные данные.
программа проверяет корректность закрытие скобок
например
n = ")(" в данном примере k примет значение -1 и цикл не будет продолжать подсчет
относительно break, в курсе в котором я учу питон упустили этот момент и я пытался сделать его через while и у меня не получалось
все уже понял
спасибо всем кто ответил.
 

Форум IT Специалистов