/ / Estoy escribiendo un programa para encontrar números en una cadena - python

Estoy escribiendo un programa para encontrar números en una cadena - python

Este código comprobará una cadena y devolverá números.en secuencia y proporcionará números individuales a medida que aparecen en la cadena. Sé que hay maneras mucho mejores que mi código para encontrar números en cadenas, esta es una tarea. Solo tengo problemas con el bucle, el bucle debería ejecutarse hasta el final de la cadena y terminar. No puedo hacer eso.

#variables
start = None
end = None
zero= None
one = None
two = None
three = None
four = None
five = None
six = None
seven = None
eight = None
nine = None
check = None
def numfind():
#will find numbers in a string and allocate position in the string
global zero
global one
global two
global three
global four
global five
global six
global seven
global eight
global nine
global end
global start
zero=text.find("0",end)
one=text.find("1",end)
two=text.find("2",end)
three=text.find("3",end)
four=text.find("4",end)
five=text.find("5",end)
six=text.find("6",end)
seven=text.find("7",end)
eight=text.find("8",end)
nine=text.find("9",end)
def numstart():
#will find the smallest number from among the previous function output and will allocate it as the start of the number, in "start" variable, will use slicing function to return the number
global zero
global one
global two
global three
global four
global five
global six
global seven
global eight
global nine
global start
for n in [zero,one,two,three,four,five,six,seven,eight,nine]:
if start is None:
if n != -1:
start = n
#print start
else:
continue
else:
if n != -1:
if start>n:
start=n
#print start
else:
continue
def numend1():
#Will find the space after numbers begin, will use "end" in the slicing function to return the first number from the string.
global start
global end
end=text.find(" ",start)
#print end
def endchecker():
#this is some bullshit I came up with to terminate the loop, but doesn"t work :(
global zero
global one
global two
global three
global four
global five
global six
global seven
global eight
global nine
global start
global end
global check
for n in [zero,one,two,three,four,five,six,seven,eight,nine]:
if check is None:
if n != -1:
check = n
#print check
else:
check=n
else:
if n != -1:
check=n
#print check
else:
if check>n:
continue
else:
check = n
text=raw_input("Please enter a string containing a set of numbers:")
while True:
numfind()
endchecker()
print check
if check == -1:
break
numstart()
numend1()
try:
if end!=-1:
number1=float(text[start:end])
print number1
else:
number1=float(text[start:])
print number1
break
except:
print "Error"
break
print "End of Program"

Respuestas

0 para la respuesta № 1

He comprobado su código, pero un poco confundido por lo que va a hacer, parece que está intentando obtener las subcadenas de números de un texto.

#python
text=raw_input("Please enter a string containing a set of numbers:")

s = ""
for c in text:
if c >= "0" and c <= "9":
s += c
else:
if len(s) != 0:
print s
s = ""
if len(s) != 0:
print s

print "End of Program"

Espero que te ayude un poco.

Algunos consejos, es mejor depurar mientras se codifica, no escriba un gran bloque de código, pero nunca intentó ejecutarlo, un código pequeño pero útil es mucho mejor.

Por cierto, es mucho mejor evitar el uso de Global, lo que hará que su código sea difícil de leer, los parámetros de función y los valores de retorno son mejores.


0 para la respuesta № 2

Hombre, ¿qué está pasando en tu código? No estoy exactamente seguro de lo que estás tratando de hacer con tu código. Si todo lo que necesitas hacer es verificar una cadena para ver si contiene números y mostrar esos números en secuencia, entonces puedes hacerlo muy fácilmente usando expresiones regulares.

#python
import re
string = raw_input("Enter a string: ")

match = re.findall(r"d", string)

# print the found numbers in the same sequence
# as found in the string
for i in match:
print i,

Si desea imprimir los números en secuencia ordenada, puede usar la función ordenada (). Modifique el bucle for de la siguiente manera.

for i in sorted(match):
print i,

Si está buscando subcadenas más largas, puede modificar el patrón de la siguiente manera:

match = re.findall(r"d+", string)

O la versión no codiciosa:

match = re.findall(r"d+?", string)

De nuevo, no estoy exactamente seguro de si esto resuelve tu problema.