[ Foro de Python ]

Ejercicio propuesto 1.

19-Mar-2012 06:47
Carlos Miranda Rocha
6 Respuestas

Hola, soy nuevo en la programación y recientemente terminé con el primer curso, estoy haciendo los ejercicios propuestos.

No tuve problemas con el primero, sin embargo tengo una duda. He aquí el script que realizé para este ejercicio, utilizo Phyton.


# -*- coding: cp1252 -*-
numeroUno = input ("Dime diez números: ")
numeroDos = input ("Nueve restantes: ")
numeroTres = input ("Ocho restantes: ")
numeroCuatro = input ("Siete restantes: ")
numeroCinco = input ("Seis restantes: ")
numeroSeis = input ("Cinco restantes: ")
numeroSiete = input ("Cuatro restantes: ")
numeroOcho = input ("Tres restantes: ")
numeroNueve = input ("Dos restantes: ")
numeroDiez = input ("Uno restante: ")
promedio = (numeroUno + numeroDos + numeroTres + numeroCuatro + numeroCinco + numeroSeis + numeroSiete + numeroOcho + numeroNueve + numeroDiez) / 10
print ("El promedio de los diez números que escribiste es = {}".format(promedio) )


______________________________________________________________
Mi duda es respecto a matrices. Si bien no comprendí el tema, quizá analizando a fondo la resolución de este ejercicio con los términos agrupados me ayudaría de algo.

Cito un ejemplo del tema de matrices y señalo mis dudas:

Para indicar que vamos a usar una matriz en Python, usaremos llaves: miMatriz = { } No es necesario indicar tamaño. Como se empieza a numerar desde 0, y no desde 1, guardaremos los datos accediendo a la posición "i-1", de este modo:


datos = { } 
 
for i in range(1,7):
	datos[i-1] = input( "Dime el dato numero {}: ".format(i) ) 
 
print ("Los datos al reves son: ") 
for i in range(6,0,-1):
	print ( datos[i-1] ) 


_____________________________________________________________

Del ejemplo comprendo solo que se está indicando un rango a "i" que abarca del 1 al 6. No entiendo en que momento se están agrupando las variables ni lo que significa "i-1".
_____________________________________________________________

Utilizando rangos, solo he podido hacer que el programa pida diez números con el siguiente script:


# -*- coding: cp1252 -*-
for n in range (1,11):
    n = input ("Dime un número: ")


De antemano, gracias por las respuestas.


19-Mar-2012 23:40
Nacho Cabanes (+83)

Con relación a tus dudas:

- Lo del "i-1" lo tienes explicado en el apartado 9, al principio de la versión para Python:

Para indicar que vamos a usar una matriz en Python, usaremos llaves: miMatriz = { } No es necesario indicar tamaño. Como se empieza a numerar desde 0, y no desde 1, guardaremos los datos accediendo a la posición "i-1",

--------------------

- Si has conseguido que pida diez números, ya puedes calcular su suma (no necesitas almacenar los diez valores usando una matriz, te basta con ir sumando cada valor introducido):


suma = 0
for n in range (1,11):
    n = input ("Dime un número: ")
    suma = suma + n


--------------------

- Y en cuanto tienes la suma, ya puedes calcular el promedio: te basta dividir por 10.


20-Mar-2012 14:21
Carlos Miranda Rocha

Disculpe mi ignorancia, pero la cita es precisamente lo que no comprendo. ¿A qué se refiere al decir "acceder a los datos en la pocisión"? ¿Cuál es la relación entre el conjunto y la expresión [i-1]? Reitero mis disculpas y pido una reformulación del concepto, si es usted tan amable.

Gracias.


24-Mar-2012 01:50
Nacho Cabanes (+83)

Veamos...

¿Has llegado a leer el apartado 9 completo? Ten en cuenta que los conceptos básicos se explican al principio, y finalmente se aplican a Python. Si no has leído el principio, te puede costar entender el final.

Te reproduzco un fragmento:

---

Si hay que guardar 100 números, suele ser más eficiente almacenar esos 100 datos "juntos", formando una "matriz", en vez de usar 100 variables distintas.

La palabra "matriz" es una traducción del inglés "array". Algunos autores lo traducen alternativamente como tabla, vector o incluso "arreglo".

Normalmente, en una matriz podremos acceder individualmente a cada uno de sus elementos usando corchetes: el primer dato sería algo como "dato[1]".

---

Es decir, con


datos = { } 


dices que vas a usar una "matriz", o "vector", o "array": un conjunto de varios datos.

El primero de esos datos se encontrará en la posición 0, el segundo en la posición 1 y así sucesivamente:


datos[0] = input( "Dime el primer dato" )
datos[1] = input( "Dime el segundo dato" )
datos[2] = input( "Dime el tercer dato" )


Pero suele ser preferible hacer este tipo de operaciones de forma repetitiva:


for i in range(0,3):
    print ( datos[i] ) 


¿Más claro así?  ¿Siguen quedando dudas? Si es así, ¿cuáles?


24-Mar-2012 03:23
Carlos Miranda Rocha

Gracias por su atención, soporte y paciencia.

He leído todos los apartados del diagrama de temas, solo que soy nuevo en esto de la programación, y está este concepto en específico que me esta costando un poco de trabajo. Matrices me ha quedado claro.

Sí tengo dudas con respecto al ejemplo del apartado 9, le expongo mas específicamente en que bloque de programación:

1) Señalamos una matriz sin especificar sus elementos.

>>> datos = {}

2) Determinamos un rango en el que un bloque de programación se va a repetir.

>>> datos = {}
>>> for n in range (1,6):

3) La escritura procedente esta encadenada al rango de repetición que le dimos anteriormente (rango de 1 a 5). Automáticamente se repite la inserción de datos cinco veces consecutivas ingresando el código "n = input ("Escribe el dato: {}".format(n) )" después de la repetición.

Sin embargo, vamos a relacionar los elementos no especificados de la matriz "datos" al rango de repetición de dicho bloque de programación. Es aquí cuando no comprendo por qué se relaciona de esta forma:

>>> datos = {}
>>> for n in range (1,6):
       datos[n-1] = input ("Escriba el dato: {}".format(n) )

¿Por qué datos[n-1]? ¿Por qué no datos[n]? ¿A qué se refiere con "Como se empieza a numerar desde 0, y no desde 1"? ¿Si el usuario insertó los datos en orden alfanumérico comenzando desde 1 y concluyendo en 5, "datos[n-1]" estaría accediendo al primer input -1; a 0?



24-Mar-2012 03:47
Carlos Miranda Rocha

El concepto del programa funciona correctamente de esta forma:


datos = {}
for n in range (1,6):
    datos[n] = input ("Inserta el dato {}: ".format(n) )
print ("Los datos presentados al contrario del orden de inserción: ")
for datos[n] in range (5,0,-1):
    print (datos[n])



24-Mar-2012 12:33
Nacho Cabanes (+83)

Por definición, los "arrays" en Python (y en la mayoría de lenguajes) se empiezan a numerar desde cero.

Por tanto, si haces


datos = {}


El primer elemento será datos[0], el segundo elemento será datos[1], el tercer elemento será datos[2] y así sucesivamente.

Por tanto, para pedir 5 datos se podría hacer con


for n in range (0,5):
    datos[n] = input ("Escriba un dato:" )


o bien de forma "más humana", contando a partir del 1, pero recordando que al guardar los datos habrá que restar uno a la posición, para que el primer dato se guarde en la posición 0:


for n in range (1,6):
    datos[n-1] = input ("Escriba un dato:" )


Si quieres decir al usuario algo como "Escriba el dato número 1",  "Escriba el dato número 2", etc, tendrás que añadir ese dato en la orden "input", de cualquiera de estas dos formas:


for n in range (0,5):
        datos[n] = input ("Escriba el dato: {}".format(n+1) )


O bien


for n in range (1,6):
        datos[n-1] = input ("Escriba el dato: {}".format(n) )


(de modo que en pantalla se mencione el "dato 1", no el "dato 0", porque eso de que se empiece a contar en 0 es una peculiaridad interna del lenguaje, algo que no necesita saber el usuario de nuestro programa).

Tomo nota para reescribir ese apartado, intentando que sea más fácil de seguir.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)