Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在没有输入和输出信息的情况下,如何修复三个测试用例错误?_Python_Algorithm - Fatal编程技术网

Python 在没有输入和输出信息的情况下,如何修复三个测试用例错误?

Python 在没有输入和输出信息的情况下,如何修复三个测试用例错误?,python,algorithm,Python,Algorithm,我试图解决以下代码战挑战: 新的《复仇者》电影刚刚上映!有很多 电影院售票处的人们排成一大队。他们每个人 有一张100、50或25美元的钞票。一张“复仇者”的票要25美元 美元 瓦西亚目前是一名办事员。他想把票卖给我 这一行的每一个人 瓦西亚能把一张票卖给每个人吗?如果他愿意的话,能给他零钱吗 起初没有钱,严格按顺序售票 人们排队 返回YES,如果Vasya可以向每个人出售一张票并提供零钱 他手里拿着当时的账单。否则返回NO 我的代码通过了示例测试,但我提交的代码因三个测试用例而被拒绝 问题 没

我试图解决以下代码战挑战:

新的《复仇者》电影刚刚上映!有很多 电影院售票处的人们排成一大队。他们每个人 有一张100、50或25美元的钞票。一张“复仇者”的票要25美元 美元

瓦西亚目前是一名办事员。他想把票卖给我 这一行的每一个人

瓦西亚能把一张票卖给每个人吗?如果他愿意的话,能给他零钱吗 起初没有钱,严格按顺序售票 人们排队

返回YES,如果Vasya可以向每个人出售一张票并提供零钱 他手里拿着当时的账单。否则返回NO

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

问题

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

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

 Passed: 17 Failed: 3 Exit Code: 1

节目

def票据(人):
Vasya_钱包=0
如果len(people)因为这是一个“黑盒”测试系统(该系统提供了一些示例,但没有公布其实际用于验证的内容,以避免反复试验或每个测试用例的特殊情况),那么您需要根据规范编写自己的案例,以尝试修复边界条件

如果您能够定义合理的属性,那么某种类型的随机生成器(或一种成熟的属性测试工具,如假设)可能非常有用

顺便说一句,除了代码有争议外,问题是你计算错误,把账单当作可替换的数字

首先是

在这里,如果一个人有100美元,Vasya最终应该是+25(得到100,回馈75)。然而,你是说Vasya损失了50(+25-100+25),顾客可以得到一张免费票和50美元

其次,你误解了这个问题:账单就是账单,一旦你得到一张100元的账单,你就有了一张不可分割的100元账单,你不能凭空拿出100元来创建4x25,所以你必须对你拥有的账单进行核算,并从中提取资金,将钱返还给顾客(虽然你可能会忽略100美元的钞票,因为它们对零钱没什么用处)。这并不意味着你的钱柜减少了,每位顾客的is仍应该增加25。这意味着你的“Vasya_钱包”支票也不正确,Vasya的钱柜里可能有25000美元,如果50美元的钞票只有50美元和100美元,它仍然不能给零钱。

  • 你实际上是在收集这些钱,然后简单地将它们加在
    Vasya_wallet
    中,这不是问题要求你做的

  • 问题更多的是,您是否可以根据
    $50
    $25
    注释向用户提供更改

  • 因此,我们必须在不同的变量中收集它们,检查它们的可用性,并返回一个
    YES
    或一个
    NO
    来满足所有相应的要求

逻辑:

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"
  • 如果用户支付了
    $25
    ,则不必返回任何更改,因为这是票价。但是,我们将
    var_25
    计数增加1,如下代码所示

  • 如果我们收到
    $50
    ,只有当我们有零钱时,我们才会退回
    $25
    零钱。否则,如果不可能,我们会退回
    请注意,在这种情况下,必须立即向用户支付零钱,而不是让用户等待一段时间才能退回零钱。这使得这个问题更加棘手普勒

  • 如果我们收到一张
    $100
    ,我们必须以
    $50、<25
    $25、<25
    的形式将
    $75
    的零钱还给他,这取决于可用性。然而,如果我们有零钱,我们会采用贪婪的方法返回
    $50、<25
    。我们这样做是因为
    $25
    是我们的最高公因数f
    $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"
def票据(人):
var_25=0
var_50=0
对于范围内的i(len(people)):
如果人[i]==25:
var_25+=1
elif people[i]==50:
如果var_25==0:#如果我们没有要返回的更改,则返回no
返回“否”
var_25-=1#我们给用户25美元的零钱
var_50+=1现在,我们有50美元的零钱
否则:#如果用户给我们100美元
如果var_25==0或var_25*25+var_50*50<75:#如果我们不能退还75美元的零钱
返回“否”
如果var_50>0:
var_50-=1#我们给他一块50美元和一块25美元的零钱
var_25-=1
其他:
var_25-=3#或者我们给3美元25的零钱,因为我们没有50美元的零钱
返回“是”