Foros del Web » Programando para Internet » Python »

Urgente porfavor!!!

Estas en el tema de Urgente porfavor!!! en el foro de Python en Foros del Web. Llevo algunas semanas trabajando con python para un ramo de carrera, pues como veran me he topado con algunas dificultades, tb es primera vez que ...
  #1 (permalink)  
Antiguo 08/09/2010, 17:00
 
Fecha de Ingreso: septiembre-2010
Mensajes: 18
Antigüedad: 13 años, 7 meses
Puntos: 0
Urgente porfavor!!!

Llevo algunas semanas trabajando con python para un ramo de carrera, pues como veran me he topado con algunas dificultades, tb es primera vez que uso un foro para pedir ayuda...espero poder encontrar solución para mis dificultades

Bueno, la primera es la siguiente:
lo que se me pide es hacer un programa que genere problemas de asignación, esto es programación lineal entera(PLE), si bien he resuelto parte del problema me topo cuando debo hacer las restricciones del problema de PLE las cuales son
x11 + x12 + x13=1
x21 + x22 + x23=1
x31 + x32 + x33=1

yo trate de hacer lo siguiente:

res_h=[]
for i in range(n):
for j in range(m):
aux=str(i+1)+str(j+1)
res_h=res_h+['X'+aux]+['+']
res_h.pop()
res_h.append('= 1')

for i in range(len(res_h)):
print res_h[i],

ahora de que manera puedo hacer para imprimir en pantalla como lo muestro arriba, porque si lo imprimo de la manera como lo hice en el codigo me sale este resultado:
X11 + X21 + X31 = 1 X12 + X22 + X32 = 1 X13 + X23 + X33 = 1

Ojala que me puedan ayudar, mi segunda dificultad es que debo transformar un codigo en c a un codigo en python, pero esto lo necesito explicar de forma mas personalizada, asi q les dejo mi correo por si alguien desea ayudar...
[email protected]
  #2 (permalink)  
Antiguo 08/09/2010, 21:37
Avatar de perryjr  
Fecha de Ingreso: julio-2010
Ubicación: Granada, Spain, Spain
Mensajes: 190
Antigüedad: 13 años, 9 meses
Puntos: 27
Respuesta: Urgente porfavor!!!

Hola, te mando e-mail. de todas maneras lo digo aquí para quien lo busque. el prblema es:
Código Python:
Ver original
  1. for i in range(len(res_h)):
  2.   print res_h[i],

que debe ser:
Código Python:
Ver original
  1. for i in range(len(res_h)):
  2.   print res_h[i]

¿Ves? La coma al final significa que no imprime un salto de línea cuando termina el print
Además puedes meter saltos de línea adicionales de dos maneras:
Código Python:
Ver original
  1. print
  2. print "\n\n\n" # tres saltos de línea
  #3 (permalink)  
Antiguo 08/09/2010, 21:47
 
Fecha de Ingreso: septiembre-2010
Mensajes: 18
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Urgente porfavor!!!

pero que al sacar la como lo que me imprime es esto:

X11
+
X21
+
X31
= 1
X12
+
X22
+
X32
= 1
X13
+
X23
+
X33
= 1

y lo que necesito es que imprima de esta manera
x11 + x12 + x13=1
x21 + x22 + x23=1
x31 + x32 + x33=1

mmm...que puedo hacer entonces???
  #4 (permalink)  
Antiguo 08/09/2010, 21:59
Avatar de perryjr  
Fecha de Ingreso: julio-2010
Ubicación: Granada, Spain, Spain
Mensajes: 190
Antigüedad: 13 años, 9 meses
Puntos: 27
Respuesta: Urgente porfavor!!!

Código Python:
Ver original
  1. n = 3
  2. m = 3
  3.  
  4. for i in range(n):
  5.   aux = ''
  6.   for j in range(m):
  7.    aux += 'X' + str(i + 1) + str(j + 1) + ' + '
  8.    
  9.   aux = aux[:-1] # quito el caracter del final
  10.   aux += '= 1'
  11.  
  12.   print aux
__________________
I (L) Google
  #5 (permalink)  
Antiguo 08/09/2010, 22:11
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Urgente porfavor!!!

Ania_ Bienvenida a ForosDelWeb

Primero que nada debo aclararte que no es buena idea dejar por hay tu correo por que hay spiders, que se encargan de recorrer la web y capturar texto que se ajuste a ciertos patrones (entre ellos direcciones de correos electronicos).

Otra cosa pon titulos descriptivos para tu problema.

Ahora volviendo a tu problema, si lo unico que quieres hacer es imprimir texto haces un simple:
Código Python:
Ver original
  1. n = 3
  2. m = 3
  3. for i in range(n):
  4.     print ' + '.join("X%d%d" % (i+1, j+1) for j in range(m)), "= 1"

Aqui tienes una versión que funciona en una linea (one-line)
Código Python:
Ver original
  1. print ' = 1\n'.join( ' + '.join("X%d%d" % (i+1, j+1) for i in range(m)) for j in range(n) ), "= 1"

Última edición por razpeitia; 08/09/2010 a las 22:31
  #6 (permalink)  
Antiguo 08/09/2010, 22:40
 
Fecha de Ingreso: septiembre-2010
Mensajes: 18
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Urgente porfavor!!!

Muchas gracias Razpeitia por los consejos, la verdad que uno tiende en caer en torpezas derrepente, pero bueno uno nunca deja de aprender...

PerryJr: Es justamente lo q necesitaba, aunque lo probé y aun me sigue saliendo el caracter '+', pero eso es un detalle, lo escencial me ayudaste a resolverlo...Gracias!!!
  #7 (permalink)  
Antiguo 08/09/2010, 23:15
 
Fecha de Ingreso: septiembre-2010
Mensajes: 18
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Urgente porfavor!!!

razpeitia, si bien tu codigo imprime lo que quiero, me gustaria que me explicara q es lo q hace esa línea de codigo
Código Python:
Ver original
  1. print ' + '.join("X%d%d" % (i+1, j+1) for j in range(m)), "= 1"
principalmente que hace el .join
  #8 (permalink)  
Antiguo 09/09/2010, 00:33
AxL456
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Urgente porfavor!!!

Cita:
Iniciado por Ania_ Ver Mensaje
razpeitia, si bien tu codigo imprime lo que quiero, me gustaria que me explicara q es lo q hace esa línea de codigo
Código Python:
Ver original
  1. print ' + '.join("X%d%d" % (i+1, j+1) for j in range(m)), "= 1"
principalmente que hace el .join
Código Python:
Ver original
  1. print ' = 1\n'.join( ' + '.join("X%d%d" % (i+1, j+1) for i in range(m)) for j in range(n) ), "= 1"

print es para imprimir

str.join(list) es metodo que une los elementos de una sucesion de cadenas (sea una lista, o el resultado de una iteracion) colocando entre cada elemento la cadena con la cual se llama a dicho metodo (en este caso str)

para ser un poco mas claro aqui te dejo un ejemplo:
Código Python:
Ver original
  1. >>> ================================ RESTART ================================
  2. >>> lista = ["lunes", "martes"]
  3. >>> print "-".join(lista)
  4. lunes-martes
  5. >>>

para el codigo que coloco razpeita, el primer .join une todos los elementos colocando la cadena ' = 1\n' en el medio de cada uno de los elementos a unir, sabiendo que \n cuando se escribe "texto" significa "Fin de linea" o "End Of Line" en ingles (en pocas palabras coloca el resto del texto en una linea nueva)

el primer join trabaja bajo el resultado del segundo join el cual a su vez su argumento es una funcion iterable.

quizas lo puedas ver mejor de la siguiente manera:
Código Python:
Ver original
  1. m = 3
  2. n = 3
  3. lista1 = []
  4. for x in range(m):
  5.         lista2 = []
  6.         for y in range(n):
  7.                 var = "X%s%s" % (y+1, x+1)
  8.                 lista2.append(var)
  9.         lista1.append(" + ".join(lista2))
  10. print " = 1\n".join(lista1) + " = 1\n"

el resultado es el mismo que ejecutar lo que razpeita te coloco:
Código Python:
Ver original
  1. print ' = 1\n'.join( ' + '.join("X%d%d" % (i+1, j+1) for i in range(m)) for j in range(n) ), "= 1"

como puedes ver el codigo de razpeita te ahorra 9 lineas, pero si no estas acostumbrado a leer ese tipo de codigo te puedes enredar, ya es decisión del programador escribir el codigo de la manera que mas vea conveniente..
  #9 (permalink)  
Antiguo 09/09/2010, 10:09
 
Fecha de Ingreso: septiembre-2010
Mensajes: 18
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Urgente porfavor!!!

ahhhh!!!, mucho mejor asi...Gracias!!!!

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 19:53.