如何检查 *args 函数参数中的值?

时间:2021-03-16 15:26:40

标签: python

我有这个函数,我在 *args 函数参数中接收可变数量的参数,我必须添加它们。根据这笔款项,我必须检查一些条件:

  1. 如果它们的总和小于 21,则打印它们
  2. 如果总和大于 21,则从每 11 个值的总和中减去 10,如果在所有减法之后总和仍然大于 21,则打印“不好”
  3. 如果总和是 21 并且我有一个 10 值和一个 11 值打印“赢”。
def get_hand_value(*args):
    sum=0
    for argument in args:
        sum +=argument
    if(sum < 21):
        print("The value of your hand is {}".format(sum))
    if(sum > 21 and argument == 11):
        sum -=10
        print(sum)
    if(sum>21 and argument != 11):
        print("No Good!")
    if(sum ==21 and argument == 11 and argument == 10):
        print("Win!")    
            
hand_1 = get_hand_value(4,4,4,4)
hand_2 = get_hand_value(11,10)
hand_3 = get_hand_value(11,5,6,4,11,4)
hand_4 = get_hand_value(11,5,6,10)
hand_5 = get_hand_value(10,5,7)

这是我能够想出的,但在第一手之后它只是打印“不好”

2 个答案:

答案 0 :(得分:1)

主要问题似乎是在 argument 循环之外使用 for。它将始终具有 args 中最后一个参数的值,这不是您想要的。

特别是这些条件:

if(sum > 21 and argument == 11):
    sum -=10
    print(sum)

if(sum ==21 and argument == 11 and argument == 10):
    print("Win!")  

对于您列出的输入永远不会为真。

此外,我建议不要调用变量 sum,因为它是内置函数的名称。具有讽刺意味的是,正是函数的名称会让您在这里的生活更轻松。

total = sum(args)

答案 1 :(得分:0)

当您在循环后使用 argument 时,您只是得到最后一个参数,您没有检查每个参数是否为 11。您应该检查循环内的 11

不要使用 sum 作为变量名,因为它是内置函数的名称(您可以用它来计算总和)。

在测试互斥条件时使用 elif

def get_hand_value(*args):
    total=0
    elevens = 0
    for argument in args:
        total +=argument
        if argument == 11:
            elevens += 1
    if (total < 21):
        print("The value of your hand is {}".format(total))
    elif total > 21:
        total -= elevens * 10
        if total < 21:
            print("The value of your hand is {}".format(total))
        else:
            print("No Good!")
    elif total == 21 and elevens == 1:
        print("Win!")
相关问题