把计算器换成五分钱

2024-06-23 18:25:12 发布

您现在位置:Python中文网/ 问答频道 /正文

项目:创建一个包含输入nickelspenniessum的Python代码,如果可以创建具有该数量的nickelspenniessum,则返回该代码。你知道吗

我的代码是:

def corect_change(nickles, pennies, summ):
    result = False
    i = 0
    j = 0
    while i <= nickles:
        if summ == i * 5:
            result = True
        else:
            while j <= pennies:
                if summ == (i * 5) + j:
                    result = True
                j += 1
        i += 1
    return result

print corect_change(5,3,11)

现在这适用于可被5整除的和,但当它必须包含便士时就失败了。你知道吗

有人能告诉我为什么,给我一些改进的想法吗。你知道吗


Tags: 项目代码true数量ifdefresultchange
1条回答
网友
1楼 · 发布于 2024-06-23 18:25:12

代码中的一些问题:

  • 它总是假设至少有一个镍可用
  • 它总是假定summ>;5,因为i从1开始
  • 在用完五分镍币之前先用完一分硬币

这里有几个实现是基于先使用尽可能多的硬币,然后再使用硬币。你知道吗

def correct_change2(nickels, pennies, sum):
    # While you have nickels left and sum is still more than 5 cents...
    while sum > 5 and nickels:
        sum -= 5
        nickels -= 1
    # You've removed as many nickels as you had or sum is now less than 5
    # If you have enough pennies left, return True
    return pennies >= sum

def correct_change(nickels, pennies, sum):
    # Remove as many nickels as you have or as many as sum needs,
    # whichever is less
    sum -= 5 * min(nickels, sum / 5)
    # You're out of nickels or sum is less than 5
    # If you have enough pennies to equal sum, return True
    return pennies >= sum

print correct_change(5,3,11)

另外,这里是你的方法稍微重新安排工作:

def corect_change(nickles, pennies, summ):
    i = 0
    while i <= nickles:
        if summ - (i * 5) < 5:
            break
        i += 1
    j = 0
    while j <= pennies:
        if summ == (i * 5) + j:
            break
        j += 1
    return summ == (i * 5) + j

但是我们可以通过使用for循环和xrange()使Python更加地道:

def corect_change(nickles, pennies, summ):
    for i in xrange(nickles):
        if summ - (i * 5) < 5:
            break
    for j in xrange(pennies):
        if summ == (i * 5) + j:
            break
    return summ == (i * 5) + j

相关问题 更多 >

    热门问题