2016-06-22 6 views
0

Я нашел следующий код в CodeWars и написал описание тоже. В нем говорится, что мой код пропускает 8 тестовых площадок, а не 9-й. Может ли кто-нибудь дать мне представление о том, что не так, или как мне приступить к этому? У меня был доступ только к четырем тестовым ящикам, которые у меня есть. 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

Ваше последнее заявление - проблема. Сумма увеличивается на 25, а не на стр. Она возвращает изменения, не так ли? –

+0

моя текущая программа передает тесты, показанные в коде. можете ли вы придумать тестовый код, что мой код не удастся? –

+0

ну, только что реализованный без этого еще предложения все еще мои четыре показанные проспекты, но все же я не пропускаю неизвестную 9-ю тестовую папку в кодовых словах @ Ev.Kounis –

ответ

2

Условный оператор тоже неправильно. Подумайте о тестовой ячейке [25, 50, 100] для ошибки суммы + = p и следующего сценария [25, 50] для ошибки утверждения if. С приведенным ниже кодом обе проблемы должны быть исправлены.

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

Итак, мне нужно пойти и создать профиль в Codewars сейчас? В чем была проблема? 4 случая, которые вы поставили, по-прежнему работают + я объяснил вам, что вы сделали неправильно, и исправил его. –

+0

Это не говорит о том, в чем проблема, к сожалению! –

1

Я думаю, проблема в том, что вы не смотрите на фактические счета, которые у вас есть.

Посмотрите на тестовое окно [25, 25, 50, 50, 50]: Он должен произвести «НЕТ», но если я правильно понимаю ваш код, ваши ответы «ДА».

После второго 50, в вашей сумме 50 $, но его один 50 $ Bill. Поэтому, когда другой клиент приходит с 50 $, кассир не может вернуть 25 $.

+0

так очень верно .. Это полностью изменяет игру. Я буду адаптировать мой код. –