Foros del Web » Programando para Internet » Python »

Duda con pequeño codigo de python

Estas en el tema de Duda con pequeño codigo de python en el foro de Python en Foros del Web. Hola como están, quiero mostrarles este código y me digan cual es mejor los dos hacen lo mismo la unica diferencia es que uno es ...
  #1 (permalink)  
Antiguo 20/10/2011, 12:51
 
Fecha de Ingreso: octubre-2011
Ubicación: conoceme y averigualo
Mensajes: 64
Antigüedad: 13 años, 2 meses
Puntos: 2
Mensaje Duda con pequeño codigo de python

Hola como están, quiero mostrarles este código y me digan cual es mejor los dos hacen lo mismo la unica diferencia es que uno es desarrollado por una persona x y el otro por mi.

Ejercicio listo echo por un experto.
Código PHP:
def suma(x1,x2,x3):
    if 
x1>x2 and x1>x3:
        if 
x2>x3:
            return 
x1+x2
        
else:
            return 
x1+x3
    elif x2
>x3:
        if 
x3>x1:
            return 
x2+x3
        
else:
            return 
x2+x1
    
else:
        if 
x2>x1:
            return 
x3+x2
        
else:
            return 
x3+x1

print suma(100,200,30
Yo desarrolle este:

Código PHP:
def en(x1,x2,x3):
    if 
x1>x3 and x2>x3:
            return 
x1+x2
    elif x1
>x2 and x3>x2:
            return 
x1+x3
    
else:
        return 
x2+x3 

print en(9,11,7
Si pueden ver lo que yo aplique fue el orden de los sumandos no altera el producto y ahorre mucho código. Cual piensan que esta mejor, aunque no digo que el mio este bien echo según la sintaxis que tenga python pero me funciono.
  #2 (permalink)  
Antiguo 20/10/2011, 13:15
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: Duda con pequeño codigo de python

En el tuyo el indentado no esta del todo uniforme, pero son cuestiones de estilo.

La explicación de por que ambos funcionan es simple.

El primer programa genera todos los posibles casos esto es P(3) = 3! = 6 (tiene 6 returns).

El segundo programa es básicamente como el primero pero te das cuenta que hay casos repetidos, por ejemplo x2 + x1 es lo mismo que x1 + x2, así que eliminas eso. Tambien checas todos los posibles casos pero sin importar el orden, ni las repeticiones, lo que da C(3, 2) = 3
  #3 (permalink)  
Antiguo 20/10/2011, 13:22
 
Fecha de Ingreso: octubre-2011
Ubicación: conoceme y averigualo
Mensajes: 64
Antigüedad: 13 años, 2 meses
Puntos: 2
Respuesta: Duda con pequeño codigo de python

Gracias razpeitia, lo del indentado es porque copie y pegue y los espacios quedaron mas corridos,y gracias ya entendi muy bien, un saludo.
  #4 (permalink)  
Antiguo 21/10/2011, 10:34
 
Fecha de Ingreso: octubre-2011
Mensajes: 3
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Duda con pequeño codigo de python

Según entendi, tu función tiene que devolver la suma de los dos números más grandes. Se puede hacer mas conciso:

Código Python:
Ver original
  1. def suma(x1, x2, x3):
  2.     s = sorted((x1, x2, x3), reverse=True)
  3.     return s[0] + s[1]
  #5 (permalink)  
Antiguo 21/10/2011, 10:47
 
Fecha de Ingreso: octubre-2011
Mensajes: 3
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Duda con pequeño codigo de python

Va una versión más genérica que te sirve para cualquier cantidad de sumandos:

Código Python:
Ver original
  1. def suma(lista, cant=2):
  2.     """ Suma los 'cant' items mas grandes de la lista"""
  3.     l2 = sorted(lista, reverse=True)
  4.     return sum(l2[:cant])
  #6 (permalink)  
Antiguo 21/10/2011, 10:48
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: Duda con pequeño codigo de python

Puedes ponerlo en una linea.
Código Python:
Ver original
  1. def suma(x1, x2, x3): return sum(sorted((x1, x2, x3), reverse=True)[:2])

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:49.