Commits

Francisco Souza committed 9d362a5

Acerto na endentação dos códigos Python do Capítulo 13.

Comments (0)

Files changed (1)

edicao_1.1/capitulo_13.rst

 
 Aqui está a segunda versão corrigida da função::
 
-	def somaHorario(t1, t2): 
-		soma = Horario() 
-		soma.horas = t1.horas + t2.horas 
-		soma.minutos = t1.minutos + t2.minutos 
-		soma.segundos = t1.segundos + t2.segundos 
+  def somaHorario(t1, t2): 
+    soma = Horario() 
+	soma.horas = t1.horas + t2.horas 
+	soma.minutos = t1.minutos + t2.minutos 
+	soma.segundos = t1.segundos + t2.segundos 
 
-		if soma.segundos >= 60: 
-			soma.segundos = soma.segundos - 60 
-			soma.minutos = soma.minutos + 1 
+	if soma.segundos >= 60: 
+      soma.segundos = soma.segundos - 60 
+	  soma.minutos = soma.minutos + 1 
 
-		if soma.minutos >= 60: 
-			soma.minutos = soma.minutos - 60 
-			soma.horas = soma.horas + 1 
+	if soma.minutos >= 60: 
+	  soma.minutos = soma.minutos - 60 
+	  soma.horas = soma.horas + 1 
 
-		return soma 
+	return soma 
 
 Apesar desta função estar correta, ela está começando a ficar grande. Depois vamos sugerir uma aproximação alternativa que rende um código menor.
 
 A função ``incrementar``, que adiciona um número dado de segundos para um objeto ``Horario``, poderia ser escrita quase naturalmente como um modificador. Um rascunho tosco da função seria algo parecido com isso::
 
 
-	def incrementar(horario, segundos): 
-		horario.segundos = horario.segundos + segundos 
+  def incrementar(horario, segundos): 
+	horario.segundos = horario.segundos + segundos 
 
-		if horario.segundos >= 60: 
-			horario.segundos = horario.segundos - 60 
-			horario.minutos = horario.minutos + 1 
+	if horario.segundos >= 60: 
+	  horario.segundos = horario.segundos - 60 
+	  horario.minutos = horario.minutos + 1 
 
-		if horario.minutos >= 60: 
-			horario.minutos = horario.minutos - 60 
-			horario.horas = horario.horas + 1 
+	if horario.minutos >= 60: 
+	  horario.minutos = horario.minutos - 60 
+	  horario.horas = horario.horas + 1 
 
 
 A primeira linha executa a operação básica, o resto trata os caso especiais que vimos antes. 
 Esta função está correta? O que aconteceria se o parâmetro segundos for muito maior que sessenta? Nesse caso, não é suficiente transportar apenas uma vez, teríamos de continuar fazendo isso até que segundos seja menor que sessenta. Uma solução seria substituir os comando ``if`` por comandos ``while``::
 
 
-	def incrementar(horario, segundos): 
-		horario.segundos = horario.segundos + segundos 
+  def incrementar(horario, segundos): 
+	horario.segundos = horario.segundos + segundos 
 
-		while horario.segundos >= 60: 
-			horario.segundos = horario.segundos - 60 
-			horario.minutos = horario.minutos + 1 
+	while horario.segundos >= 60: 
+	  horario.segundos = horario.segundos - 60 
+	  horario.minutos = horario.minutos + 1 
 
-		while horario.minutos >= 60: 
-			horario.minutos = horario.minutos - 60 
-			horario.horas = horario.horas + 1 
+	while horario.minutos >= 60: 
+	  horario.minutos = horario.minutos - 60 
+	  horario.horas = horario.horas + 1 
 
 
 Esta função agora está correta, mas não é a solução mais eficiente. 
 
 Agora, tudo que precisamos é uma maneira de converter de um inteiro para um objeto ``Horario``. Que tal a função ``criarHorario``?::
 
- def criarHorario(segundos): 
-     horario = Time() 
-     horario.horas = segundos/3600 
-     segundos = segundos - horario.horas * 3600 
-     horario.minutos = segundos/60 
-     segundos = segundos - horario.minutos * 60 
-     horario.segundos = segundos 
-     return horario 
+  def criarHorario(segundos): 
+    horario = Time() 
+    horario.horas = segundos/3600 
+    segundos = segundos - horario.horas * 3600 
+    horario.minutos = segundos/60 
+    segundos = segundos - horario.minutos * 60 
+    horario.segundos = segundos 
+    return horario 
 
 Você vai precisar pensar um pouco para se convencer que esta técnica de converter de uma base para outra é correta. Assumindo que você está convencido, você pode usar essas funções para reescrever ``somaHorario``::
 
- def somaHorario(t1, t2): 
-     segundos = converterParaSegundos(t1) + converterParaSegundos(t2) 
-     return criarHorario(segundos)
+  def somaHorario(t1, t2): 
+    segundos = converterParaSegundos(t1) + converterParaSegundos(t2) 
+    return criarHorario(segundos)
 
 Esta versão é muito mais curta que a original, e é muito mais fácil para demonstrar que está correta (assumindo,  como sempre, que as funções que são chamadas estão corretas).