2015-08-02 3 views
0

Новичок здесь. Что-то не так с моим кодом. Пока цикл не заканчивается. Где я неправ?пока петля не ломается, не может найти ошибку

def check(x): # x is defaultdict(list) 
    a = sorted(x , reverse=True) 
    j = 0 
    while (j<len(a)): 
     c = d[a[j]] # current list 
     l = len(c) # current list length 
     m = 0 
     while (m<l) : 
      if c[m] == m or c[m] == n-1-m : 
       continue 
      else: 
       return "No" 
      m = m + 1 
     j = j + 1 
    return "Yes" 
+1

Подсказка №1: почему, по вашему мнению, она прекратится? – DSM

+0

, когда внутренний контур m достигает l, а внешний контур j достигает len (a), они останавливаются. – Charan

+1

Вы никогда не достигаете 'm = m + 1', вы либо продолжаете, либо возвращаетесь –

ответ

3

Я предполагаю, что это вопрос -

while (m<l) : 
    if c[m] == m or c[m] == n-1-m : 
     continue 

Lets предположим, что мы имеем значение, где c[m] равно m. Вы просто продолжаете цикл while, не меняя m (или c, хотя я догадываюсь, что c изменить нельзя), поэтому в следующий раз он возвращается к этому состоянию, снова c[m] равен m, так как ни один из них не имеет изменено, и снова вы делаете continue, чтобы продолжить цикл. И это продолжается вечно.

continue инструкция не выполняет оставшуюся часть цикла while, она продолжается со следующей итерацией цикла.

Я думаю, вы хотите увеличить m, даже если это условие верно? , Если так попробовать что-то вроде -

while (m<l) : 
    if c[m] != m and c[m] != n-1-m : 
     return "No" 
    m = m + 1 

Я не уверен, что если есть какие-либо другие вопросы в вашем коде, так как мы действительно не знаем, что его должен делать.

2

Похоже, что "по-прежнему" утверждение вызывает бесконечную петлю, пропуская "M = M + 1" линия

Смежные вопросы