2014-10-08 5 views
-2
for n in range(3,10): 
    for m in range (3,n): 
     if n%m==0: 
      print(n, "not prime") 
      break 
    else : 
     print(n,"prime") 

for n in range(3,10): 
    for m in range (3,n): 
     if n%m==0: 
      print(n, "not prime") 
     else : 
      print(n,"prime") 

Я хочу знать разницу между использованием еще и в кодеВ чем разница между двумя программами?

+1

Просьба рассмотреть отступы, неясно, что вы имеете в виду. – bereal

+0

Оператор 'break' фактически вырывается из самого маленького замкнутого цикла' for' или 'while'. –

+0

Возможный дубликат [Почему python использует «else» после циклов while и while?] (Http://stackoverflow.com/questions/9979970/why-does-python-use-else-after-for-and-while- петли) – KillianDS

ответ

-1

Это хак для раннего разорвать внешний контур, в настоящее время не синтаксическую ошибку. Например,

https://stackoverflow.com/a/654002/921082

Но я бы не советовал вам делать это, так как она часто ломается понимание. Вы всегда можете использовать флаг True/False, чтобы остановить внешний цикл, если внутренний цикл остановлен.

+0

Это ... странно. Не имел представления. Значит, он переходит в другое, только если мы не сломаемся? На самом деле это классно; вы можете закодировать чистое предложение в цикле, используя else, другими словами. –

+1

-1: 1) это не взломать (это действительно стандартная функция python, хотя и странная), и 2) выход из цикла - это то, что делает оператор break, вы вообще не объясняете, что такое 'else' действительно, это был вопрос. – KillianDS

+0

Определенно не рубить! –

0

Код Пример 1: Этот код прерывается из цикла, как только мы идентифицируем, что n не может быть простым числом. Заявление еще связано с петлей «для т», и выполняет каждый раз, когда цикл выходит нормально (т.е. что он доходит до конца диапазона без перерыва)

for n in range(3,10): 
    for m in range (3,n): 
     if n%m==0: 
      print(n, "not prime") 
      break 
    else : 
     print(n,"prime") 

Это использование еще не взлома (как было предложено в другом месте - взлом - это то, что не должно действительно работать, но делает) - это намеренно разработанная часть языка и предназначена именно для таких случаев.

Код Пример 2: здесь код не прерывается, когда мы знаем, что n не является простым, а else здесь ассоциируется с if и выполняется всякий раз, когда условие в выражении if ложно (т. Е. Когда n% m! = 0). Эта версия ошибочна, так как потенциально вам скажут, что заданное число - простое, а не просто несколько раз.

for n in range(3,10): 
    for m in range (3,n): 
     if n%m==0: 
      print(n, "not prime") 
     else : 
      print(n,"prime") 

В резюме - Код примера 1 является правильным, в том, что он правильно передает для каждого числа от 3 до 9, является ли это простым или нет. Строго говоря, внутренняя петля может быть:

for m in range(3, n/2): 

без потери функциональности.

0
for n in range(3,10): 
    for m in range (3,n): 
     if n%m==0: 
      print(n, "not prime") 
      break 
    else: 
     print(n,"prime") 

выход: -

(3, 'prime') 
(4, 'prime') 
(5, 'prime') 
(6, 'not prime') 
(7, 'prime') 
(8, 'not prime') 
(9, 'not prime') 

здесь break сломать внутренний цикл и выполнить еще заявление. в то время как во 2-м

for n in range(3,10): 
    for m in range (3,n): 
     if n%m==0: 
      print(n, "not prime") 
     else : 
      print(n,"prime") 

поток вывода: -

(4, 'prime') 
(5, 'prime') 
(5, 'prime') 
(6, 'not prime') 
(6, 'prime') 
(6, 'prime') 
(7, 'prime') 
(7, 'prime') 
(7, 'prime') 
(7, 'prime') 
(8, 'prime') 
(8, 'not prime') 
(8, 'prime') 
(8, 'prime') 
(8, 'prime') 
(9, 'not prime') 
(9, 'prime') 
(9, 'prime') 
(9, 'prime') 
(9, 'prime') 
(9, 'prime') 

она продолжается во внутреннем цикле. проверить это для for else статей.

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