Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Meta en 13 Octubre 2010, 05:38 am



Título: [Python] - while
Publicado por: Meta en 13 Octubre 2010, 05:38 am
Hola:

Por fin estoy con los while, ya va siendo hora. Este PDF de Python enseña muy bien, aún así hay ejercicios que uno se queda pescando...

Citar
Hacer un programa que muestre todos los múltiplos de 6 entre 6 y 150, ambos inclusive.

Muchas veces no me deja claro que es lo que ha que hacer. Por lo que entiendo arriba, hay que hacer un bucle while. Haber como hay que hacer el múltiplo que piden.

Por ahora empecé así:

Código
  1. i = 1
  2. while i <= 150:
  3.    i *= 6
  4.    print i

Citar
6
36
216

Esto suena a raro, no creo que sea así lo que me está pidiendo.

Código
  1. i = 1
  2. while i <= 150:
  3.    i += 6
  4.    print i
  5.  

Citar
7
13
19
25
31
37
43
49
55
61
67
73
79
85
91
97
103
109
115
121
127
133
139
145
151

Saludo.


Título: Re: [Python] - while
Publicado por: Shell Root en 13 Octubre 2010, 05:54 am
Creo que debería ser así,
Código
  1. i = 0
  2. while(i <= 150):
  3.    i += 6
  4.    print i
ó
Código
  1. i = 6
  2. while(i <= 150):
  3.    print i
  4.    i += 6

Resultado,
Código
  1. shellroot@alex-laptop:~/Escritorio$ python PoC.py
  2. 6
  3. 12
  4. 18
  5. 24
  6. 30
  7. 36
  8. 42
  9. 48
  10. 54
  11. 60
  12. 66
  13. 72
  14. 78
  15. 84
  16. 90
  17. 96
  18. 102
  19. 108
  20. 114
  21. 120
  22. 126
  23. 132
  24. 138
  25. 144
  26. 150
  27. 156


Título: Re: [Python] - while
Publicado por: .:WindHack:. en 13 Octubre 2010, 06:02 am
Ibas por buen camino, simplemente estabas inicializando mal la variable.  :D


Título: Re: [Python] - while
Publicado por: [L]ord [R]NA en 13 Octubre 2010, 06:28 am
Meta te recomiendo que detengas un poco el aprendizaje de Python y tomes un pequeño libro de fundamentos de programacion o incluso te pongas a solucionar problemas de forma sistematica, la mayoria de los problemas que tienes no radican en que desconozcas el lenguaje, sino en que interpretas mal el ejercicio como te sucedio en el primer codigo, El segundo fue un concepto mas de logica, si todos los valores te dan un multiplo de 6 mas 1, podias tambien restar uno en el print o inicializar la variable con un valor menor.

Aqui va otra forma de hacerlo:
Código
  1. i=0
  2. while(i<=150):
  3.    i+=1
  4.    if i%6==0: print i

@ShellRoot: el limite era 150, tu codigo se excede.


Título: Re: [Python] - while
Publicado por: Shell Root en 13 Octubre 2010, 06:35 am
@ShellRoot: el limite era 150, tu codigo se excede.
Seh, es por el,
Código
  1. i = 0
  2. while(i <= 150):
  3.    i += 6
  4.    print i


Título: Re: [Python] - while
Publicado por: [L]ord [R]NA en 13 Octubre 2010, 06:48 am
@ShellRoot: el limite era 150, tu codigo se excede.
Seh, es por el,
Código
  1. i = 0
  2. while(i <= 150):
  3.    i += 6
  4.    print i

No, el problema esta en el while,
Código
  1. i = 0
  2. while(i < 150):
  3.    i += 6
  4.    print i


Título: Re: [Python] - while
Publicado por: Meta en 13 Octubre 2010, 07:13 am
Gracias a todos. Al final lo averigué antes de leerles a ustedes y me funcionó, pero es bueno saber de qué me está hablando el ejercicio.


Título: Re: [Python] - while
Publicado por: Anco en 13 Octubre 2010, 10:52 am
No, el problema esta en el while,
Código
  1. i = 0
  2. while(i < 150):
  3.    i += 6
  4.    print i


Desconozco totalmente python, pero a pesar de que esa es una manera de solucionar ese problema, shell root tambien tenia razon cuando dijo que su problema era lugar donde estaba el i+= 6, si lo hubiese puesto despues del print, creo que daria el resultado esperado. Esto lo digo para conocimiento de Meta y aquellos que seamos novatos en el tema.

Código
  1. i = 0
  2. while(i <= 150):
  3.    print i
  4.    i += 6


Título: Re: [Python] - while
Publicado por: Meta en 13 Octubre 2010, 11:32 am
Mejor poner el print al final, que se actulice primero la variable, después visualiza los datos con print.

En caso de este otro que no se si es el indicado dice así:
Citar
Haz un programa que muestre todos los múltiplos de n entre n y m·n, ambos inclusive, donde n y m son números introducidos por el alguien.

¿La parte m·n hay que multiplicar?

Por ahora lo hice normal de esta manera.
Código
  1. # Introducir variables.
  2. i = int(raw_input('Valor inicial: '))
  3. inc = int(raw_input('Incremento; '))
  4.  
  5. # Bucle.
  6. i = 0
  7. while i < 150:
  8.    i += inc
  9.    print i

Citar
Valor inicial: 150
Incremento; 6
6
12
18
24
30
36
42
48
54
60
66
72
78
84
90
96
102
108
114
120
126
132
138
144
150



Edito :

Código
  1. # Introducir variables.
  2. n = int(raw_input('Valor inicial: '))
  3. m = int(raw_input('Incremento: '))
  4.  
  5. # Bucle.
  6. n = 0
  7. while n < 150:
  8.    n += m
  9.    print n



Título: Re: [Python] - while
Publicado por: criskapunk en 13 Octubre 2010, 14:11 pm
Tu código está bien, pero no hace exactamente lo que pide el enunciado.

El mismo dice que dados dos valores n y m, obtener todos los múltiplos de n en el intervalo [n ; n*m], incluyendo los extremos. Entonces, el contador del bucle no tendría que comenzar en cero, sino en n.

Otra manera de hacerlo:

Código
  1. n = int(raw_input("Ingrese el valor de n: "))
  2. m = int(raw_input("Ingrese el valor de m: "))
  3. i = n    # Funcionara como divisor
  4. k = n * m    # Funcionara como valor limite del bucle
  5.  
  6. print "Los multiplos de ", n, " entre [", n,";", n * m,"] son: "
  7.  
  8. while n <= k:
  9.    if n % i == 0:
  10.        print n
  11.    n += 1

Un saludo ;)


Título: Re: [Python] - while
Publicado por: Meta en 13 Octubre 2010, 19:55 pm
Gracias.

En este caso es posible sin utilizar ni un solo if.

He intentado hacerlo el menor código posible de esta manera.

Aún gracias por el código.


Título: Re: [Python] - while
Publicado por: Meta en 13 Octubre 2010, 23:24 pm
Al final lo hice de esta manera.

Código
  1. n = int(raw_input('Valor inicial: '))
  2. m = int(raw_input('Incremento: '))
  3.  
  4.  
  5. i = 0
  6. while i < n * m:
  7.    i += n
  8.    print i

Da el mismo resultado que el tuyo.



Título: Re: [Python] - while
Publicado por: Meta en 14 Octubre 2010, 01:04 am
Este otro ejercicio que no entiendo lo que me quiere decir mucho.

Citar
Haz una aplicación que muestre todos los números potencia de 2 entre 20 y 230, ambos inclusive.

Código
  1. i = 0
  2. while i <= 230:
  3.     i += 2**20
  4.     print i
  5.  

Este otro funciona con más sentido pero no significa que sea lo que me está pidiendo.

Código
  1. # Bucle.
  2. i = 20
  3. while i < 230:
  4.    i += 1**2
  5.    print i
  6.  


Título: Re: [Python] - while
Publicado por: criskapunk en 14 Octubre 2010, 04:35 am
Buenas :)

Como dice el enunciado, este código lo que te pide es que muestres todas las potencias de dos cuyo resultado se encuentre entre 20 y 230 (Estos dos números inclusive).

Tu primer código:

Código
  1. i = 0
  2. while i <= 230:
  3.     i += 2**20
  4.     print i

Inicializas la variable i en 0 y entrás en un bucle el cual se va a ejecutar mientras el valor de i sea menor o igual que 230. En la primer iteración i vale 0 y ejecuta lo que esta dentro del while. Al entrar asigna a i su valor mas 2**20 (0+1048576). Como el valor de i ahora es mayor que 230, no cumple la condición y no vuelve a entrar.

El otro code:

Código
  1. # Bucle.
  2. i = 20
  3. while i < 230:
  4.    i += 1**2
  5.    print i

Inicializas la variable i con valor 20. Como es menor que 230, entra en el bucle. Adentro asigna a i el valor de 1 elevado al cuadrado (Que viene a ser uno. Osea, es lo mismo que hacer i += 1 :P). Lo que hace es mostrar los valores del 21 al 230.

Lo que tenés que hacer es ir tomando valores, elevándolos al cuadrado e imprimirlos si el resultado se encuentra entre 20 y 230.

Podrías hacer algo asi:

Código
  1. i = 5    # Esto es porque 2**5 es el primer valor mayor o igual que 20
  2. while 2 ** i <= 230:
  3.    print 2 ** i
  4.    i += 1

Un saludo ;)





Título: Re: [Python] - while
Publicado por: [L]ord [R]NA en 14 Octubre 2010, 05:35 am
Bueno yo tengo una respuesta diferente, inicializando i=0... :xD me encontre un poquito de trampa inicializar i=5.

Código
  1. i = 0
  2. while (2**i<=230):
  3.    if((2**i)>=20):print 2**i
  4.    i+=1
  5.  


Título: Re: [Python] - while
Publicado por: Meta en 14 Octubre 2010, 05:39 am
Llegué a pensar que sería así:

Código
  1. i = 21
  2. while 20 <= 230:
  3.    i += 1
  4.    print 2 ** i

Tu código tiene varios 2 ** i.

Como resultado, tu código sale así:

64
128
256

Cuando en realidad el máximo es 230.


Título: Re: [Python] - while
Publicado por: [L]ord [R]NA en 14 Octubre 2010, 05:44 am
No, verifica si pegaste bien, el resultado en mi codigo es

Código:
32
64
128


Título: Re: [Python] - while
Publicado por: Meta en 14 Octubre 2010, 06:12 am
El tuyo funciona bien, el de él se queda en 256.

Código
  1. i = 5
  2. while 2 ** i <= 230:
  3.    i += 1
  4.    print 2 ** i

Resultado: 256.
Código
  1. i = 5    
  2. while 2 ** i < 230:
  3.    i += 1
  4.    print 2 ** i

256.



Título: Re: [Python] - while
Publicado por: [L]ord [R]NA en 14 Octubre 2010, 06:24 am
colocando i+=1 al final ya deberia de estar todo bien.

Código
  1. i=5
  2. while 2**i<=230:
  3.        print 2**i
  4.        i+=1


Título: Re: [Python] - while
Publicado por: Meta en 14 Octubre 2010, 07:34 am
JEjee, ahora si. Eso que tengo la manía de usar los print al final.

Gracias a tod@s.