我是Python3的新手。我有这样的要求:
function : predictRisk
Parameters :
1 :
positional / keyword
type dicitionary
Note : return value of function prepareData
2 :
Risk Zones
Type : lists
returns riskiness of that person based on the places s/he has visited. If a person has visited a place which is identified to be in risk zones, then the person should be quarantined for at least 14 days.
所以,我试着这样:
def predictRisk(**k):
x = k['visited']
print(x)
riskzones = ['kapan', 'chabail', 'newroad']
for i in riskzones:
for k,v in x:
if v == i:
return 'You are in danger zone'
else:
return 'You are not in danger zone'
对于第二个参数,我需要传递列表,所以我尝试, xyz列表在这里不起作用,我用这种方式删除了它
def predictRisk(**k,xyz=[]):
x = k['visited']
print(x)
riskzones = ['kapan', 'chabail', 'newroad']
for i in riskzones:
for k,v in x:
if v == i:
return 'You are in danger zone'
else:
return 'You are not in danger zone'
所以,我试着:
k=prepareData('arun','nepali',location1='chabail',location2='kathmandu')
print(k)
predictRisk(**k)
但是,我得到的错误是:
{'name': 'arun', 'national': 'nepali', 'visited': [{'location1': 'chabail'}, {'location2': 'kathmandu'}]}
[{'location1': 'chabail'}, {'location2': 'kathmandu'}]
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-119-fabcf7206f8b> in <module>
2 print(k)
3
----> 4 predictRisk(**k)
<ipython-input-117-82fada056b90> in predictRisk(**k)
4 riskzones = ['kapan', 'chabail', 'newroad']
5 for i in riskzones:
----> 6 for k,v in x:
7 if v == i:
8 return 'You are in danger zone'
ValueError: not enough values to unpack (expected 2, got 1)
为什么会出现此错误?我搜索了答案,但找不到正确的答案。调用riskzones = ['kapan', 'chabail', 'newroad']
时是否也可以将列表作为参数传递predictRisk()?
哦,天哪!这很糟糕:
1切勿将可变对象用作参数默认值。它们在函数调用之间保持状态!这会给你带来一些无法定位的bug。使用以下命令:
2将args和kwargs放在签名的最后。否则k会抓住一切。(另外,旁注,写出kwargs这个词真的有那么多努力吗?一个字母的变量是……啊
这是Python,请用蛇壳
这应该已经改善了一些事情
如您所见,
x
等于[{'location1': 'chabail'}, {'location2': 'kathmandu'}]
说
for k,v in x
将无法检索键和值尝试:
由于
x
而导致的错误不是dict类型相关问题 更多 >
编程相关推荐