2015-06-20 50 views
0

此代码将检查一个字符串并按顺序返回数字,并将提供单个数字,因为它们出现在字符串中。我知道有很多方法比我的代码更好地查找字符串中的数字,这是一项任务。我只有循环的问题,循环应该运行直到字符串结束并终止。我无法做到这一点。我正在编写一个查找字符串中的数字的程序

#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" 
+0

你的代码中的所有全局变量正在发生什么? –

+5

不使用全局变量,使用返回值;使用列表。 – Daniel

+0

您在代码中大量使用了'globals' ......这并不是建议的 –

回答

0

我检查你的代码,但你会做什么有点困惑,看来你是想从一个文本数子。

#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" 

希望能帮助你一些。

一些建议,编码时更好的调试,不写大块的代码,但从来没有试图运行它,一个小而有用的代码更好。

顺便说一句,避免使用Global会好得多,这会让你的代码难以阅读,函数参数和返回值会更好。

0

男人,你的代码是怎么回事?我不完全确定你想要用你的代码做什么。如果您只需检查一个字符串是否包含数字并按顺序显示这些数字,那么您可以使用正则表达式轻松完成这些操作。

#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, 

如果要按顺序打印数字,可以使用sorted()函数。如下修改for循环。

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

还是非贪婪版本:

for i in sorted(match): 
    print i, 

如果您正在寻找长串,你可以按如下修改模式

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

同样,我不完全确定这是否解决了你的问题。

相关问题