elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [Python] Problema con "lista" y "while" en python
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Python] Problema con "lista" y "while" en python  (Leído 7,912 veces)
sayion

Desconectado Desconectado

Mensajes: 3


Ver Perfil
[Python] Problema con "lista" y "while" en python
« en: 22 Mayo 2012, 20:52 pm »

Hola!!
He empezado a usar python 3 hace poco y he aprendido bastante con los tutoriales y demás cosillas que he ido encontrando por aquí, pero al final me he topado con un problema que no soy capaz de resolver solo. Siguiendo los ejercicios de este post (http://foro.elhacker.net/ejercicios/juego_ejercicios_python-t278592.0.html) se me ocurrió hacer una cosa para practicar siguiendo el reto del usuario Masita, que consistía hacer un programa que tirase dados:
Código
  1. import random
  2. indice = 0
  3. contador=0
  4. salir=0
  5.  
  6. while True:
  7.    resultados=[]
  8.  
  9.    dados = (input (" Número de Dados: "))
  10.    caras = (input (" Número de Caras: "))
  11.    dadosenteros=int(dados)
  12.    carasenteras=int(caras)
  13.  
  14.    while indice < dadosenteros:
  15.        x=random.randint(1,carasenteras)    
  16.        resultados.append(x)                
  17.        indice +=1
  18.  
  19.    resultados.sort()
  20.  
  21.    for x in range(len(resultados)-1,-1,-1):
  22.        print (resultados[x])
  23.  
  24.    salir = (input("Presiona enter para volver a lanzar o escribe s para salir-> "))
  25.  
  26.  
  27.    if salir == "s":
  28.        exit()
  29.    else:
  30.        del resultados
  31.        continue
  32.  
  33.  

En principio, lo que debería hacer es generar una tirada (que funciona) y si escribes s y le das al enter el programa se cierra. Si le das al enter directamente vuelve a empezar. El problema es que la variable lista "resultados" no se borra bien porque si haces una tirada inferior en número de dados no muestra nada y si es superior enseña los dados de la anterior mas los que tira. Vamos, que soy incapaz de reiniciar el valor 0 de la lista. He probado con comandos como del, igualando la lista a None... no sé qué hacer. ¿Alguna idea? ¿Por qué pasa esto?


« Última modificación: 23 Mayo 2012, 12:17 pm por sayion » En línea

Arnau27

Desconectado Desconectado

Mensajes: 46



Ver Perfil WWW
Re: [Python] Problema con "lista" y "while" en python
« Respuesta #1 en: 27 Mayo 2012, 09:02 am »

Buenas, el problema es que el programa no esta bien estructurado.
1. La lista debes colocarla fuera del bucle.
2. Me he dado cuenta que usas "blancos"espacios, es decir que indentas con la tecla espacio. Mejor usa el tabulador te ahorraras problemas.
3. Para eliminar los elementos de la lista haz una funcion con un bucle que vaya eliminando los elementos de la lista. I te recomiendo que uses el pop en vez de delete.
Código
  1. def murder():
  2. while len(lista)>0: #Len, cuenta los elementos de la lista
  3. print(lista[0])
  4. lista.pop(0)
Si te das cuenta elimina solo el elemento 0 de la lista, ya que con el bucle, la segunda vez que pase por el pop el elemento 1 se habra convertido en 0.

4. En el else: deberias controlar que el usuario ponga letras ya que sino el programa se rompera. Coloca un elif, como lo que has echo con salir.
5. En los input en los que solo quieras numeros, estaria bien que escribieras que solo aceptas numeros.
Código
  1. a=int(input("Solo aceptamos numeros"))

Creo que con estas modificaciones debe funcionar sin problemas.
Espero haberte ayudado, disfruta con python.


En línea

La confianza es la base de la elegancia.
BatchianoISpyxolo

Desconectado Desconectado

Mensajes: 166


Ver Perfil
Re: [Python] Problema con "lista" y "while" en python
« Respuesta #2 en: 27 Mayo 2012, 11:42 am »

También puedes diseñar un include de operaciones para manejar esta lista estática específica.
En línea

Puede que desees aprender a programar desde 0: www.espascal.es
sayion

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: [Python] Problema con "lista" y "while" en python
« Respuesta #3 en: 29 Mayo 2012, 13:28 pm »

Muchas gracias, voy a probar las soluciones a ver que tal. En cuanto a lo de los espacios fue problema al copiar y pegar de aptana así que tuve que arreglarlo a mano. Lo de que sólo se pueden introducir números lo tengo solucionado con excepciones pero no lo quise poner por no alargar mucho el post ya que no tenía nada que ver por el problema, pero muchas gracias por las indicaciones =D

EDITO:
Lo he dejado así... y no sé si sigo haciendo algo mal porque me sigue dando fallos. Por ejemplo, meto 3 dados de 5, en la siguiente 4 dados de 6 y sólo me da un resultado ¿?¿? No sé si será porque me pilla en un nivel muy bajo o qué, pero no consigo entender por qué falla...
Código
  1. import random
  2. indice = 0
  3. contador=0
  4. salir=0
  5. resultados=[]
  6. def murder():
  7. while len(resultados)>0: #Len, cuenta los elementos de la lista
  8. print(resultados[0])
  9. resultados.pop(0)
  10.  
  11. while True:
  12. dados = (input (" Numero de Dados: "))
  13. caras = (input (" Numero de Caras: "))
  14. dadosenteros=int(dados)
  15. carasenteras=int(caras)
  16.  
  17. while indice < dadosenteros:
  18. x=random.randint(1,carasenteras)    
  19. resultados.append(x)                
  20. indice +=1
  21.  
  22. resultados.sort()
  23.  
  24. for x in range(len(resultados)-1,-1,-1):
  25. print (resultados[x])
  26.  
  27. salir = (input("Presiona enter para volver a lanzar o escribe s para salir-> "))
  28.  
  29.  
  30. if salir == "s":
  31. exit()
  32. else:
  33. murder()
  34. continue
  35.  

En cuanto a lo del include de operaciones, sinceramente no tengo ni idea de cómo hacerlo  :-[
Muchas gracias a los dos por la ayuda. A ver si conseguimos solucionarlo  ;)

PD: ¿cómo se hace para que el código quede con los colores?  EDITO2: Solucionado
« Última modificación: 29 Mayo 2012, 14:25 pm por sayion » En línea

Arnau27

Desconectado Desconectado

Mensajes: 46



Ver Perfil WWW
Re: [Python] Problema con "lista" y "while" en python
« Respuesta #4 en: 30 Mayo 2012, 20:14 pm »

Buenas!
El error es muy tonto, pero creo que los errores más tontos son los más difíciles de solucionar :o

Fijate en la variable "indice".

Su valor despues de la primera vuelta del bucle no es 0. Debes declarar en el else o al principio del bucle general que indice es 0, ya que sino solo te pintará el ultimo elemento de la lista. Igualmente aunque delclares una variable en un bucle, no dejes de declararla fuera.
Disfruta!
En línea

La confianza es la base de la elegancia.
sayion

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: [Python] Problema con "lista" y "while" en python
« Respuesta #5 en: 30 Mayo 2012, 20:38 pm »

¡¡Muchísimas Gracias!!
Menudo fallo de noob más tonto...
Disfruta!
Con python es casi imposible no hacerlo =D , gracias de nuevo.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines