Foros del Web » Programando para Internet » Python »

Problemas con mini programas.

Estas en el tema de Problemas con mini programas. en el foro de Python en Foros del Web. Bueno ya he comenzado a hacer mis propios ejercicios y estoy re-leyendo todo el curso porque, pues, necesito ejercitar mucho mi lógica. Ando haciendo este ...

  #31 (permalink)  
Antiguo 17/11/2011, 14:32
Avatar de nanotime  
Fecha de Ingreso: noviembre-2011
Ubicación: Cd. Guayana
Mensajes: 145
Antigüedad: 13 años
Puntos: 6
Respuesta: Problemas con mini programas.

Bueno ya he comenzado a hacer mis propios ejercicios y estoy re-leyendo todo el curso porque, pues, necesito ejercitar mucho mi lógica.

Ando haciendo este programita que es con condicionales if, pero hay algo que no se hacer y es hacerle preguntas a un usuario y tomar esa respuesta como booleano, osea true o false...

Mi problema está en esa simple pregunta, no consigo como formularla, tengo que preguntarle al usuario si el número presentado es el resultado de una multiplicación y obviamente luego condicionar para enviar el mensaje...

Éste es el código:

Código Python:
Ver original
  1. #    Programa que genera dos números aleatorios entre 1 y 10, luego genera un tercer
  2. #    valor aleatorio con todos los posibles resultados de la multiplicación de los
  3. #    dos primeros valores. El programa pregunta al usuario si ese último valor es
  4. #    corresponde a la multiplicación de los primeros valores mostrados y le dice si
  5. #    es correcta la respuesta o no.
  6. import random
  7. a = random.randint(1,10)
  8. b = random.randint(1,10)
  9. c = a*b
  10. posibles_resultados = random.randint(1,100)
  11. print a,b
  12. print '¿Resultado: '+str(posibles_resultados)+'?'

Debe ser simple, pero jamás he trabajado con booleanos
  #32 (permalink)  
Antiguo 17/11/2011, 16:52
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 14 años, 5 meses
Puntos: 310
Respuesta: Problemas con mini programas.

Tienes que usar un raw_input, y comparar la respuesta con algo, por ejemplo sí/no o yes/no. También debes tener en cuenta que tal como lo haces no es improbable (exactamente el 25%) que la respuesta que tú generes sea un número primo, o sea, que es imposible que aciertes. Como sólo es hasta el 100 yo haría dos bucles, y multiplicaría todos los elementos del primero por los del segundos para tener los números compuestos del 1 al 100.

Cita:
Iniciado por AlvaroG Ver Mensaje
Eso es porque son cosas diferentes desde el punto de vista de estructuras de datos.

Un vector, o array, es un espacio de memoria reservado para almacenar una cierta cantidad de objetos, generalmente del mismo tipo. Si tenés que almacenar números enteros de 4 bytes, reservando 32 bytes tenés espacio para 8 números.
La ventaja es que, teniendo la dirección de memoria donde comienza el vector, como ya se sabe el tipo de objeto que guarda el array (y por tanto su tamaño), se puede acceder al elemento (n + 1) simplemente agregando el tamaño del objeto a la dirección del elemento n.
Volviendo al ejemplo del vector de enteros, al hacer a[2] el sistema simplemente accede a la posición de memoria 2*4+(dirección de a)

Una lista es una estructura formada por un objetos tipo "nodo", que contienen, en su forma más básica, un espacio para guardar un dato y un espacio para guardar un puntero hacia el siguiente nodo. No se requiere asignar espacio en tiempo de creación sino que cada nodo se va creando a medida que se lo necesite, y si bien son mucho más flexibles que un vector, también son más lentas debido a que para acceder a a[1] tengo que leer el puntero almacenado en a[0], y seguirlo (ya no es una simple suma de las direcciones de memoria)

Volviendo a hacer una comparación con Java, un vector es lo que se crea vía int[] (por ejemplo), mientras que una lista se crea como instancia de ArrayList()


Saludos.
Ups, leí el post pero entre unas cosas y otras se me olvidó contestar Muy buena explicación, resulta que la palabra array sí tiene un significado especial +1
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #33 (permalink)  
Antiguo 17/11/2011, 18:16
Avatar de nanotime  
Fecha de Ingreso: noviembre-2011
Ubicación: Cd. Guayana
Mensajes: 145
Antigüedad: 13 años
Puntos: 6
Respuesta: Problemas con mini programas.

Cita:
Tienes que usar un raw_input, y comparar la respuesta con algo, por ejemplo sí/no o yes/no. También debes tener en cuenta que tal como lo haces no es improbable (exactamente el 25%) que la respuesta que tú generes sea un número primo, o sea, que es imposible que aciertes. Como sólo es hasta el 100 yo haría dos bucles, y multiplicaría todos los elementos del primero por los del segundos para tener los números compuestos del 1 al 100.
Hmm se generan dos números del 1 al 10 y se genera una variable con un número aleatorio entre 1 y 100, recuerda que el resultado mínimo que puede salir es 1 (1 * 1) y el máximo es 100 (10 * 10), el usuario solo debe decir si ese número aleatorio que se muestra es el resultado de la multiplicación de los dos números mostrados.

Estoy tratando de hacer las comparaciones pero al parecer mi lógica está bastante mal...

Código Python:
Ver original
  1. #    -*- coding: utf-8 -*-
  2. #    Programa que genera dos números aleatorios entre 1 y 10, luego genera un tercer
  3. #    valor aleatorio con todos los posibles resultados de la multiplicación de los
  4. #    dos primeros valores. El programa pregunta al usuario si ese último valor es
  5. #    corresponde a la multiplicación de los primeros valores mostrados y le dice si
  6. #    es correcta la respuesta o no.
  7. import random
  8. a = random.randint(1,10)
  9. b = random.randint(1,10)
  10. c = a*b
  11. posibles_resultados = random.randint(1,100)
  12. print a,b
  13. print str(a)+'x'+str(b)+'='+str(posibles_resultados)
  14. respuesta = raw_input('¿El resultado de la operación anterior es correcto? s/n')
  15. if respuesta ==  s and a*b = posibles_resultados:
  16.     print 'Respuesta correcta'
  17.     print '_'*5
  18. elif respuesta == n and a*b != posibles_resultados:
  19.     print 'Respuesta correcta'
  20. else:
  21.     print 'Respuesta equivocada'

Imprimo los primeros valores, luego imprimo una operación en strig y pregunto si eso que se muestra es correcto. Si responde sí, y a*b = posibles_resultados dice que es correcto. Si dice que no y, obviamente la operación es errónea, también le dirá que es correcto. En caso de que se equivoque, le dice que está mal.

Ahora, tienes razón, la posibilidad de que sea correcta la respuesta es mínima en comparación de que sea equivocada, pero no sé aún como puedo equilibrar eso para que sea relativamente equitativo... Al final el programita terminó siendo un tanto más fastidioso de lo que pensé.

Por cierto, el error que me tira al tratar de correr es:

Código:
                               ^
SyntaxError: invalid syntax
Error in sys.excepthook:
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/apport_python_hook.py", line 61, in apport_excepthook
    binary = os.path.realpath(os.path.join(os.getcwdu(), sys.argv[0]))
  File "/usr/lib/python2.7/posixpath.py", line 71, in join
    path += '/' + b
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 13: ordinal not in range(128)

Original exception was:
  File "multiplicación_niño.py", line 15
    if respuesta ==  s and a*b = posibles_resultados:
                               ^
SyntaxError: invalid syntax
me gustaría ver un ejemplo de los bucles, imagino que con un for in es lo más adecuado, aún no domino bien todo esto y me confunden un tanto estas iteraciones.

Ahora claro, si quiero multiplicar en un bucle todos los elementos de a y b debería hacerlo con tuplas, no? Joder, se me inunda la cabeza de dudas.

Última edición por nanotime; 17/11/2011 a las 18:54 Razón: Siguen lloviendome preguntas.
  #34 (permalink)  
Antiguo 17/11/2011, 18:56
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Problemas con mini programas.

Cita:
luego genera un tercer valor aleatorio con todos los posibles resultados de la multiplicación de los dos primeros valores.
Esta parte es la que me saca de quicio. En una multiplicación solo existe 1 posible resultado a comparación de la resta.

Ejemplo:
Código:
a * b == b * a
a - b != b - a
Realmente deberían de redactar mejor esos ejercicios.
  #35 (permalink)  
Antiguo 17/11/2011, 19:11
Avatar de nanotime  
Fecha de Ingreso: noviembre-2011
Ubicación: Cd. Guayana
Mensajes: 145
Antigüedad: 13 años
Puntos: 6
Respuesta: Problemas con mini programas.

Hmm claro, pero no logro hacer que me corra el programa ni tampoco entiendo varias cosas. Para mi es complicado porque apenas comienzo pero bueno, de alguna manera lograré resolver esto. Pensaba que era con booleanos pero me di cuenta de que no. Trato con if's y tengo ciertos problemas. Me dicen que con bucles puedo salir del problema, pero... no se implementarlos bien. Seguiré tratando, no queda de otra.
  #36 (permalink)  
Antiguo 17/11/2011, 22:03
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Problemas con mini programas.

Código Python:
Ver original
  1. from random import randint
  2. from random import shuffle
  3.  
  4. a = randint(1, 10)
  5. b = randint(1, 10)
  6. c = a * b
  7.  
  8. op1 = c
  9. while op1 == c:
  10.     op1 = randint(1, 100)
  11. op2 = c
  12. while op2 == c or op2 == op1:
  13.     op2 = randint(1, 100)
  14.  
  15. l = [c, op1, op2]
  16. shuffle(l)
  17. print "%d * %d =" % (a, b)
  18. print "%5d %5d %5d" % tuple(l)
  19. respuesta = int(raw_input())
  20.  
  21. if respuesta == c:
  22.     print "Respuesta correcta"
  23. else:
  24.     print "Respuesta incorrecta"
Aquí esta mi programa definitivamente no esta corto.
  #37 (permalink)  
Antiguo 18/11/2011, 12:14
Avatar de nanotime  
Fecha de Ingreso: noviembre-2011
Ubicación: Cd. Guayana
Mensajes: 145
Antigüedad: 13 años
Puntos: 6
Respuesta: Problemas con mini programas.

De verdad te agradezco, no lo resuelves de la manera que yo pensaba y sí, no es un mini programa, pero si lo entiendo, simplemente ofreces las tres opciones y el usuario elije una de ellas. Entiendo completamente, solo me gustaría saber que hace shuffle. Creo que más fácil para ustedes sería si tienen un link al estilo php.org que define todas sus funciones, así en vez de preguntar sencillamente las busco... ya he buscado en python.org pero no me hallo.
  #38 (permalink)  
Antiguo 18/11/2011, 12:49
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problemas con mini programas.

Es cierto que python.org no tiene su documentación tan al alcance de la mano como php.net, sin embargo usualmente basta con buscar "python loquesea" para encontrar enlaces directos a la documentación. En el caso de shuffle: python shuffle


Saludos.
  #39 (permalink)  
Antiguo 18/11/2011, 12:53
Avatar de nanotime  
Fecha de Ingreso: noviembre-2011
Ubicación: Cd. Guayana
Mensajes: 145
Antigüedad: 13 años
Puntos: 6
Respuesta: Problemas con mini programas.

Cita:
Iniciado por AlvaroG Ver Mensaje
Es cierto que python.org no tiene su documentación tan al alcance de la mano como php.net, sin embargo usualmente basta con buscar "python loquesea" para encontrar enlaces directos a la documentación. En el caso de shuffle: python shuffle


Saludos.
Mil gracias
  #40 (permalink)  
Antiguo 18/11/2011, 14:54
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Problemas con mini programas.

Cita:
Iniciado por AlvaroG Ver Mensaje
Es cierto que python.org no tiene su documentación tan al alcance de la mano como php.net, sin embargo usualmente basta con buscar "python loquesea" para encontrar enlaces directos a la documentación. En el caso de shuffle: python shuffle


Saludos.
AlvaroG shuffle es un FAQ que lo puse yo
  #41 (permalink)  
Antiguo 18/11/2011, 15:06
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problemas con mini programas.

Perdón por eso pero lo decía en contexto de la comparación con la documentación de PHP :)
  #42 (permalink)  
Antiguo 19/11/2011, 10:54
Avatar de nanotime  
Fecha de Ingreso: noviembre-2011
Ubicación: Cd. Guayana
Mensajes: 145
Antigüedad: 13 años
Puntos: 6
Respuesta: Problemas con mini programas.

Tengo una duda un tanto necia, pero he buscado y no consigo una respuesta (seguro porque no busco correctamente, pero no se como describirlo). Es simple: trato de imprimir este mensaje
Código Python:
Ver original
  1. 'El numero generado es: %d , si este numero es multiplo de 5 ganara un 70% de %d bs'%(numero,premio)
pero me saca el dedo con esto
Código:
File "loteria1.py", line 5, in <module>
    print 'El numero generado es: %d , si este numero es multiplo de 5 \n ganara un 70% de %d bs'%(numero,premio)
TypeError: not enough arguments for format string
Imagino que es por que trato de dar formato de una vez... 70% es una simple cadena, es el % del premio que gana el usuario y lo demás es para indicar que ahí va un entero o decimal... ¿Hay alguna manera de evitar que eso pase? Ya el programa corre, solo basta con quitar 70% y listo, pero me da curiosidad saber como puedo arreglar eso. Es más cuestión de presentación y ganas de dominar mejor esto del formato de strings.

Como siempre, gracias.
  #43 (permalink)  
Antiguo 19/11/2011, 11:00
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 14 años, 5 meses
Puntos: 310
Respuesta: Problemas con mini programas.

Usa "%%" para escapar el carácter.
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #44 (permalink)  
Antiguo 19/11/2011, 11:32
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Problemas con mini programas.

No me había dado cuenta, pero creo que este post se despego del tema principal y ahora son varios temas dentro del post.

Cerrare el tema ya la duda inicial fue aclarada hace tiempo,

@nanotime si tienes una duda entonces haces un post nuevo.

Etiquetas: ejercicio, mini
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 14:59.