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