[问题] 用for循环找众数

楼主: i329 (杀刀猪)   2022-03-21 19:11:39
各位大大安安
小弟正在自学python (https://tinyurl.com/yu9nfd6f )
循环实在弄得我头痛QQ
有个题目如下:
寻找众数
numbers_str 是一个使用者输入的以逗号分隔数字的字串。
从 numbers_str 中找到众数(最常见的数字)并显示出:
众数是{众数}
提示 1
使用 split() 方法把一个以逗号分隔数字的字串转换成一个串行。
提示 2
尝试创造一个字典,其中每个键是串行中的一个数字,而值是该数字出现在串行中的次数

例如,如果串行是[10, 20, 10, 30],我们要创造以下字典:
{ 10: 2, 20: 1, 30: 1 }
解答如下:
numbers_str = input('请输入以逗号分隔的一串数字: ') #这是题目已经默认的
numbers = numbers_str.split(',')
# occurrences 储存一个数字出现的次数
occurrences = {}
for n in numbers:
if n in occurrences:
occurrences[n.strip()] += 1
else:
occurrences[n.strip()] = 1
# mode 是目前最常出现的数字
mode = -1
# mode_count 是 mode 出现的次数
mode_count = 0
for n, count in occurrences.items():
if mode_count == 0 or mode_count < count:
mode = n
mode_count = count
print(f'众数是{mode}')
解答到上半部的for都还看得懂
下半部就不懂为什么要把mode=-1
if的 mode_count < count这个部分也还可以
mode_count == 0 就不懂了
然后我尝试跑了他的解答
发现答案好像不是完整的众数
例如我如果输入的是: 7,7,1,1,8
答案只会出现7 而没有办法显示全部的答案
不太确定是我的问题还是题目没有出好@@
再拜托各位大大帮忙解答
感谢
作者: DaOppaiLoli (大欧派萝莉)   2022-03-21 19:20:00
题目定义不够严谨,没有说要把次数一样的都印出来,mode 设成 -1 应该是假设数列都是正数
作者: f416720001 (Gemini翔)   2022-03-21 19:41:00
mode -1是因为他已经先把-1列为不可能出现的数,所以以它为初始值
作者: and629 (净莲)   2022-03-21 21:34:00
-1 & 0 都是初始化。只要 count > 0 代表新的众数出现,就把旧的 key取代掉
作者: poototo (poototo)   2022-03-21 22:55:00
造出来的字典你知道长什么样子之后你不一定要用解答的方式造-1,0 你可以换成其他初始值
作者: stucode   2022-03-21 23:06:00
mode_count == 0 的意思是“当目前没有任何众数时,无条件将目前的 n 当作众数”。在某些情况下这种条件是有必要的,但以这个题目来说有点多余,因为 count 不可能小于 1,所以第一次进入循环 mode_count < count 一定会成立。code 的部份 mode = -1 改成 mode = None然后 mode_count == 0 去掉,应该就比较好理解
作者: lycantrope (阿宽)   2022-03-22 09:21:00
初始化并不是任意数都可以...
作者: pshuang (中山先生忠实信徒-我爱萝)   2022-03-22 11:26:00
mode = -1 以下在写什么? 为什么不直接根据value排序?根据value大到小排序 最前面的就是众数啊
作者: lycantrope (阿宽)   2022-03-22 14:39:00
初始化选不含在你数值范围内的值,例,正整数用-1排序就练不到for-loop例:max(occurrences, key = lambda x:occurrences[x])
作者: poototo (poototo)   2022-03-22 23:45:00
有兴趣可以去看资料结构的排序与搜寻程式语言的内建方法都是包装过的API
作者: aalexx (aalexx.S)   2022-03-23 02:27:00
拿纸笔一步一步跟着程式手动执行,把每一步都写下来
作者: mantour (朱子)   2022-04-02 17:47:00
你可以试着用看看可以设定断点或是逐步执行的debug工具

Links booklink

Contact Us: admin [ a t ] ucptt.com