函数main()接收一个参数obj,
如果obj不是字典 就返回字符串'参数必须是字典。',
如果obj是字典 但是所有元素“值”的类型不一样 就返回字符串'字典的值必须是同一种类型。',
如果obj是字典 并且所有元素“值”的类型一样 就返回“值”最大的元素的“键”。
例如,main({'a':3,b:5,'c':9})返回'c'。
这个确实不会,代码按照题意乱写的。
题目要求检查“值”的类型……感觉会用到字典的性质。
def main(obj):
if obj not dict:
return('参数必须是字典。')
elif obj in dict:
return('字典的值必须是同一种类型。')
else:
return key(max(value))
肯定是不对的,就没有运行。
其实可以稍微简单一点的:
def main(obj):
if type(obj) != dict:
return '参数必须是字典。'
else:
values = list(obj.values())
value_data_types = [type(val) for val in values]
if len(set(value_data_types)) != 1:
return '字典的值必须是同一种类型。'
else:
max_one = [key for key, val in zip(list(obj.keys()),list(obj.values())) if val == max(values)][0]
return max_one
大致思路:
(1)使用type()方法检验obj是否为字典;
(2)使用dict.values()方法提取字典所有的值并创建列表,命名为values;
(3)使用type()方法获取列表values中的值(都继承自字典)的数据类型;
(4)结合列表解析式将获取到的数据类型写入一个新列表,命名为value_data_types;
(5)对value_data_types使用set()方法创建集合,意图在于消除记录中重复的数据类型,以便知晓一共有几种数据;
(6)对列表values使用max()方法,以获取字典中最大的值;
(7)结合列表解析式提取最大值对应的键。
(全部返回值、输出以及部分条件判断已经回避,此思路前提是【obj是字典,并且值的类型都一样】)
另外,此题目好像回避了obj为空字典的情形,或是并未要求函数做出正确判断?
对题目的优化方案:
判定obj是字典后,应当判断obj是否为空(即obj是否为空字典{})。
优化方案如下所示。
def main(obj):
if type(obj) != dict:
return '参数必须是字典。'
else:
if obj == {}:
return '字典不能为空。'
else:
values = list(obj.values())
value_data_types = [type(val) for val in values]
if len(set(value_data_types)) != 1:
return '字典的值必须是同一种类型。'
else:
return '字典中,值最大的键值对的键为%s。' % max(obj, key=lambda x: obj[x])
注:
(1)此优化方案的函数返回值与题意部分不符,若答题请勿使用。
(2)此优化方案仅作知识上的补充和参考。
回答:这条还是比较考验语法点的,需要查资料,代码如下:
def judge(obj):
if not isinstance(obj, dict):
return '参数必须是字典。'
typeOfFirst = ''
for key in obj:
typeOfFirst = type(key)
break
for key in obj:
if type(key) != typeOfFirst:
return '字典的值必须是同一种类型。'
return max(obj, key=lambda x: obj[x])
print(judge({'a': 3, 'b': 2, 'c': 50, 10: 8}))
print(judge('a'))
print(judge({'a': 3, 'b': 2, 'c': 50, 'd': 8}))