2016-08-24 8 views
0

あなたは親切な人たちが毎回コードワーへの最後の提出に失敗した理由を教えてください。私はそれを理解できないようです。彼らは失敗した実際の文字列を提供することさえできないので、今まで完全にうまくいったさまざまな組み合わせを試してみるだけです。私は不正行為や何かを意味するものではありませんが、私は率直に言ってかなり不満を持ち、何をすべきかを本当に知りませんでした。数学プログラムのバグ

プログラムは、基本的には、リストの順番で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を与え、次の人があなたに50を渡す場合は25を維持します。i == 100で、あなたとあなたのelifを切り替えます。また、あなたが100のための変更を3つの20のfives(脇に:25ドル紙幣、少なくともUS $でない)を与えるときに一貫しているためには、Cをあなたのリストに追加すべきです。 –

答えて

1

あなたはあなたの25人全員に100人を与えるので、あなたのコードは25,25,25,25,50,100,50で失敗し、最終50人を助けることはできません。100人に50人と25人を与えてください。あなたは50と最後の人が

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

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

の順序を反転助けることができるようになりますし、私はそれが通過する賭けます。

+0

ありがとう!出来た! – AndrewF