[問題] 用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