2016-09-16 7 views
0

(Я Python новичку, поэтому приносим извинения за этот основной вопрос, который я по какой-то причине не смог найти ответ на.)Python перерыв, если заявление еще

У меня есть вложенное, если заявление с, если утверждение блока if/else. В вложенный оператор if, если он соответствует критериям, я хотел бы, чтобы код разбился на инструкцию else. Когда я помещаю перерыв в вложенном if, хотя, я не уверен, что он нарушает оператор else.

Я хотел бы найти самую длинную подстроку в алфавитном порядке данной строки, s. Вот мой код:

s = 'lugabcdeczsswabcdefghij' 
longest = 1 
alpha_count = 1 
longest_temp = 1 
longest_end = 1 
for i in range(len(s)-1): 
    if (s[i] <= s[i+1]): 
     alpha_count += 1 
     if (i+1 == (len(s)-1)): 
      break 
    else: 
     longest_check = alpha_count 
     if longest_check > longest: 
      longest = longest_check 
      longest_end = i+1 
     alpha_count = 1 
print(longest) 
print('Longest substring in alphabetical order is: ' + 
    s[(longest_end-longest):longest_end]) 

(.! Да, я понимаю, что это, конечно, много ненужного кода здесь все еще учится)

При этом вложенная если:

if (i+1 == (len(s)-1)): 
      break 

... если это правда, Я хотел бы, чтобы код перешел к выражению «else». Тем не менее, похоже, что он не работает в этом разделе. Любая помощь?

+0

break используется в операторах цикла. Я думаю, вы хотите использовать флаги. –

+0

Операция 'break' используется только для прерывания while и для циклов: см. Https://docs.python.org/3/reference/simple_stmts.html#break Что вы хотите? Способ пойти в блок else, если вы столкнулись с вашим текущим перерывом? –

+0

@ XavierC.Да, это именно то, что я хочу. Если я столкнулся с текущим перерывом, я бы хотел пойти в блок else, который я написал. – Jim

ответ

1

break Используется, когда вы хотите вырваться из циклов, если нет. Вы можете иметь другое, если заявление, которое выполняет эту логику для вас, как это:

if (s[i] <= s[i+1]): 
    alpha_count += 1 
elif (i+1 == (len(s)-1)) or (add boolean expression for else part in here too something like s[i] > s[i+1]): 
    longest_check = alpha_count 
    if longest_check > longest: 
     longest = longest_check 
     longest_end = i+1 
    alpha_count = 1 

Что этот фрагмент делает оценивает две булевы, оба для еще части. Однако он говорит, что либо выполняется в случае else с первого, либо в случае (i+1 == (len(s)-1))

+0

Я считаю, что первый оператор if должен иметь и boolean: if (s [i] <= s [i + 1]) и (i + 1 <(len (s) -1)): alpha_count + = 1 elif (s [i] <= s [i + 1]) и (i + 1 == (len (s) -1)): – Jim

+0

, если вы хотите, чтобы первый выполнялся всякий раз, когда 'i + 1 < (len (s) - 1) ' – Kafo

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