Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: ChicoMaravilla en 3 Diciembre 2010, 14:47 pm



Título: [Python] - El más cercano al primero
Publicado por: ChicoMaravilla en 3 Diciembre 2010, 14:47 pm
Buenas a todos, tengo otra duda, es sobre este ejercicio:

· 83 Diseña un programa que, dados cinco n´umeros enteros, determine cual de los cuatro
ultimos numeros es mas cercano al primero. (Por ejemplo, si el usuario introduce los n´umeros
2, 6, 4, 1 y 10, el programa respondera que el numero mas cercano al 2 es el 1.)
mi pregunta:¿ hay algún comando de aproximación o algún método para resolver esto?



Título: Re: [Python] - El más cercano al primero
Publicado por: Novlucker en 3 Diciembre 2010, 14:54 pm
Hay maneras de hacerlo sencillo, pero creo que lo que te pide el ejercicio es para que lo hagas con condicionales y tal vez bucles.

[offtopic]
Se nota que copias y pegas los textos de un pdf porque los acentos salen mal, y los códigos no tengo idea, pero vienen preformateados con tablas y demás, y salen horribles :xD Verifica que los códigos solo ventan entre etiquetas [code=python][/code]
[/offtopic]

Saludos


Título: Re: [Python] - El más cercano al primero
Publicado por: ChicoMaravilla en 3 Diciembre 2010, 15:36 pm
ok, si no sabia porque me salían mal los tildes   :silbar: , gracias por la respuesta inmediata  ::)


Título: Re: [Python] - El más cercano al primero
Publicado por: ChicoMaravilla en 4 Diciembre 2010, 03:36 am
aquí les dejo mi solución.

PD: perdónenme que no les conteste tan rápido pero recién me fije el PM de casualidad

EL EJERCICIO DECÍA QUE UTILIZARA LOS "IF", PERO... ME PASE UN POQUITO JEJEJ
LO RE INSCRIBÍ, Y CREE UN MONSTRUO

CRÉDITOS: SOLO PARA MI   ;D

me mate haciéndolo y me reeeeee queme la cabeza ajaja uuuuuuuuuuffff alfiiiin aleluyaaaaaaaa y aca les dejo MI HIJO:

Código
  1. #-------------------------------------------------------------------------------
  2. # Name:        VALOR CERCANO
  3. # Purpose:
  4. #
  5. # Author:      Lucas_Solymar
  6. #
  7. # Created:     04/12/2010
  8. # Copyright:   (c) Administrador 2010
  9. # Licence:     <your licence>
  10. #-------------------------------------------------------------------------------
  11. #!/usr/bin/env python
  12.  
  13. numero1=int(input("DAME UN NUMERO"))
  14. numero2=int(input("DAME OTRO NUMERO"))
  15. numero3=int(input("DAME OTRO NUMERO"))
  16. numero4=int(input("DAME OTRO NUMERO"))
  17. numero5=int(input("DAME OTRO NUMERO"))
  18. rango=0
  19. print "Los valores son",numero1,numero2,numero3,numero4,numero5
  20. if numero2<numero1:
  21.    rango1=numero1 - numero2
  22.    rango2=numero1 - numero3
  23.    rango3=numero1 - numero4
  24.    rango4=numero1 - numero5
  25.    if rango1<rango2:
  26.            if rango1<rango3:
  27.                if rango1<rango4:
  28.                    numero=2
  29.    if rango2<rango3:
  30.            if rango2<rango4:
  31.                if rango2<rango1:
  32.                    numero=3
  33.    if rango3<rango4:
  34.            if rango3<rango1:
  35.                if rango3<rango2:
  36.                    numero=4
  37.    if rango4<rango1:
  38.            if rango4<rango2:
  39.                if rango4<rango3:
  40.                    numero=5
  41. if numero3<numero1:
  42.    rango1=numero1 - numero2
  43.    rango2=numero1 - numero3
  44.    rango3=numero1 - numero4
  45.    rango4=numero1 - numero5
  46.    if rango1<rango2:
  47.            if rango1<rango3:
  48.                if rango1<rango4:
  49.                    numero=2
  50.    if rango2<rango3:
  51.            if rango2<rango4:
  52.                if rango2<rango1:
  53.                    numero=3
  54.    if rango3<rango4:
  55.            if rango3<rango1:
  56.                if rango3<rango2:
  57.                    numero=4
  58.    if rango4<rango1:
  59.            if rango4<rango2:
  60.                if rango4<rango3:
  61.                    numero=5
  62. if numero4<numero1:
  63.    rango1=numero1 - numero2
  64.    rango2=numero1 - numero3
  65.    rango3=numero1 - numero4
  66.    rango4=numero1 - numero5
  67.    if rango1<rango2:
  68.            if rango1<rango3:
  69.                if rango1<rango4:
  70.                    numero=2
  71.    if rango2<rango3:
  72.            if rango2<rango4:
  73.                if rango2<rango1:
  74.                   numero=3
  75.    if rango3<rango4:
  76.            if rango3<rango1:
  77.                if rango3<rango2:
  78.                    numero=4
  79.    if rango4<rango1:
  80.            if rango4<rango2:
  81.                if rango4<rango3:
  82.                    numero=5
  83. if numero5<numero1:
  84.    rango1=numero1 - numero2
  85.    rango2=numero1 - numero3
  86.    rango3=numero1 - numero4
  87.    rango4=numero1 - numero5
  88.    if rango1<rango2:
  89.            if rango1<rango3:
  90.                if rango1<rango4:
  91.                    numero=2
  92.    if rango2<rango3:
  93.            if rango2<rango4:
  94.                if rango2<rango1:
  95.                    numero=3
  96.    if rango3<rango4:
  97.            if rango3<rango1:
  98.                if rango3<rango2:
  99.                    numero=4
  100.    if rango4<rango1:
  101.            if rango4<rango2:
  102.                if rango4<rango3:
  103.                    numero=5
  104. if numero2>numero1:
  105.    rango1=numero1 - numero2
  106.    rango2=numero1 - numero3
  107.    rango3=numero1 - numero4
  108.    rango4=numero1 - numero5
  109.    if rango1>rango2:
  110.            if rango1>rango3:
  111.                if rango1>rango4:
  112.                    numero=2
  113. if numero3>numero1:
  114.    rango1=numero1 - numero2
  115.    rango2=numero1 - numero3
  116.    rango3=numero1 - numero4
  117.    rango4=numero1 - numero5
  118.    if rango2>rango1:
  119.            if rango2>rango3:
  120.                if rango2>rango4:
  121.                    numero=3
  122. if numero4>numero1:
  123.    rango1=numero1 - numero2
  124.    rango2=numero1 - numero3
  125.    rango3=numero1 - numero4
  126.    rango4=numero1 - numero5
  127.    if rango3>rango1:
  128.            if rango3>rango2:
  129.                if rango3>rango4:
  130.                    numero=4
  131. if numero5>numero1:
  132.    rango1=numero1 - numero2
  133.    rango2=numero1 - numero3
  134.    rango3=numero1 - numero4
  135.    rango4=numero1 - numero5
  136.    if rango4>rango1:
  137.            if rango4>rango2:
  138.                if rango4>rango4:
  139.                    numero=5
  140.  
  141.  
  142. print "El valor ",numero,"es el mas sercano al primero"

a diferencia de otros, este acepta números mayores y menos que el valor inicial.

materiales:
-una hora
-mucha lógica

y me quede super contento de que lo termine XD
lo hice bien completito, para que pueda abarcar todas las posibilidades.

el script lo que hace es mostrar la lista que colocaste en orden de como los has escrito, y luego te dice que por ejemplo el numero 2 es el más cercano, o cea que el 2º valor que colocaste sera el indicado


PD: LEGIBILIDAD 0%
si me preocupaba en eso, no terminaba más



Título: Re: [Python] - El más cercano al primero
Publicado por: Novlucker en 5 Diciembre 2010, 03:39 am
Citar
PD: perdónenme que no les conteste tan rápido pero recién me fije el PM de casualidad
Te envié el PM porque quería asegurarme de que lo hubieses hecho, cosa de la que desconfiaba :P

Citar
me mate haciéndolo y me reeeeee queme la cabeza ajaja uuuuuuuuuuffff alfiiiin aleluyaaaaaaaa y aca les dejo MI HIJO:
Citar
PD: LEGIBILIDAD 0%
si me preocupaba en eso, no terminaba más

Me alegro que lo hayas hecho tú, eso es fundamental, no importa si no es de la manera correcta o si se puede hacer mejor o más legible, la cuestión es que puedas razonarlo y que le encuentres una lógica por ti mismo, con eso es suficiente ;D

Otra cosa, estas programando en Python 3? Porque si es de la rama 2.x no es necesario hacer int, el input de por si es para números :P

Saludos


Título: Re: [Python] - El más cercano al primero
Publicado por: ChicoMaravilla en 5 Diciembre 2010, 18:46 pm
Te envié el PM porque quería asegurarme de que lo hubieses hecho, cosa de la que desconfiaba :P

Me alegro que lo hayas hecho tú, eso es fundamental, no importa si no es de la manera correcta o si se puede hacer mejor o más legible, la cuestión es que puedas razonarlo y que le encuentres una lógica por ti mismo, con eso es suficiente ;D

Otra cosa, estas programando en Python 3? Porque si es de la rama 2.x no es necesario hacer int, el input de por si es para números :P

Saludos


 ::) , el int lo pongo de no se que.  Me resulta más comodo utilizar pyscripter, se los recomiendo, esta bueno. y Gracias Novlucker por tus palabras ;)


Título: Re: [Python] - El más cercano al primero
Publicado por: [L]ord [R]NA en 6 Diciembre 2010, 06:53 am
Solo una pequeña correccion, si utilizas iteraciones podrias economizar muchas lineas y otras muchas mas si entiendes verdaderamente el problema antes de empezar a programar, aparte de eso tambien economizarias espacio en memoria.

Código
  1. #!/usr/bin/env python
  2. a=input("Ingresa un numero: ")
  3. d=input("Ingresa otro numero: ")
  4. c=abs(d-a)    
  5.  
  6. for i in range(0,3):
  7.    b = input("Ingresa otro numero: ")
  8.    if c>abs(b-a):
  9.        c=abs(b-a)
  10.        d=b
  11.  
  12. print "el numero mas cercano a "+str(a)+" es "+str(d)


Título: Re: [Python] - El más cercano al primero
Publicado por: Novlucker en 6 Diciembre 2010, 10:30 am
Lo que pasa es que para llegar al for aún le quedan 16 páginas :xD

Saludos


Título: Re: [Python] - El más cercano al primero
Publicado por: [L]ord [R]NA en 6 Diciembre 2010, 14:55 pm
Lo que pasa es que para llegar al for aún le quedan 16 páginas :xD

Saludos

igual necesita la distancia absoluta entre un numero y otro y no la calcula... por lo tanto dara resultados erroneos... y aun me apego a que tendria que sentarse a mirar bien el problema antes de pasarlo ya a un lenguaje de programacion.

Código
  1. #!/usr/bin/env python
  2. a=input("Ingresa un numero: ")
  3. d=input("Ingresa otro numero: ")
  4. c=abs(d-a)  
  5.  
  6. b = input("Ingresa otro numero: ")
  7. if c>abs(b-a):
  8.    c=abs(b-a)
  9.    d=b
  10.  
  11. b = input("Ingresa otro numero: ")
  12. if c>abs(b-a):
  13.    c=abs(b-a)
  14.    d=b
  15.  
  16. b = input("Ingresa otro numero: ")
  17. if c>abs(b-a):
  18.    c=abs(b-a)
  19.    d=b
  20.  
  21. print "el numero mas cercano a "+str(a)+" es "+str(d)


Título: Re: [Python] - El más cercano al primero
Publicado por: Novlucker en 6 Diciembre 2010, 15:04 pm
Ups es verdad, el problema es que siempre me marca como más cercano el primer número, lo cual es lógico pero no válido :xD

Por otra parte si te fijas, el hizo algo similar sin usar abs, por eso tiene las restas y los mayores/menores para un lado y para el otro

¿Podrías hacerlo solo con if? :xD

Saludos


Título: Re: [Python] - El más cercano al primero
Publicado por: [L]ord [R]NA en 6 Diciembre 2010, 15:14 pm
:xD siquiera te fijaste en el codigo que esta arriba de tu ultimo post?


Título: Re: [Python] - El más cercano al primero
Publicado por: Novlucker en 6 Diciembre 2010, 15:32 pm
Si, usas abs, yo digo solo a base de if :D

Saludos


Título: Re: [Python] - El más cercano al primero
Publicado por: [L]ord [R]NA en 6 Diciembre 2010, 16:37 pm
Si, usas abs, yo digo solo a base de if :D

Saludos


Si podria...
Código
  1. #!/usr/bin/env python
  2. a=input("Ingresa un numero: ")
  3. d=input("Ingresa otro numero: ")
  4. c=d-a
  5. if c<0: c*=(-1)  
  6.  
  7. b = input("Ingresa otro numero: ")
  8. if 0>b-a:
  9.    if c>(a-b):
  10.        c=a-b
  11.        d=b
  12. else:
  13.    if c>(b-a):
  14.        c=b-a
  15.        d=b
  16.  
  17. b = input("Ingresa otro numero: ")
  18. if 0>b-a:
  19.    if c>(a-b):
  20.        c=a-b
  21.        d=b
  22. else:
  23.    if c>(b-a):
  24.        c=b-a
  25.        d=b
  26.  
  27. b = input("Ingresa otro numero: ")
  28. if 0>b-a:
  29.    if c>(a-b):
  30.        c=a-b
  31.        d=b
  32. else:
  33.    if c>(b-a):
  34.        c=b-a
  35.        d=b
  36.  
  37. print "el numero mas cercano a "+str(a)+" es "+str(d)


Título: Re: [Python] - El más cercano al primero
Publicado por: Novlucker en 6 Diciembre 2010, 16:57 pm
Ya, pero es lo que digo, es lo que intentó hacer él, lo que ocurre es que se ciñó un poco más a la letra, teniendo primero los 5 números para luego hacer la comparación, parece que no estuvieses viendo su código, por que crees que tiene tantas comparaciones? :xD

Saludos


Título: Re: [Python] - El más cercano al primero
Publicado por: [L]ord [R]NA en 7 Diciembre 2010, 06:43 am
Ya, pero es lo que digo, es lo que intentó hacer él, lo que ocurre es que se ciñó un poco más a la letra, teniendo primero los 5 números para luego hacer la comparación, parece que no estuvieses viendo su código, por que crees que tiene tantas comparaciones? :xD

Saludos


Lo vi demasiaaaaado largo para lo que pedian.


Título: Re: [Python] - El más cercano al primero
Publicado por: lnvisible en 7 Diciembre 2010, 07:23 am
Código
  1. a=int(input("Ingresa un numero: "))
  2. b=int(input("Ingresa otro numero: "))
  3. d = b - a if b > a else a - b
  4. c = int(input("Ingresa otro numero: "))
  5. b = c if c > a and c - a < d or c < a and a - c < d else b
  6. d = b - a if b > a else a - b
  7. c = int(input("Ingresa otro numero: "))
  8. b = c if c > a and c - a < d or c < a and a - c < d else b
  9. d = b - a if b > a else a - b
  10. c = int(input("Ingresa otro numero: "))
  11. b = c if c > a and c - a < d or c < a and a - c < d else b
  12. print("el numero mas cercano a %d es %d"%(a,b))

¿Por que solo usar if? Es mejor usar todo lo del lenguaje, es lo bueno de python :)

PD:

Código
  1. a=int(input("Ingresa un numero: "))
  2. b=int(input("Ingresa otro numero: "))
  3. c = int(input("Ingresa otro numero: "))
  4. b = c if (b-a if b>a else a-b)>(c-a if c>a else a-c) else b
  5. c = int(input("Ingresa otro numero: "))
  6. b = c if (b-a if b>a else a-b)>(c-a if c>a else a-c) else b
  7. c = int(input("Ingresa otro numero: "))
  8. b = c if (b-a if b>a else a-b)>(c-a if c>a else a-c) else b
  9. print("el numero mas cercano a %d es %d"%(a,b))

:D