首页 > 解决方案 > 如何在没有输入和输出信息的情况下修复三个测试用例错误?

问题描述

我正在尝试解决以下 Codewars 挑战 Vasya - Clerk

新的“复仇者联盟”电影刚刚上映!电影院售票处有很多人排着长队。他们每个人都有一张 100、50 或 25 美元的钞票。“复仇者联盟”的票价为 25 美元。

Vasya 目前是一名文员。他想把一张票卖给这条线上的每个人。

如果 Vasya 最初没有钱并且严格按照人们排队的顺序出售门票,是否可以向每个人出售一张票并找零?

返回 YES,如果 Vasya 可以向每个人出售一张票并用他当时手头的账单找零。否则返回 NO。

我的代码通过了示例测试,但我提交的三个测试用例被拒绝了。

问题

没有关于我的程序失败的测试用例的信息。

如何修复我当前的代码以通过测试?

 Passed: 17 Failed: 3 Exit Code: 1

在此处输入图像描述

程序

def tickets(people):
    Vasya_wallet = 0
    if len(people) <0:
        return "NO"

    for i in range(len(people)):
        if people[i] != 25 and Vasya_wallet <= (people[i]-25):
            return "NO"

        elif Vasya_wallet >= (people[i] - 25):
             Vasya_wallet = Vasya_wallet + 25 - (people[i] - 25)

    return "YES"

标签: pythonalgorithm

解决方案


  • 你实际上是在收钱,只是把它们加起来,Vasya_wallet这不是问题要求你做的。

  • 问题更多是关于您是否可以在注释$50$25注释方面为用户提供更改。

  • 因此,我们必须将它们收集在不同的变量中,检查它们的可用性并返回 aYES或 aNO以相应地满足所有要求。

逻辑:

  • 如果用户付款$25,则无需退还任何零钱,因为这是票价。但是,我们将var_25计数增加 1,如下面的代码所示。

  • 如果我们收到一个,我们只有在我们有一个时才会$50返回零钱。$25否则,NO如果不可能,我们返回 a。请注意,在这种情况下,必须立即向用户支付零钱,而不是让他等待一段时间才能将零钱还给他。这使得这个问题更简单。

  • 如果我们收到一个,我们必须以任何一个或取决于可用性的形式 $100给他找零。但是,如果我们有一个,我们会采用一种贪婪的方法来返回。我们这样做是因为它是意义的最高公因数,我们可以用s 来制作它们中的任何一个,但不可能用这些来进行其他更改。$75$50,$25$25,$25,$25$50,$25$25$25,$50,$75$25

片段:

def tickets(people):
    var_25 = 0
    var_50 = 0
    for i in range(len(people)):
        if people[i] == 25:
            var_25 += 1
        elif people[i] == 50:
            if var_25 == 0: # if we have no change to give back, we return NO
                return "NO"
            var_25 -= 1 #we give the user $25 change back
            var_50 += 1 # now, we have a $50 change with us
        else: # if the user gives $100 to us
            if var_25 == 0 or var_25 * 25 + var_50 * 50 < 75: # if we can't give $75 change back
                return "NO"
            if var_50 > 0:
                var_50 -= 1 # we give him one $50 and one $25 change back
                var_25 -= 1
            else:
                var_25 -= 3 # or we give 3 $25 change as we don't have $50 change

    return "YES"

推荐阅读