[SOLUCIONADO] Traducir de un lenguaje a otro

Iniciado por UpecBlack, Enero 07, 2017, 11:49:38 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Enero 07, 2017, 11:49:38 PM Ultima modificación: Enero 11, 2017, 04:51:44 PM por Stiuvert
Buenas tengo un pequeño problema , estoy aprendiendo un poco python , y estoy pasando algunas cosas que use para aprender c traduciendolo a python , peor me trabe con algo que no se si sera simple para ustedes, ya que a mi me comio el coco de hace horas y busque en el san google y poca ayuda me brindo
Código: php

#include <stdio.h>
int main()
{
int i,j,m,n,x[100],y[100];
m=0;
printf("ingrese tamanio:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf("ingrese valor:");
scanf("%d",&x[i]);
}
for(i=n;i>=1;i--)
{
m=m+1;
y[m]=x[i];
}
for(i=1;i<=m;i++)
{
printf("%d",y[i]);
}
return 0;
}


este es el codigo que quiero traducir de c a python , es generar un vector sin tocar el original y invertirlo , lo poco que hice en python es
Código: php

n=int(raw_input("ingrese tamanio:"))
x=[]
for i in range(n):
    x.append(int(raw_input("ingrese valor:")))
m=0
for n in range(i-1,0):
    m=m+1
    y[m]=x[i]
for i in range(m):
    print y[i]



cosa que no me invierte nada , espero su agradable repuesta saludos

Enero 08, 2017, 01:42:33 AM #1 Ultima modificación: Enero 08, 2017, 02:02:36 AM por Once
Hola, antes que todo debes entender una cosa. El for de C y Python son distintos, en C el for es como un contador que v incrementando la variable acorde a lo que le indiques, en Python el for itera sobre una lista. Ahora la función range en Python lo que hace es generar una lista dependiendo de los parámetros que le pases:

Si le pasas un sólo argumento se generará una lista desde cero hasta el parametro que le pasaste menos uno.
Código: python
>>> list(range(5))
[0, 1, 2, 3, 4]


Si le pasas dos parametros generará una lista que va con los números del primer parametro hasta el segundo menos uno.
Código: python

>>> list(range(5, 10))
[5, 6, 7, 8, 9]


Si le pasas tres argumentos generará una lista que va del primer parámetro hasta el segundo pero en "saltos" del tercer parámetro.
Código: python

>>> list(range(0, 10, 2))
[0, 2, 4, 6, 8]


Ahora, el error que tienes está en: range(i-1,0) porque estás intentando ir de un número positivo hasta cero sumando de a uno, por lo que Python te devolverá una lista vacía:
Código: python

>>> list(range(10, 0,))
[]



La forma adecuada es indicar un step de -1:
Código: python
range(i-1, 0, -1)


Ahora, pasados este punto te encontrarás con un error porque no has "creado" la variable y. Lo solucionas con:

Código: python,3

n=int(raw_input("ingrese tamanio:"))
x=[]
y=[]
(...)


Y acá te encontrarás con otro error de tipo IndexError porque y es una lista vacía y estas intentando acceder a un elemento en la posición m. (Posición que no existe). Por lo que en lugar de acceder a la posición como tal y como estás recorriendo la primer lista desde atrás simplemente usa append para agregar los elementos desde el principio a la lista ordenada:

Y si quieres seguir usando la notación de C lo puedes hacer pero primero debes llenar la segunda lista:

Código: python,3

n=int(raw_input("ingrese tamanio:"))
x = []
y = [0] * n
(...)


Este código lo que hace es generar una lista con n elementos donde todos son cero.

Una vez acá no tendrás ningun error pero el código no funcionará bien porque tienes unos errores de lógica que es mejor que intentes resolver por tu cuenta. Si no los encuentras, vuelve a preguntar que te ayudo con gusto

Saludos!







No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Enero 08, 2017, 01:03:10 PM #2 Ultima modificación: Enero 08, 2017, 01:22:46 PM por Stiuvert
Muchas gracias once , es lo que más o menos estaba leyendo en unos manuales pero no lo entendia, y vos me aclaraste las dudas , bueno más o menos lo que entendi y leí modifique el codigo de esta manera:

Código: php

n=input("ingrese tamanio:")
x=[]
y=[0]*n
for i in range(0,n):
    x.append(int(raw_input("ingrese valor:")))
m=0
for i in range(n,0,-1):
    m=m+1
    y[m]=x[i]
    print y[m]



No sé si era el error lógico que dices tú , pero el cambio que realize es que puse:

Código: php

for n in range(i-1,0)


Entendiendo lo del step y el corrimiento que difiere mucho Python y C sobre el corrimiento de una lista , lo pase de esta forma:

Código: php

for i in range (n,0,-1)


Ahora el código pasa el for , pero la última parte me tira este problema:

Código: php

y[m]=x[i]
IndexError: list index out of range


Para comprobar que el código realmente invierte la lista pase esto:

Código: php

for i in range(n,0,-1):
      print i

En donde por ejemplo es una lista de 5 , muestra 5,4,3,2,1 , solo que los valores de esas variables no la puedo almacenar en y[m] , en que estoy fallando once?

PD: Disculpen mi forma de escribir o de expresarme ya que no soy de habla hispana.

Hola, el error lo tienes acá:

Código: python,8

n=input("ingrese tamanio:")
x=[]
y=[0]*n
for i in range(0,n):
    x.append(int(raw_input("ingrese valor:")))
m=0
for i in range(n,0,-1):
    m=m+1
    y[m]=x[i]
    print y[m]


Estás aumentando el contador antes de guardar en la memoria el elemento por lo que en lugar de guardar el primer elemento en la posición cero lo guardas en la posición uno y el último no lo guardas en la posición i sino en i+1 y por eso el IndexError

Saludos!







No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Enero 09, 2017, 03:14:24 PM #4 Ultima modificación: Enero 10, 2017, 03:01:54 PM por UpecBlack
si modifique eso
Código: php

n=input("ingrese tamanio:")
x=[]
y=[0]*n
for i in range(n):
   x.append(int(raw_input("ingrese valor:")))
m=0
for i in range(n,0,-1):
   y[m]=x[i]
   m=m+1
   print y[m]


pero me sigue saliendo el error de

Código: php
 y[m]=x[i]
IndexError: list index out of range


ya me di por vencido xd que estoy haciendo mal , igual ya estoy terminando los ejercicios del practico me falta solamente este ese pequeño detalle





Solucionado

Aca el codigo funcionando 100% bien

Código: php


n=input("ingrese tamanio:")
x=[]
y=[0]*n
for i in range(n):
   x.append(int(raw_input("ingrese valor:")))
m=0
for i in range(n-1,-1,-1):
   y[m]=x[i]
   print y[m]
   m=m+1