Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Meta en 14 Noviembre 2010, 00:40 am



Título: [Python] Listas y números negativos.
Publicado por: Meta en 14 Noviembre 2010, 00:40 am
Hola:

Ver ejercicio... (http://www.subeimagenes.com/img/hex-c-6824.jpg)

Por lo que entiendo:

- Leer 10 números enteros positivos.
-Si detecta algún número negativo lo indicamos con un mensaje print y permitir que vuelva a empezar de nuevo.
- En caso de que se hayan introducidos los 10 números positivos el programa se acaba.

Lo he intentado hacer de esta menera y como que no.

Código
  1. lista = [] # Lista vacía.
  2. numero = int(raw_input('Dame un número: '))
  3.  
  4. while numero >= 0:
  5.    for i in range(10):
  6.        numero = int(raw_input('Dame un número: '))
  7.        lista.append(numero)
  8.        if i == 10:
  9.            print 'Llegó a 10 números.'


Título: Re: [Python] Listas y números negativos.
Publicado por: Meta en 14 Noviembre 2010, 04:45 am
Hola:

En C# se hace así y lo intentaré pasarlo a Python 2.7.
Código
  1. static void Main(string[] args)
  2.        {
  3.            string frase = "Una frase formada con palabras.  Otra frese con otras palabras.";
  4.  
  5.            string[] palabras = frase.Split(' ');
  6.  
  7.            Dictionary<string, int> dic = new Dictionary<string, int>();
  8.  
  9.            foreach (string item in palabras)
  10.            {
  11.                if (dic.ContainsKey(item))
  12.                    dic[item]++;
  13.                else
  14.                    dic.Add(item, 1);
  15.  
  16.            }
  17.  
  18.            //muestro la lista de resultados
  19.            Console.WriteLine("Lista palabras sin repeticion:");
  20.            foreach (KeyValuePair<string, int> item in dic)
  21.            {
  22.                if(item.Value == 1)
  23.                    Console.WriteLine(item);
  24.            }
  25.        }

Me imagino que en Python será el código más cortito...

Saludo.


Título: Re: [Python] Listas y números negativos.
Publicado por: Meta en 14 Noviembre 2010, 22:24 pm
:)

¿En este ejercicio parece complicado?

:)


Título: Re: [Python] Listas y números negativos.
Publicado por: Novlucker en 14 Noviembre 2010, 22:28 pm
Te he dicho ya que tienes problemas de lógica?
Has probado visualizar los temas en papel?
De hecho, incluso el código anterior es mejorable :-\, pero como es que puedes hacerlo en Sharp y no en python? :huh:

El ejercicio no tiene nada de difícil :-\

Saludos


Título: Re: [Python] Listas y números negativos.
Publicado por: Meta en 14 Noviembre 2010, 23:09 pm
No lo hice lo de C#, lo encontré así. jejejeje.

¿Tengo problemas de lógica o algoritmo?

Citar
- Leer 10 números enteros positivos.
-Si detecta algún número negativo lo indicamos con un mensaje print y permitir que vuelva a empezar de nuevo.
- En caso de que se hayan introducidos los 10 números positivos el programa se acaba.


Título: Re: [Python] Listas y números negativos.
Publicado por: Novlucker en 14 Noviembre 2010, 23:12 pm
Ambos :xD

No debes de leer los 10 números de una, lees números hasta tener 10, si al ingresar alguno es negativo, lo vuelves a pedir.

Pides número
Número menor a cero? Si, pides otra vez. No, lo agregas a una lista
Cuando la lista tenga 10 números paras.

Saludos


Título: Re: [Python] Listas y números negativos.
Publicado por: Meta en 15 Noviembre 2010, 18:57 pm
Casi lo logro, aún así me queda investigar.

Código
  1. lista = [] # Lista vacía.
  2. numero = int(raw_input('Dame un número: '))
  3. final = 0
  4.  
  5. while numero >= 0:
  6.    for i in range(11):
  7.        numero = int(raw_input('Dame un número: '))
  8.        lista.append(numero)
  9. #        print i
  10.        if i >= 10:
  11.            print 'Llegó a 10 números.'
  12.  
  13. if numero <0:
  14.    print 'Haz introducido un número negativo'


Título: Re: [Python] Listas y números negativos.
Publicado por: Novlucker en 15 Noviembre 2010, 19:08 pm
Pista, lo tienes mal encarado :xD

Código
  1. lista = []
  2. while len(lista)<10:

Saludos :D


Título: Re: [Python] Listas y números negativos.
Publicado por: Meta en 16 Noviembre 2010, 00:02 am
Ahora si. Por fin y gracias.

Código
  1. lista = [] # Lista vacía.
  2. numero = int(raw_input('Dame un número: '))
  3. final = 0
  4.  
  5. while numero >= 0:
  6.    for i in range(11):
  7.        numero = int(raw_input('Dame un número: '))
  8.        lista.append(numero)
  9. #        print i
  10.        if i >= 10:
  11.            print 'Llegó a 10 números.'
  12.  
  13.        if numero <0:
  14.            print 'Haz introducido un número negativo'

Edito:

Viendo bien, no me salió lo que pide. El resultado me dió este:

Citar
Dame un número: 0
Dame un número: 1
Dame un número: 2
Dame un número: 3
Dame un número: 4
Dame un número: 5
Dame un número: 6
Dame un número: 7
Dame un número: 8
Dame un número: 9
Dame un número: 10
Dame un número: 11
Llegó a 10 números.
Dame un número: 0
Dame un número: 1
Dame un número: -2
Haz introducido un número negativo
Dame un número:

Me cuenta hasta 11 y cuando dectecta que es un número negativo, el bucle sigue.


Título: Re: [Python] Listas y números negativos.
Publicado por: Shell Root en 16 Noviembre 2010, 01:22 am
Quizás sirva algo como esto,
Código
  1. # @Listas y numeros negativos
  2. # @Shell Root
  3. # @2010
  4.  
  5. sCount = 0
  6. sNumber = 0
  7. lista = []
  8.  
  9. while(sCount != 10):
  10. sNumber = int(raw_input("Enter number: "))
  11. if(sNumber >= 0):
  12. lista.append(sNumber)
  13. else:
  14. print "Negative number"
  15. break
  16. sCount += 1

Resultado,
Código
  1. alex@shellroot:~/Escritorio$ python PoC.py
  2. Enter number: 1
  3. Enter number: 2
  4. Enter number: 3
  5. Enter number: 4
  6. Enter number: 5
  7. Enter number: 6
  8. Enter number: 7
  9. Enter number: 8
  10. Enter number: 9
  11. Enter number: 10
  12. alex@shellroot:~/Escritorio$ python PoC.py
  13. Enter number: 10
  14. Enter number: 1
  15. Enter number: 2
  16. Enter number: 3
  17. Enter number: 4
  18. Enter number: -1
  19. Negative number
  20. alex@shellroot:~/Escritorio$

Note: When you complete the application, display list!


Título: Re: [Python] Listas y números negativos.
Publicado por: Novlucker en 16 Noviembre 2010, 01:32 am
Código
  1. lista = []
  2. for i in range(10):
  3. while True:
  4. n = input('Ingresa valor: ')
  5. if n < 0:
  6. print('El valor no puede ser negativo')
  7. else:
  8. lista.append(n)
  9. break
  10. print lista

Saludos


Título: Re: [Python] Listas y números negativos.
Publicado por: Shell Root en 16 Noviembre 2010, 01:52 am
@Novlucker,
Sólo por curiosidad, por qué empieza en -1. Aquí,
Código
  1. lista = []
  2. for i in range(10):
  3. n = -1
  4. while True:
  5. n = input('Ingresa valor: ')
  6. if n < 0:
  7. print('El valor no puede ser negativo')
  8. else:
  9. break
  10. lista.append(n)
  11. print lista


Título: Re: [Python] Listas y números negativos.
Publicado por: Novlucker en 16 Noviembre 2010, 02:09 am
Por una pifia de mi parte, es que antes había puesto otra cosa, no se por que no había puesto el append dentro del if, así que para que la variable n estuviese alcanzable donde lo hacía, necesitaba tenerla inicializda :xD

Saludos


Título: Re: [Python] Listas y números negativos.
Publicado por: Meta en 16 Noviembre 2010, 02:31 am
¿Estás seguro que es lo que pide el ejercicio?

Fíjate el resultado.

Código
  1. Ingresa valor: 0
  2. Ingresa valor: 1
  3. Ingresa valor: 2
  4. Ingresa valor: -3
  5. El valor no puede ser negativo
  6. Ingresa valor: 0
  7. Ingresa valor: 1
  8. Ingresa valor: 2
  9. Ingresa valor: 3
  10. Ingresa valor: 4
  11. Ingresa valor: 5
  12. Ingresa valor: 6
  13. [0, 1, 2, 0, 1, 2, 3, 4, 5, 6]


Título: Re: [Python] Listas y números negativos.
Publicado por: Shell Root en 16 Noviembre 2010, 02:36 am
Es qué es tú ejercicio, no de nosotros, así que ahora te toca acomodarlo a tus necesidades.


Título: Re: [Python] Listas y números negativos.
Publicado por: Meta en 16 Noviembre 2010, 03:25 am
Lo estoy haciendo honorable Shell Root.


Título: Re: [Python] Listas y números negativos.
Publicado por: Shell Root en 16 Noviembre 2010, 03:34 am
¿Estás seguro que es lo que pide el ejercicio?
Sí se NOTA!  :silbar:


Título: Re: [Python] Listas y números negativos.
Publicado por: Meta en 16 Noviembre 2010, 03:35 am
Investigando el borrado completo de la lista para que empiece desde cero. Por ahora estoy usando uno a uno el
Código
  1. del lista [1]

Lo puedo hacer uno a uno. Deja ver como lo hago a la vez.
Código
  1.   for j in lista:
  2.          if j < 0:
  3.              del i




Edito:

Código
  1. lista = [] # Lista vacía.
  2. for i in range(10):
  3. while True:
  4. n = input('Ingresa valor: ') # Pide un valor entero en n.
  5. if n < 0: # ¿El valor n en menor que ?
  6.                    del lista[0]
  7.                    del lista[1]
  8.                    del lista[2]
  9.                    del lista[3]
  10.                    del lista[4]
  11.                    del lista[5]
  12.                    del lista[6]
  13.                    del lista[7]
  14.                    del lista[8]
  15.                    del lista[9]
  16.                    print('El valor no puede ser negativo')
  17. else: #Entonces.
  18.                    lista.append(n) # Añade en la lista el valor n actual.
  19.                    break # Rompe el bucle.
  20. print lista # Muestra en pantalla los valores de la lista introducido.

Me da este resultado. Parece que no le va los negativos.
Citar
Ingresa valor: 1
Ingresa valor: 2
Ingresa valor: 3
Ingresa valor: -4
Traceback (most recent call last):
  del lista[2]
IndexError: list assignment index out of range

Se que es una forma chapuza de borrar la lista completa para empezar desde cero. Ya lo haré con for in, antes, debo entender como se hace el borrado.


Título: Re: [Python] Listas y números negativos.
Publicado por: Novlucker en 16 Noviembre 2010, 04:20 am
Si, estoy seguro de que es lo que pide
Cuál es el error que ves tu en la solución que has puesto antes?

Código
  1. Ingresa valor: 0
  2. Ingresa valor: 1
  3. Ingresa valor: 2
  4. Ingresa valor: -3
  5. El valor no puede ser negativo
  6. Ingresa valor: 0
  7. Ingresa valor: 1
  8. Ingresa valor: 2
  9. Ingresa valor: 3
  10. Ingresa valor: 4
  11. Ingresa valor: 5
  12. Ingresa valor: 6
  13. [0, 1, 2, 0, 1, 2, 3, 4, 5, 6]

Que tiene de malo?

Yo ahí veo que pide 10 valores, y al final tienes 10 valores, y si uno de los que ingresas es negativo, te lo vuelve a pedir :rolleyes:


Título: Re: [Python] Listas y números negativos.
Publicado por: Shell Root en 16 Noviembre 2010, 04:25 am
Quizás se entiende de 2 formas, por lo menos yo la entiendo así.

Pedir números, al completar 10 números POSITIVOS imprimirlos, si se ingresa uno negativo, vuelve a pedir los números. Yo diría que se empezará otra vez desde 0, y por cierto, así fue que lo hice. XD


Título: Re: [Python] Listas y números negativos.
Publicado por: Meta en 16 Noviembre 2010, 05:19 am
Eso es lo que quiero hacer, empezar desde cero.

A lo mejor como dices, está bien y no tiene nada de malo el resultado.


Título: Re: [Python] Listas y números negativos.
Publicado por: Yeison.Eng en 16 Noviembre 2010, 09:22 am
Todos han aportado, yo tambien
así lo haría yo

Código
  1. #! /usr/bin/python
  2. #-*- coding: utf-8 -*-
  3.  
  4. lista=[]
  5. contador=0
  6. while contador<10:
  7.    entrada=int(raw_input("Digite un número %d: " %(contador+1)))
  8.    if entrada<0: print "Sólo números positivos!"
  9.    else:
  10.        lista.append(entrada)
  11.        contador+=1
  12. print "\nya son 10 números"
  13. print lista
  14.  


Título: Re: [Python] Listas y números negativos.
Publicado por: Novlucker en 16 Noviembre 2010, 13:27 pm
Pedir números, al completar 10 números POSITIVOS imprimirlos, si se ingresa uno negativo, vuelve a pedir los números. Yo diría que se empezará otra vez desde 0, y por cierto, así fue que lo hice. XD

Como hacer las cosas de la manera difícil y sobrevivir en el intento :xD

Código
  1. while True:
  2.    lista = []
  3.    for i in range(10):
  4.        lista.append(input('Ingresa numero: '))
  5.    if True in [i<1 for i in lista]:
  6.        print 'La lista contiene un negativo'
  7.    else:
  8.        print lista
  9.        break

Saludos