2016-08-24 44 views
0

你能好心人请告诉我,为什么这个节目对我的最终失败,每一次提交codewars,我似乎无法弄清楚。他们甚至没有提供失败的实际字符串,所以我只是尝试各种不同的组合,迄今为止所有这些组合都已完美运行。我不是故意欺骗或任何事情,但坦率地说,我很沮丧,并不知道还有什么要做。错误的数学程序

的节目基本上应该扫描“人”的单25,50或100美元的钞票名单列表的顺序,并计算是否有足够的零钱卖给他们所有的电影票。票价25美元。该计划没有任何金钱或变化,所以它基本上必须处理它从线上得到的东西。如果整行可以被处理,程序应该返回一个字符串“YES”,否则返回“NO”。

因此,例如,[25,25,50,100]应该返回一个肯定的,等...

这里是我的代码 -

def tickets(x): 
    t = 0 
    f = 0 
    h = 0 
    lst = [] 

    for i in x: 
     if i==25: 
      t+=1 
      lst.append('c') 
     elif i==50: 
      if t>=1: 
       t-=1 
       f+=1 
       lst.append('c') 
      else: 
       lst.append('u') 



     elif i == 100: 
      if t>=3: 
       t-=3 
       h+=100 
      elif f>=1 and t>=1: 
       f-=1 
       t-=1 
       lst.append('c') 
      else: 
       lst.append('u') 


    if 'u' not in lst: 
     return "YES" 

    else: 
     return "NO" 

识别错误任何帮助,将不胜感激。谢谢 !

+0

的第一个建议是使用有意义的名称变量。 'lst','t'或'F'传达任何关于在这使得很多困难阅读和理解程序的上下文中的变量。 –

+0

如果有人有一百你持有3二十五岁以下儿童和50,不要放弃你的所有25个的。给他们一个50和25,并保持你的25s,如果下一个人给你一个50。在i == 100,切换你的if和elif。 (:有没有25美元的钞票,至少不是美国$除外),你应该添加C到你的列表,当你给100改变与三张25击掌也一致。 –

回答

1

你的代码将在25,25,25,25,50,100,50失败,因为你给100人所有的25人,然后你无法帮助最终的50人。给100个50和25和你将能够帮助的最后一个人用50翻转的

if t>=3: 
      t-=3 
      h+=100 
      lst.append('c') 
     elif f>=1 and t>=1: 
      f-=1 
      t-=1 
      lst.append('c') 

顺序

 if f>=1 and t>=1: 
      f-=1 
      t-=1 
      lst.append('c') 
     elif t>=3: 
      t-=3 
      h+=100 
      lst.append('c') 

和我打赌它传递。

+0

非常感谢!有效! – AndrewF