iT邦幫忙

2024 iThome 鐵人賽

DAY 10
1
Python

Python入門基礎語法與應用系列 第 10

Day 10 Python入門基礎語法與應用-List應用

  • 分享至 

  • xImage
  •  

很快的來到了第10天了~><
上一篇介紹了滿多種List的用法!
今天的題目也用到了好幾個!例如新增、刪除或排序等等
程式碼也結合了前面的條件判斷、迴圈之類的都有用到!

今天我們來寫一個小小的成績系統!
程式碼比前面的題目多,但其實不算難!
接下來先跟大家說明成績系統有的功能

1.輸入成績 : 會先輸入班級人數,再個別輸入成績,都輸入完後,會自動輸出"輸入完畢"
2.新增成績 : 能輸入新的成績、會輸出"新增成功"、輸入-1可以結束此功能
3.刪除成績 : 能刪除成績,如果輸入的成績原本沒有,就輸出"沒有該成績,請重新輸入",有的話輸出"成績已刪除"、輸入-1可以結束此功能
4.修改成績 : 輸入要修改的成績,如果輸入的成績原本沒有,就輸出"沒有該成績,請重新輸入",有的話輸出"成績已修改"、輸入-1可以結束此功能
5.成績排序 : 把已存入的成績從小到大排序並輸出
6.結束 : 結束此系統,並輸出總人數和平均成績

因為程式碼跟輸出結果都滿長的,所以我把這6個功能和結果共分成六張圖!
https://ithelp.ithome.com.tw/upload/images/20240810/20168211Nvtjiqmw0u.png
首先~我們要讓使用者知道這是什麼程式,所以我先輸出一行告訴使用者這是一個成績系統
生成一個list,叫做grades,它用來存放等等我們輸入以及處理的成績
在這一題我把-1都當成是結束,最前面我先假設end=0

再來要開始跑系統裡面的東西了!
剛剛有說我把-1當成結束,所以這邊while迴圈的條件我寫end!=0,還沒有結束的時候,就一直跑迴圈!
先告訴使用者再來可以選擇一個功能來使用,並把每個對應的功能輸出出來給使用者看
下一行就是讓使用者輸入要使用哪一個功能,用choose來存放使用者輸入的數字
我用條件判斷,來決定再來要跑哪一個功能的程式碼
後面我從1~6個功能,一個一個說明!

第一個if是判斷當使用者輸入1的時候!
我先當作使用者都是第一次使用成績系統,所以都先輸入成績後才去使用後面其他的功能!
讓使用者輸入班級人數,人數有多少,下面的for迴圈就跑幾次!
迴圈中我用score來存放使用者輸入的成績
每輸入一個,我就利用append來把score加到grades這個list裡面!
當迴圈一跑完,也代表使用者輸入完成績了,就輸出"輸入完畢"

第二個是當使用者輸入2的時候,選擇了新增的功能
其實這個跟第一個滿像的,差在沒有規定輸入幾個!
裡面我用了一個while迴圈,使用者可以一直新增成績,"直到輸入-1,結束功能",所以條件我寫score!=-1
這裡也是用append,把score新增到grades裡面!
給大家看我輸入的範例~以下範例我都會照順序來測試給大家看!
https://ithelp.ithome.com.tw/upload/images/20240810/201682110WxJ5ORl2a.png
一開始先來輸入成績!人數我打3,成績輸入85,63,76,輸入完3個成績後就會直接輸出"輸入完畢",再來就是繼續選擇功能
這時候grades=[85,63,76]
第二個就選新增成績,我隨意輸入兩個成績,91和57!再來就輸入-1,顯示新增成功,結束功能了~
→grades=[85,63,76,91,57]

https://ithelp.ithome.com.tw/upload/images/20240810/20168211IqpB8P0lW9.png
接下來是第三個功能,刪除成績!
選了之後會直接輸出目前有的成績!也就是輸出grades
可以讓使用者知道他輸入或新增過什麼成績,再去選擇刪除!
一樣也是當使用者沒有輸入-1的時候就跑迴圈,但裡面有點小複雜!
我假設一個flag=False,這是boolean,代表"沒有找到輸入的成績"
接下來我先跑一個for迴圈,裡面用if判斷,一個一個跑,去找使用者輸入的成績有沒有在grades裡面,跑的次數就是len(grades)
有找到的話就用remove來刪除那筆資料,並輸出"成績已刪除"
一定要記得下面那一行!! flag=True ,代表有找到輸入的成績
要是沒有打這行的話,flag還是false,就會輸出沒有該成績了!!

第四個功能~修改成績!
也是跟第三個功能滿像的~其實我也只是複製貼上再稍微修改XD
不一樣的地方只有先讓使用者輸入要修改的舊成績!
進到for迴圈裡面如果有找到該筆成績,就讓使用者再輸入要修改的新成績!
所以下面寫remove(score)→刪除舊成績
刪除之後我利用insert(i,newscore),i就是原本舊成績的位置,在i的位置插入新成績newscore!

https://ithelp.ithome.com.tw/upload/images/20240810/20168211jn4UvOA70X.png
先從第三個功能的範例開始!
我先故意輸入一個沒有的成績測試一下~
剛剛前面處理到grades=[85,63,76,91,57]
所以我輸入50,它就會跟我說沒有該成績!
我再輸入76,就顯示成績已刪除
→grades=[85,63,91,57]
再輸入-1結束此功能

輸入4進入第四個功能!
先輸入要修改的舊成績91,再輸入要修改的新成績88
→grades=[85,63,88,57]
91刪除後在同位置插入88
最後一樣故意輸入一個沒有的成績測試看看~

https://ithelp.ithome.com.tw/upload/images/20240810/20168211PBjooJb065.png
最後超級簡單~
第五個是排序!
也是用前一篇提到的sorted來用,就會由小到大排序

第六個是結束
打上end=-1就好了~直接結束這個最外面的迴圈,代表不再用任何功能!

最後面輸出總人數和平均成績
all是總成績,先設0
利用for迴圈,去把grades裡面每個數字都加起來
avg是平均成績!也就是 總成績all/len(grades)
算好後輸出就結束囉~~
https://ithelp.ithome.com.tw/upload/images/20240810/20168211sgdNcLeQCq.png

結尾!
今天文章是這十天來第一次這麼這麼長~><
成績系統這個題目是我當初上Python的課的時候老師出過的
但是功能差很多,老師的題目也難很多
上面的功能和程式碼也是我從頭到尾自己打跟想出來的~
利用我前面提過的去想一個比較簡單的成績系統
雖然沒有很好,也覺得還是有些bug!像是如果有兩筆一樣的成績(?
但也能把前面的部分練熟搞懂了><自己寫過再打文章解釋~真的學得更清楚~
如果有比較好的寫法也歡迎大家跟我說!


上一篇
Day 9 Python入門基礎語法與應用-List列表
下一篇
Day 11 Python入門基礎語法與應用-元組Tuple
系列文
Python入門基礎語法與應用18
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言