Python:根据给定的参数给出答案

Python:根据给定的参数给出答案,python,arguments,default,Python,Arguments,Default,谁能帮帮我吗 我需要定义一个函数,其中用户给出2个参数,但所有参数都已定义。 如果用户给出1个参数,程序将其平方。如果用户给出2,则将它们相乘。如果未给出任何值,程序将返回“none” 我的解决方案: def area(a=1,b=1): if not a or b: return 'none' elif not b: return a**2 else: return a*b 但不知怎么的,这是行不通的。请帮忙? 另外,对于布局很抱歉,我是这个站点的新手而

谁能帮帮我吗

我需要定义一个函数,其中用户给出2个参数,但所有参数都已定义。 如果用户给出1个参数,程序将其平方。如果用户给出2,则将它们相乘。如果未给出任何值,程序将返回“none”

我的解决方案:

def area(a=1,b=1):
  if not a or b:
    return 'none' 
  elif not b:
    return a**2
  else:
    return a*b
但不知怎么的,这是行不通的。请帮忙?
另外,对于布局很抱歉,我是这个站点的新手

而不是将args的初始值声明为
1
,如果将其声明为
None
则更好。现在,如果未给出
b
,我们可以使用嵌套的
if
语句来解决您的问题

此程序附呈供您参考

def area(a=None,b=None):

 if b is None:
    if a is None:
        return 'none'
    else:
        return a**3
 else:
    return a*b

print(area(2))
print(area(2,1))
print(area())
程序将打印

4
2
none

正如通常所需要的一样,我会使用python的awesome变量参数列表特性,并在它的
len
上进行分支。在行动中看到它:

>>> def func(*args):
...     return len(args), args
... 
>>> func(1)
(1, (1,))
>>> func(1,2,3)
(3, (1, 2, 3))
但在您的情况下,我只会使用默认的
None
参数并“滥用”一点对称性:

>>> def area(a=None,b=None):
...     if b is None: b=a # a*a == a**2
...     return None if a is None else a*b # hackish alternative: return a and a*b

如果传递了三个参数,会发生什么?在这种情况下,这里有一个抛出异常的解决方案

def area(*args):
    if not args:
        return None
    elif len(args) == 1:
        return args[0]**2
    elif len(args) == 2:
        return args[0] * args[1]
    else:
        raise RuntimeError("Invalid number of arguments.")

您正在将
a
b
设置为始终具有一个值。将它们更改为零。但是,只有在调用函数时将
a
设置为0,才能使
b
而不是
a
为零。
None
可能是比0更好的默认值。否则,区域(0)将返回“无”,而不是0,区域(0,0)也将返回“无”。我想您应该知道,对一个数字进行立方运算将是
a**3
,而不是
a**2
…?很好!谢谢你指出这一点。建议:如果不是b:,你应该写
,如果b不是None:
。当用户调用
区域(0,0)
时会发生什么情况?@jme很好,但如果b为None,则必须是
。你在尝试双重否定谢谢!这是非常有用的。我想我可以跳过双if步骤,但这似乎是最简单的方法。@L.R.不客气。通过使用布尔操作数的短路求值,可以跳过双if步骤。这是一个容易的话题。请阅读更多关于