2016-06-22 10 views
0

私はCodeWarsで次のコードを見つけて、その説明も書いています。私のコードは9番目のテストケースではなく8つのテストケースを渡します。誰かが私に何が間違っているのかを伝えることはできますか?私は答えた4つのテストケースにしかアクセスできませんでした。 https://www.codewars.com/kata/555615a77ebc7c2c8a0000b8/discuss#label-issue私のコードにどのテストケースが失敗したのかわからない

''' 
The new "Avengers" movie has just been released! There are a lot of people at the cinema 
box office standing in a huge line. Each of them has a single 100, 50 or 25 dollars bill. 
A "Avengers" ticket costs 25 dollars. Vasya is currently working as a clerk. He wants to 
sell a ticket to every single person in this line. Can Vasya sell a ticket to each person 
and give the change if he initially has no money and sells the tickets strictly in the 
order people follow in the line? Return YES, if Vasya can sell a ticket to each person 
and give the change. Otherwise return NO. 
Examples: 
### Python ### 
tickets([25, 25, 50]) # => YES 
tickets([25, 100]) 
     # => NO. Vasya will not have enough money to give change to 100 dollars 
''' 

def tickets(people): 
    sum = 0 
    for p in people: 
     if p < 25: 
      return 'NO' 
     if p == 25: 
      sum += p 
     elif p > 25: 
      if (sum - p) <0 : 
       return 'NO' 
      else: 
       sum += p 
    return 'YES' 

print(tickets([25, 25, 50])) #YES 
print(tickets([25, 100])) #NO 
print(tickets([25, 25, 50, 50, 50])) #YES 
print(tickets([25, 25, 25, 25, 50, 100, 50])) #YES 
+0

あなたの最後のelseステートメントが問題です。その合計はpでなく25で大きくなります。彼女は変更を返すのですか? –

+0

私の現在のプログラムは、コードに示されているテストに合格します。私のコードが失敗するというテストケースを考えることができますか? –

+0

まだelse節なしで実現しましたが、私の4つのテストケースは合格しましたが、未知の第9テストケースは@ Ev.Kounis @ Ev.Kounisに渡しません –

答えて

2

if文も間違っている場合。 if文の誤りについては、テストケース[25、50、100]をsum + = pの間違いと次のシナリオ[25、50]について考えてみてください。以下のコードで、両方の問題を修正する必要があります。

def tickets(people): 
    register = {'25s': 0, '50s': 0, '100s': 0} 
    cash_in_register = 0 
    for p in people: 
     if p < 25: 
      return 'NO' 
     elif p == 25: 
      cash_in_register += p 
      register['25s'] += 1 
     else: 
      if (p - cash_in_register) <= 25: # do you have enough money for change? 
       if p == 50 and register['25s'] >= 1: 
        register['50s'] += 1 
        register['25s'] -= 1 
        cash_in_register += 25 
       elif (p == 100 and register['50s'] >= 1 and register['25s'] >= 1): 
        register['100s'] += 1 
        register['50s'] -= 1 
        register['25s'] -= 1 
        cash_in_register += 25 
       elif (p == 100 and register['25s'] >= 3): 
        register['100s'] += 1 
        register['25s'] -= 3 
        cash_in_register += 25 
       else: 
        return 'NO' 
      else: 
       return 'NO' 
    return 'YES' 

私に教えてください! ☺

+0

コードワードプラットフォームでコードを試してから提出してください。コードがうまくいかなかった –

+0

私は今、コードワードでプロフィールを作成しなければなりませんか?それの問題は何でしたか?あなたが提供した4つのケースはまだ仕事+あなたが間違っていたことをあなたに説明しました。 –

+0

それは残念ながら問題が何であるか教えてくれません! –

1

私は問題はあなたが持っている実際の請求書を見ていないということです。

テストケースを見てください[25,25,50,50,50]:「NO」と表示されますが、コードが正しく理解されていると「YES」と答えます。

2番目の50の後に、合計で50ドルがありますが、その50ドルのビルは1つです。だから別の顧客が50ドルで来たら、レジ係は25ドルを返すことはできません。

+0

非常に真実..これは、ボールゲームを完全に変更します。私は自分のコードを適応させます。 –

関連する問題