2013-04-23 71 views
2

我有一个包含货币值的字符串。
我必须从字符串中逐个字符地读取字符,函数必须返回result = 0,以获得val的所有值。验证以逗号分隔的十进制值字符char char

例:string = "You Score is MX var."
哪里var可具有这些值的任何

[14 , 14.98 , 114 , 114.98 , 1116 , 1,116 , 1116.78 , 1,116.18 , 11,12,123 , 1,12,123.89 ... and so on...] 

MY CODE

def evaluate(): 
    result , count = 0 , 0 
    dot , comma = False , False 
    while (index_of_String < Len_of_string): 
     ch = string[index_of_String]   
     if (ch == '.'): 
      if (dot == True): 
       break ;     
      dot = True    
     elif (ch == ','): 
      if (dot == True): 
       break    
      comma = True    
     elif not (ch >= '0' and ch <= '9'): 
      if not (ch == ' ' or ch == ','):     
       result = -1    
      break 
     else: 
      if (dot == False): 
       count += 1 
     print ("Char %c" % ch) 
     index_of_String += 1   

    print ("count of numeric digits %d" % count) 
    if (result == 0): 
     if dot == False: 
      result = -1 
     if comma == False: 
      if (count > 3): 
       result = -1 

    return (result, index_of_String) 

所需的输出

string = "You Score is MX 14." 
result = 0 

string = "You Score is MX 14.89." 
result = 0 

string = "You Score is MX 1114.89." 
result = 0 

string = "You Score is MX 1,114.89." 
result = 0 

string = "You Score is MX 11,,,14.89." 
result = -1 (fail) 

string = "You Score is MX 11.14.89." 
result = -1 (fail) 

string = "You Score is MX 1,114.89." 
result = 0 

string = "You Score is MX 1,14.89." 
result = -1 (fail) 

string = "You Score is MX 1,11,114.89." 
result = 0 

我需要做些什么修改才能使我的代码适用于所有这些情况。
任何帮助修改?

+0

@Schoolboy用'index_of_String'替换'rIndex'。 – Noman 2013-04-23 12:31:56

+0

1-正在逐字读一个要求吗? 2“1,116.18”是指“1116.18”还是两个值为“1”和“116.8”? 3-我们可以假设字符串中只有一个数字值吗? – elyase 2013-04-23 14:00:15

+0

你能解释一下你的例子吗?这是非常混乱! – Dhara 2013-04-23 14:07:22

回答

0

如果烧焦成炭不是那么一个要求:

def evaluate(string, values): 
    for word in string.rstrip('.').split(): 
     if word in values: 
      return False 
    return True 

测试:

>>> values = map(str, [14 , 14.98 , 114 , 114.98 , 1116]) 
['14', '14.98', '114', '114.98', '1116'] 
>>> string = 'You Score is MX 14.98.' 
>>> evaluate(string, values) 
False 
string = 'You Score is MX 115.' # 115 is not in values 
>>> evaluate(string, values) 
True 
+0

这两种解决方案都不适合我。尽管我明白诺曼想要一个包含十进制或逗号分隔十进制值的字符串在字符串中。一个字符读取,并最终找到天气的数字是一个有效的数字与否。我也无法找到任何解决方案... – KumarDharm 2013-04-26 05:39:03

+0

“没有工作”是什么意思?你不能重现我添加的测试用例,或者你认为这个函数应该有区别地工作吗?如果诺曼能像我写的那样编写一个测试,显示特定测试值的函数的预期输入/输出,那将会很好。在他的例子中'var'既不是一个字符串也不是一个列表。 – elyase 2013-04-26 10:25:27

0

如果你真的需要通过炭去焦炭则:

def evaluate(string, values): 
    value = [] 
    for char in string: 
     if char.isdigit() or char in ',.': 
      value.append(char) 
    value = ''.join(value).strip('.,') 
    return int(value in values) 

测试

>>> values = ['14', '14.98', '114', '114.98', '1,116.5'] 
>>> string = 'You Score is MX 14.98.' 
>>> evaluate(string, values) 
1 
string = 'You Score is MX 115.' # 115 is not in values 
>>> evaluate(string, values) 
0 
+0

谢谢你的答案,但它不工作,因为它应该。 – Noman 2013-04-24 02:59:46

+0

您无法在测试部分重现结果,或者测试部分中的某些部分是错误的? – elyase 2013-04-24 13:24:05

相关问题