2016-06-22 9 views
0

Ich habe den folgenden Code in CodeWars gefunden und habe die Beschreibung auch geschrieben. Es sagt, mein Code übergibt 8 Testfälle und nicht der 9. Test. Kann mir jemand eine Idee geben, was falsch ist oder wie soll ich weitermachen? Ich hatte nur Zugriff auf die vier Testfälle, die ich als Antwort hatte. https://www.codewars.com/kata/555615a77ebc7c2c8a0000b8/discuss#label-issuenicht sicher, welche Testfälle mein Code

''' 
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

Ihre letzte else-Anweisung ist das Problem. Die Summe wird um 25 erhöht, nicht um p. Sie gibt die Änderung zurück, nicht wahr? –

+0

mein aktuelles Programm besteht jedoch die im Code gezeigten Tests. Kannst du an einen Testfall denken, dass mein Code fehlschlägt? –

+0

naja gerade realisiert ohne diese else-klausel noch meine vier getesteten testfälle überholt doch noch nicht den neunten testfall in codewars @ Ev.Kounis –

Antwort

2

Die if-Anweisung auch falsch ist. Denken Sie an den Testfall [25, 50, 100] für den Fehler Summe + = p und das folgende Szenario [25, 50] für den Fehler if-Anweisung. Mit dem folgenden Code sollten beide Probleme behoben werden.

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' 

Lassen Sie mich wissen! ☺

+0

Bitte versuchen Sie Ihren Code in der codewars-Plattform, bevor Sie ihn abschicken. Du hast nicht funktioniert –

+0

Also muss ich jetzt ein Profil in Codewars erstellen? Was war das Problem damit? Die 4 Fälle, die du geliefert hast, funktionieren immer noch. Ich habe dir erklärt, was du falsch gemacht hast und es behoben. –

+0

Es sagt leider nicht, was das Problem ist! –

1

Ich denke, das Problem ist, dass Sie nicht auf die tatsächlichen Rechnungen, die Sie haben.

Blick auf den Testfall [25, 25, 50, 50, 50]: Es sollte ein "NEIN" erzeugen, aber wenn ich Ihren Code richtig verstehe, antwortet Ihr "JA".

Nach den zweiten 50, gibt es 50 $ in Ihrer Summe, aber seine 50 $ Bill. Wenn also ein anderer Kunde mit 50 $ kommt, kann der Kassierer 25 $ nicht zurückgeben.

+0

so sehr wahr .. Dies ändert das Ballspiel vollständig. Ich werde meinen Code anpassen. –