Вот пример:Программа определяет корректность открытия и закрытия скобок, тоесть если n=")((((" на первом шаге цикла k примет значения -1 и дальше считать скобки не нужно, так как скобки поставлены с ошибкой. Если n="(())" k принимает 1 2 1 0 (по циклу)
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')
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)
Программа определяет корректность открытия и закрытия скобок, тоесть если n=")((((" на первом шаге цикла k примет значения -1 и дальше считать скобки не нужно, так как скобки поставлены с ошибкой. Если n="(())" k принимает 1 2 1 0 (по циклу)k в начале равно нулю. В исходной строке 3 открывающиеся скобки. На открывающейся скобке k увеличивается на 1. Как оно может стать отрицательным?
Спасибо. Помогло в том что я не знал функцию прерывание цикла "break" ( на курсе где учу питона не показывали её). Теперь понятно.Вот пример:
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')
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