Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: juanfelr en 27 Abril 2022, 03:56 am



Título: Obtener valor numerico y posicion en una cadena de caracteres - python
Publicado por: juanfelr en 27 Abril 2022, 03:56 am
Saludos a todos los miembros del foro.

Procuraré explicar el código que tengo en mente de la manera mas clara posible con las siguientes instrucciones quedebe cumplir:

1. Debe solicitar al usuario ingresar texto que puede ser alfanumérico.
2. Para el texto ingresado por el usuario debe detectar la posición del primer número e indicar de que numero se trata.

Por ejemplo, si el usuario ingresa el código ABC123, la posición es 3 (teniendo en cuenta que comienza en 0) y el número es 1.

hasta el momento tengo el siguiente código y creo que estoy cerca, pero más abajo inidco el problema con la lógica.

plate=input("Plate: ")

for char in plate:
    i=0
    for i in range(10):
        if char.find(f"{i}")!=-1:
                                 
            print(i)
            break

El problema es que cuando termina el ciclo interno no se detiene y continúa con el siguiente caracter de la palabra ingresada, es decir, si ingreso AB45 me da como resultado:

4
5

en lugar de solo:
4

si adiciono un break por fuera del for interior, simplemente no muestra nada, y si adiciono print(i) por fuera de los ciclos me muestra solo el numero 9 (como si el ciclo hubiese continuado hasta el último valor de i)

Alguien sabe si voy por buen camino o hay otra forma más sencilla de resolver este requisito?

Mil gracias por su atención y feliz día.


Título: Re: Obtener valor numerico y posicion en una cadena de caracteres - python
Publicado por: juanfelr en 27 Abril 2022, 04:27 am
Señores lo logré,

después de una semana pensando, y apenas unos minutos de haber publicado el post, se me ocurrió otra forma.

lo comparto para quienes puedan tener la misma situación:

plate=input("Plate: ")
n=len(plate)
for i in range(n):
    if plate.isnumeric()==True:
        break
num=plate
print(num)

para mi sigue el trabajo porque esto es solo una parte de la tarea, seguiré pensando.

Espero que esta solución sea de ayuda a muchas personas.

Feliz día.


Título: Re: Obtener valor numerico y posicion en una cadena de caracteres - python
Publicado por: Xyzed en 27 Abril 2022, 05:26 am
Señores lo logré,

después de una semana pensando, y apenas unos minutos de haber publicado el post, se me ocurrió otra forma.

lo comparto para quienes puedan tener la misma situación:

plate=input("Plate: ")
n=len(plate)
for i in range(n):
    if plate.isnumeric()==True:
        break
num=plate
print(num)

para mi sigue el trabajo porque esto es solo una parte de la tarea, seguiré pensando.

Espero que esta solución sea de ayuda a muchas personas.

Feliz día.
Hola.

Tu código no cumple con lo que redactas, te explico porque:

Código
  1. #Si buscas obtener el numero de orden del primero numero de una cadena, con tu código no estás haciendo eso.
  2.  
  3. plate=input("Plate: ")
  4. n=len(plate)
  5. for i in range(n):
  6.    if plate.isnumeric()==True:
  7.        break
  8. num=plate
  9. print(num)
  10.  
  11. #Linea 5: ¿Para que recorrer un rango?, mejor recorrer la cadena.
  12. #Linea 6: No hace falta la igualdad y el "True", "if plate.isnumeric()" te devolvera un booleano. Al indicar "if plata.isnumeric()", estás esperando un True automaticamente.
  13. #Linea 8: Estás definiendo a la variable "num" el valor de la cadena, no el numero de orden del caracter numerico.
  14.  
  15.  

A continuación, te aporto la solución comentada.

Código
  1. plate = input("Plate: ")
  2. es_numero = 0
  3. for x in plate:
  4.    if x.isnumeric():
  5.        es_numero = x
  6.        break
  7. print(plate.find(es_numero))
  8. #Explicaciones a partir de "es_numero".
  9. #Linea 3: recorremos el string "plate". "x" tomará el valor de c/u de los valores de"plate" previo al break.
  10. #Linea 4: Validamos si el carácter actual es numérico (que es lo que intentabas).
  11. #Linea 5/6: En caso de ser numerico, la variable declarada en "es_numero" tomará el valor de x (es decir, el caracter actual numerico) y se terminará el recorrido de la cadena.
  12. #Finalmente con la función "find", buscamos el numero de orden en la cadena del valor seteado en "es_numero".
  13.  

Espero que te sirva. Te recomiendo leer más documentación, eso te facilitará el aprendizaje y harás código mucho más legible.

Saludos.


Título: Re: Obtener valor numerico y posicion en una cadena de caracteres - python
Publicado por: juanfelr en 28 Abril 2022, 03:49 am
Saludos XyZed.

De hecho me estaba funcionando parcialmente, solo que al publicar  me omitió el símbolo "[ ]" y su contenido, pero tienes toda la razón, no estaba cumpliendo con el requisito.

Código:
 plate=input("Plate: ")
n=len(plate)
for i in range(n):
    if plate[i].isnumeric()==True:
        break
num=plate[i]
print(num)

Muchas gracias por tu aporte, lo voy a ensayar para lograr el objetivo.

Aún estoy comenzando y como dices tengo mucho por leer al respecto.

Gracias por tu paciencia y feliz noche.