2016-08-24 62 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