2016-06-22 1 views
0

J'ai trouvé le code suivant dans CodeWars et j'ai aussi écrit la description. Il dit que mon code passe 8 testcases et pas le 9ème. Quelqu'un peut-il me donner une idée de ce qui ne va pas ou comment dois-je procéder? Je n'avais accès qu'aux quatre cas de test auxquels j'ai répondu. https://www.codewars.com/kata/555615a77ebc7c2c8a0000b8/discuss#label-issueVous ne savez pas quels tests échoue mon 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

Votre dernière instruction else est le problème. La somme devient plus grande de 25, pas de p. Elle rend le changement, n'est-ce pas? –

+0

mon programme actuel passe cependant les tests indiqués dans le code. pouvez-vous penser à un test que mon code va échouer? –

+0

bien juste réalisé sans cette autre clause encore mes quatre testcases montrés passe mais je ne passe pas l'inconnu 9e testcase dans codewars @ Ev.Kounis –

Répondre

2

L'instruction if est également faux. Pensez au cas de test [25, 50, 100] pour l'erreur somme + = p et au scénario suivant [25, 50] pour l'erreur d'instruction if. Avec le code ci-dessous, les deux problèmes devraient être corrigés.

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' 

Faites-moi savoir! ☺

+0

s'il vous plaît essayez votre code dans la plate-forme codewars avant de le soumettre. Votre code n'a pas fonctionné –

+0

Donc je dois aller créer un profil dans Codewars maintenant? Quel était le problème avec ça? Les 4 cas que vous avez fournis fonctionnent toujours + je vous ai expliqué ce que vous avez mal fait et l'ai réparé .. –

+0

Il ne dit pas quel est le problème malheureusement! –

1

Je pense que le problème est que vous ne regardez pas les factures réelles que vous avez. Regardez le test [25, 25, 50, 50, 50]: Cela devrait produire un "NON", mais si je comprends bien votre code, le vôtre répond "OUI". Après le deuxième 50, il y a 50 $ dans votre somme, mais c'est un 50 $ Bill. Donc, lorsqu'un autre client arrive avec 50 $, le caissier ne peut pas rembourser 25 $.

+0

donc très vrai .. Cela change complètement le jeu de balle. Je vais adapter mon code. –