Portuguese, Brazilian subtitles

← 02-46 Break Solution

02-46 break - Solução

Get Embed Code
8 Languages

Showing Revision 2 created 08/01/2014 by Fran Ontanaya.

  1. Aqui está a resposta.
  2. A primeira é equivalente.
  3. A razão para isso é que temos nosso código aqui, que tem if False.
  4. False nunca será True -- então, nunca executaremos o break de fato --
  5. nunca executamos este código.
  6. Simplesmente executamos o comando novamente e teremos a mesma coisa com que tínhamos antes:
  7. toda vez que o teste for True, executamos o comando.
  8. A segunda não é equivalente, e a razão é que o break irá
  9. interromper o loop.
  10. Se o loop executa mais de uma vez, nesta versão --
  11. se passamos pelo loo 2 vezes --
  12. neste caso, podemos passar pelo comando apenas uma vez,
  13. já que, depois de executar o comando uma vez, chegamos ao break, e então terminamos.
  14. A teerceira não é equivalente. Aqui temos while True, que irá executar
  15. indefinidamente, exceto que temos o break, e isso iria pará-lo.
  16. O problema é que a condição e teste para o break é a mesma que
  17. a condição de teste para o while, mas ela deveria ser o oposto.
  18. No while, continuamos executando enquanto a condição de teste é True.
  19. Da maneira como escrevemos o código aqui, se a comdição de teste for True, nós paramos.
  20. Para que isso fosse equivalente, o que deveríamos ter escrito, ao in'ves disso,
  21. seria a condição de teste oposta: se tivéssemos if not,
  22. que muda True para False e False para True, depois a condição de teste,
  23. depois o break, isso seria equivalente ao loop original.
  24. O que temos não é.
  25. A última é mais complicada.
  26. Esta é, de fato, sempre equivalente ao loop original.
  27. A razão para isso é que, se pensamso na execução,
  28. no loop original, se a condição de teste for True, nós temos que executar o comanso S,
  29. e depois continuar o loop.
  30. Se a condição de teste for True uma segunda vez, executamos S de novo,
  31. e continuamos assim.
  32. Se olharmos para o que acontece aqui -- bem, se a condição de teste for Tru,
  33. nós excutamos S;
  34. se a condição e teste for True novamente, nós executamos o teste, e continuamos assim.
  35. Isso tem o mesmo comportamento.
  36. Podemos verificar isso também no caso em que a condição de teste
  37. não é True.
  38. Aqui, se a condição de teste for True, executamos S,
  39. e se ela não for True na segunda vez, então terminamos o loop,
  40. e continuamos.
  41. Neste caso, se a condição de teste for Trur na primeira vez, nós executamos S;
  42. e se ela não é True na segunda vez, então vamos para o else.
  43. Portanto, se ela não é True, nós vamos para o else e então executamos o break,
  44. e o break desvia para fora do loop.
  45. Nós temos exatamente o mesmo comportamento no qual exectamos T uma vez, depois
  46. executamos S, e então executamos T.
  47. Nós não executamos S de novo, e saímos para fora do loop, para continuar.
  48. Então, essas duas são equivalente e as outras duas são diferentes.