伊莉討論區

標題: 學python遇到瓶頸 [打印本頁]

作者: ppye    時間: 2019-8-2 11:34 PM     標題: 學python遇到瓶頸

學了Python一小段時間了,但還是覺得自己很多程式的觀念搞不太清楚,回頭翻書看都知道,但一看到題目人就懵了
昨天看到一個題目:

請建立成績輸入系統,讓使用者輸入學生國、英、數成績後呈現如下
姓名   國文   英文   數學   平均    名次
XXX    70     90     80     80       1


應該是很簡單的題目但看到程式碼後很多地方看不懂!!!!!


account = 0
student = [[]]     <----------為什麼要先寫這兩個?

def Avg(lang,eng,math):
    sum = lang + eng + math
    avg = sum / 3
    return avg

def Order(student):
    for i in range(len(student)+1):
        if (student[i][4] < student[i+1][4]):
            student[i],student[i+1] = student[i+1],student[i]        <-----這一段define也不懂為甚麼要這樣寫
    return student

while (True):
    name = input("請輸入姓名: ")
    lang = input("請輸入國文成績: ")
    eng = input("請輸入英文成績: ")
    math = input("請輸入數學成績: ")
    avg = Avg(int(lang),int(eng),int(math))
    student[account] = [name,lang,eng,math,avg]
    yes_or_no = input("是否繼續輸入[y / n]:")
    if ( yes_or_no == "n"):
        break
    account=account+1
   
if (len(student)>1):   
    student = Order(student)

print(" 姓名   國文   英文   數學   平均    名次 ")
print("--------------------------------------")
for i in range(len(student)):
    for j in range(len(student[i])):
        print(student[i][j],end="    ")
    print(i+1)


有沒有大大曾經有相同的煩惱,看書本的說明跟範例都覺得不難,但出個新題目就完全不知道要怎麼從頭開始寫
也不知道該用哪個迴圈,我好希望能夠融會貫通,但不知道該怎麼加強。

PS:前一陣子有學一些Java,整個完全不行,從物件導向開始我就不知道我在聽甚麼了


作者: tryit244178    時間: 2019-8-3 09:34 AM

從程式碼來看,上面應該是宣告二維陣列。
下面的…請參考https://codertw.com/%E7%A8%8B%E5%BC%8F%E8%AA%9E%E8%A8%80/364032/
作者: ddttdtxb    時間: 2019-8-10 09:42 PM

分享一下我自己學習程式經驗好了… 雖然不見得完全相符,但多少能作參考。

記得自己程式也是由書本慢慢學,慢慢練起來的。
有過那種只要是書上的範例,我都能多少猜到應該要怎麼作的自信。

後來看到一些別人寫的程式,也過過如樓主一樣,覺得看不懂為什麼要這麼寫,
開始懷疑自己的能力是不是很差的那個時期。

後來才發現,有的時候是經驗問題。
同類型的問題,會有一些常見的解法,有點像是數學的公式。
因為沒有寫過這類程式的經驗,所以看不懂是很正常的。
當看過的程式變多,或是自己也解過類似的問題後,
慢慢的就能猜懂程式是在作些什麼。

不見得能總是能百分之百,但七八成還是有把握。這就涉及到另一個原因。

雖然電腦大體是由上而下,一行一行得編譯,閱讀別人的程式也是。
不過在撰寫的過程,並不見得總是如此的「線性」。
有些時候,是先把問題拆成小塊,或是大量簡化問題後,
寫出第一個能運作的版本,再漸漸修改,調整一開始的變數宣告之類,來完成整個功能。
所以說,由上自下的閱讀,看不懂變數定義很平常,
有時候答案會藏在底下程式的運算、處理上面。

因此,看變數,大體只會先記這個變數的目的,不太刻意記其型態。
看後頭的程式碼,如果有不清楚的,才回頭來看前面的定義。
這是我後來學到,爬程式碼的一點技巧。


可能是因為我在學習 Java 的時候,線上的資源不夠多,身邊沒有能夠讓我詢問的人。
所以自知道物件這東東開始,過了一年左右我才漸漸理解它概念。
再之後才能看懂那些設計方法是在說些什麼。

對於一個概念性的東西,總是得多花一些時間去理解。
先學會怎麼使用吧! 隨著使用,會漸漸對它的概念有更清楚的了解。

畢竟…  物件導向,是一群覺得既有函數導向寫法,可以藉由這個概念讓程式組合得更清淅。
不過對於這些高手們的清淅,不見得能讓新手們體會。
所以會不懂,其實還滿正常的,先把規則記下來,多練習才有機會更了解它。
作者: jackyo04    時間: 2019-8-12 09:37 AM

用你自己的方式寫一遍看看,再去分析為何別人要這麼寫,是否比較方便且簡易...
看到題目,寫不出來,這可能是你中文沒學好XD
就跟寫考卷一樣,看到題目你必須套用什麼樣的公式..總不可能題目要你算出1+1,你卻用三角函數來解決吧...
看懂題目很重要,相對地解法無非就是用for、while(迴圈)或if else、switch case(判斷),至於你想怎麼設計(你可以一個變數一個變數的宣告,或用矩陣一次宣告好),就看你日後的經驗...

最後就是工具(uart、bt...之類的),有用到再去看....
作者: wh60611    時間: 2020-3-22 03:18 PM

ddttdtxb 發表於 2019-8-10 09:42 PM
分享一下我自己學習程式經驗好了… 雖然不見得完全相符,但多少能作參考。

記得自己程式也是由書本慢慢學 ...

看到大大的留言讓我覺得有信心了
我現在是看書卡關  看不太懂XDD
不過有看視頻來學習 快不少
作者: yoop123    時間: 2020-3-23 03:08 PM

Q:student = [[]]     <----------為什麼要先寫這兩個?
A:他做了二階矩陣,目的是要讓學生個數為列,各項成績和平均名次等為行

Q:student[i],student[i+1] = student[i+1],student[i]        <-----這一段define也不懂為甚麼要這樣
A:A:看懂這個要先看前面的代碼,前面第一個矩陣中的i代表學生個數,第二個4則是第四行的欄位(就是平均),student[i][4]也就是第i個學生的平均成績,假設第i+1個學生比第i個學生平均更高,則兩者調換位置,如此前面的學生若分數低則會一直往後排,後面的學生會浮起來,好像是叫做甚麼泡沫比較法?

順帶一提,做矩陣建議使用numpy來用,比直接列表有效多了

然後這當然是自己寫比較好,不過我覺得跟他人交流過後得到的心得也很有用





歡迎光臨 伊莉討論區 (http://idolmaster.eyny.com/) Powered by Discuz!