鱼C论坛

 找回密码
 立即注册
查看: 2089|回复: 4

[已解决]求两个题目的代码的思路和详细解释

[复制链接]
发表于 2023-4-11 19:41:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 想学py的小白 于 2023-4-11 19:42 编辑

二、 假设已经执行了下列语句序列:
animals = { 'a': ['aardvark'], 'b': ['baboon'], 'c': ['coati']}    #值为列表


animals['d'] = ['donkey']
animals['d'].append('dog')
animals['d'].append('dingo')
编写函数 howMany(Dict),返回结果为字典中值的总个数(包含每个列表中的元 素个数)。如:
>>> print (howMany(animals))

又如:
>>>print(howMany({'a': [8, 11, 4, 18], 'H': [19, 19, 16], 'L': [12], 'O': [12, 2, 14, 2], 'p': [7, 15, 7, 15, 10], 's': [], 't': [], 'y': [11, 19, 12, 0]}) )
21

代码:
def howMany(Dict):
    k = Dict.keys()
    ans = 0
    for i in k:
        ans += len(Dict[i])
    return (ans)

animals = { 'a': ['aardvark'], 'b': ['baboon'], 'c': ['coati']}   animals['d'] = ['donkey']
animals['d'].append('dog')
animals['d'].append('dingo')
print(howMany(animals))
print(howMany({'a': [8, 11, 4, 18], 'H': [19, 19, 16], 'L': [12], 'O': [12, 2, 14, 2], 'p': [7, 15, 7, 15, 10], 's': [], 't': [], 'y': [11, 19, 12, 0]}) )

三、假定已经执行了以下语句序列:
animals = { 'a': ['aardvark'], 'b': ['baboon'], 'c': ['coati']}      #值都是列表


animals['d'] = ['donkey']
animals['d'].append('dog')
animals['d'].append('dingo')
编写函数: bigest(Dict) ,返回其值包含元素个数最多的键值。
例如:
>>> biggest(animals)
'd'
又如:
>>>biggest({'a': [3, 3, 18], 'c': [3, 15, 12, 10, 0], 'b': [10, 19, 14, 5, 16, 20, 11, 6], 'd': [5, 16, 8, 16, 6, 1]})
'b'

代码:
def biggest(Dict):
    max=-1
    max_key=''
    k = Dict.keys()
    for i in k:
        if(len(Dict[i])>max):
            max=len(Dict[i])
            max_key=i
    return max_key

animals = { 'a': ['aardvark'], 'b': ['baboon'], 'c': ['coati']}   #值都是列表
animals['d'] = ['donkey']
animals['d'].append('dog')
animals['d'].append('dingo')
print(biggest(animals))
test={'a': [3, 3, 18], 'c': [3, 15, 12, 10, 0], 'b': [10, 19, 14, 5, 16, 20, 11, 6], 'd': [5, 16, 8, 16, 6, 1]}
print(biggest(test))
最佳答案
2023-4-11 19:57:39
本帖最后由 isdkz 于 2023-4-11 20:21 编辑

这里有两个题目,我会分别解释每个题目的代码思路和详细解释。

题目二:
思路:遍历字典的键,通过键索引字典的值(列表),计算列表的长度并累加到结果中。

详细解释:

  • 定义一个函数 howMany,接收一个字典作为参数。
  • 获取字典的所有键。
  • 初始化一个变量 ans,用来存储所有列表元素的个数。
  • 遍历字典的键,通过键索引字典的值(列表),累加列表的长度到 ans。
  • 返回累加结果。


但是,原代码中存在一个错误,应该将 ans += len(Dict) 更改为 ans += len(Dict[i])。

修正后的代码如下:

  1. def howMany(Dict):
  2.     k = Dict.keys()
  3.     ans = 0
  4.     for i in k:
  5.         ans += len(Dict[i])
  6.     return (ans)
复制代码


题目三:
思路:遍历字典的键,通过键索引字典的值(列表),比较列表的长度,保留最长列表的键。

详细解释:

  • 定义一个函数 biggest,接收一个字典作为参数。
  • 初始化一个变量 max 为 -1,用来存储最长列表的长度。
  • 初始化一个变量 max_key 为空字符串,用来存储最长列表对应的键。
  • 获取字典的所有键。
  • 遍历字典的键,通过键索引字典的值(列表)。
  • 如果当前列表的长度大于 max,更新 max 为当前列表的长度,并将当前键赋值给 max_key。
  • 返回 max_key。


但是,原代码中存在一个错误,应该将 if(len(Dict)>max): 更改为 if(len(Dict[i])>max):,并将 max=len(Dict) 更改为 max=len(Dict[i])。

修正后的代码如下:

  1. def biggest(Dict):
  2.     max=-1
  3.     max_key=''
  4.     k = Dict.keys()
  5.     for i in k:
  6.         if(len(Dict[i])>max):
  7.             max=len(Dict[i])
  8.             max_key=i
  9.     return max_key
复制代码


测试代码如下:

  1. animals = { 'a': ['aardvark'], 'b': ['baboon'], 'c': ['coati']}   #值都是列表
  2. animals['d'] = ['donkey']
  3. animals['d'].append('dog')
  4. animals['d'].append('dingo')

  5. print(howMany(animals))
  6. print(howMany({'a': [8, 11, 4, 18], 'H': [19, 19, 16], 'L': [12], 'O': [12, 2, 14, 2], 'p': [7, 15, 7, 15, 10], 's': [], 't': [], 'y': [11, 19, 12, 0]}))

  7. print(biggest(animals))
  8. test={'a': [3, 3, 18], 'c': [3, 15, 12, 10, 0],'b': [10, 19, 14, 5, 16, 20, 11, 6], 'd': [5, 16, 8, 16, 6, 1]}
  9. print(biggest(test))
复制代码



测试结果如下:

  1. howMany(animals) 的结果为: 6
  2. howMany({'a': [8, 11, 4, 18], 'H': [19, 19, 16], 'L': [12], 'O': [12, 2, 14, 2], 'p': [7, 15, 7, 15, 10], 's': [], 't': [], 'y': [11, 19, 12, 0]}) 的结果为: 21

  3. biggest(animals) 的结果为: 'd'
  4. biggest(test) 的结果为: 'b'
复制代码


如您所见,修正后的代码已经解决了问题,并产生了正确的结果。

在这两个问题中,我们都需要遍历字典的键并访问对应的值(列表),在题目二中,我们统计列表元素的个数;

而在题目三中,我们找到最长的列表并返回其对应的键。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-4-11 19:57:39 | 显示全部楼层    本楼为最佳答案   
本帖最后由 isdkz 于 2023-4-11 20:21 编辑

这里有两个题目,我会分别解释每个题目的代码思路和详细解释。

题目二:
思路:遍历字典的键,通过键索引字典的值(列表),计算列表的长度并累加到结果中。

详细解释:

  • 定义一个函数 howMany,接收一个字典作为参数。
  • 获取字典的所有键。
  • 初始化一个变量 ans,用来存储所有列表元素的个数。
  • 遍历字典的键,通过键索引字典的值(列表),累加列表的长度到 ans。
  • 返回累加结果。


但是,原代码中存在一个错误,应该将 ans += len(Dict) 更改为 ans += len(Dict[i])。

修正后的代码如下:

  1. def howMany(Dict):
  2.     k = Dict.keys()
  3.     ans = 0
  4.     for i in k:
  5.         ans += len(Dict[i])
  6.     return (ans)
复制代码


题目三:
思路:遍历字典的键,通过键索引字典的值(列表),比较列表的长度,保留最长列表的键。

详细解释:

  • 定义一个函数 biggest,接收一个字典作为参数。
  • 初始化一个变量 max 为 -1,用来存储最长列表的长度。
  • 初始化一个变量 max_key 为空字符串,用来存储最长列表对应的键。
  • 获取字典的所有键。
  • 遍历字典的键,通过键索引字典的值(列表)。
  • 如果当前列表的长度大于 max,更新 max 为当前列表的长度,并将当前键赋值给 max_key。
  • 返回 max_key。


但是,原代码中存在一个错误,应该将 if(len(Dict)>max): 更改为 if(len(Dict[i])>max):,并将 max=len(Dict) 更改为 max=len(Dict[i])。

修正后的代码如下:

  1. def biggest(Dict):
  2.     max=-1
  3.     max_key=''
  4.     k = Dict.keys()
  5.     for i in k:
  6.         if(len(Dict[i])>max):
  7.             max=len(Dict[i])
  8.             max_key=i
  9.     return max_key
复制代码


测试代码如下:

  1. animals = { 'a': ['aardvark'], 'b': ['baboon'], 'c': ['coati']}   #值都是列表
  2. animals['d'] = ['donkey']
  3. animals['d'].append('dog')
  4. animals['d'].append('dingo')

  5. print(howMany(animals))
  6. print(howMany({'a': [8, 11, 4, 18], 'H': [19, 19, 16], 'L': [12], 'O': [12, 2, 14, 2], 'p': [7, 15, 7, 15, 10], 's': [], 't': [], 'y': [11, 19, 12, 0]}))

  7. print(biggest(animals))
  8. test={'a': [3, 3, 18], 'c': [3, 15, 12, 10, 0],'b': [10, 19, 14, 5, 16, 20, 11, 6], 'd': [5, 16, 8, 16, 6, 1]}
  9. print(biggest(test))
复制代码



测试结果如下:

  1. howMany(animals) 的结果为: 6
  2. howMany({'a': [8, 11, 4, 18], 'H': [19, 19, 16], 'L': [12], 'O': [12, 2, 14, 2], 'p': [7, 15, 7, 15, 10], 's': [], 't': [], 'y': [11, 19, 12, 0]}) 的结果为: 21

  3. biggest(animals) 的结果为: 'd'
  4. biggest(test) 的结果为: 'b'
复制代码


如您所见,修正后的代码已经解决了问题,并产生了正确的结果。

在这两个问题中,我们都需要遍历字典的键并访问对应的值(列表),在题目二中,我们统计列表元素的个数;

而在题目三中,我们找到最长的列表并返回其对应的键。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-11 20:19:54 | 显示全部楼层
isdkz 发表于 2023-4-11 19:57
这里有两个题目,我会分别解释每个题目的代码思路和详细解释。

题目二:

您所说的原代码的错误和纠正之后的好像没什么区别呀?是我看错了吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-11 20:22:16 | 显示全部楼层
想学py的小白 发表于 2023-4-11 20:19
您所说的原代码的错误和纠正之后的好像没什么区别呀?是我看错了吗

是代码直接发上来[i]不见了,你的代码应该没有错,也是[i]不见了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-11 20:24:57 | 显示全部楼层
isdkz 发表于 2023-4-11 20:22
是代码直接发上来[i]不见了,你的代码应该没有错,也是]不见了

明白啦!感谢感谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-10 00:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表