Re: [問題] 新手試寫函式卻卡住了

作者: max80713   2016-07-17 14:12:33
函式的基本用途是取代重複的程式碼。
稍微把你的原始碼整理成各自獨立的block:
with open("james.txt") as jaf:
data = jaf.readline()
james = data.strip().split(",")
print(james)
with open("julie.txt") as juf:
data = juf.readline()
julie = data.strip().split(",")
print(julie)
with open("mikey.txt") as mif:
data = mif.readline()
mikey = data.strip().split(",")
print(mikey)
with open("sarah.txt") as saf:
data = saf.readline()
sarah = data.strip().split(",")
print(sarah)
我猜你的想法是把每個block不一樣的地方當作函式的參數傳入,也就是用the_list取代
檔名、middle取代jaf, juf, mif, saf、the_name取代james, julie, mikey, sarah,但
是middle和the_name真的有需要嗎?如果我今天把第一個block的程式碼中的jaf改成juf
、james改成julie改成:
with open("james.txt") as juf:
data = juf.readline()
julie = data.strip().split(",")
print(julie)
也會得到相同的結果!所以說唯一有需要傳入的參數就是檔名。因此函式可以改成只傳入
th
e_list一個參數:
def personal_time(the_list):
try:
with open("the_list") as middle:
data = middle.readline()
the_name = data.strip().split(",")
print(the_name)
except IOError as err:
print("File Error : " + str(err))
然後呼叫:
personal_time(james.txt)
結果還是出現一樣的錯誤:
NameError: name 'james' is not defined
到底錯在哪?看看我們呼叫函式時傳入的參數:james.txt,這其實是指james這個物件的
屬性txt,在深入淺出這本書後面一點的地方會提到,我們應該要傳入的是''james.txt''
這個字串,而改為呼叫personal_time(''james.txt'')時,''james.txt''會assign給the
_list變
數,因此稍微修正一下函式:
def personal_time(the_list):
try:
with open(the_list) as middle:
data = middle.readline()
the_name = data.strip().split(",")
print(the_name)
except IOError as err:
print("File Error : " + str(err))
最後呼叫:
personal_time(''james.txt'')
應該會成功了吧:)
※ 引述《bottomless (碎)》之銘言:
: 小弟是python的超級新手...
: 目前正在練O`REILLY的深入淺出python…
: 不過到第五章就卡關了…想問一下到底錯在哪…
: 書上是要處理運動員的跑步成績…
: 以下先提供書上的程式碼:
: with open("james.txt") as jaf:
: data = jaf.readline()
: james = data.strip().split(",")
: with open("julie.txt") as juf:
: data = juf.readline()
: julie = data.strip().split(",")
: with open("mikey.txt") as mif:
: data = mif.readline()
: mikey = data.strip().split(",")
: with open("sarah.txt") as saf:
: data = saf.readline()
: sarah = data.strip().split(",")
: print(james)
: print(julie)
: print(mikey)
: print(sarah)
: 那小弟的想法是用函式寫寫看…
: 以下是小弟寫函式的程式碼:
: def personal_time(the_list, middle, the_name):
: try:
: with open("the_list") as middle:
: data = middle.readline()
: the_name = data.strip().split(",")
: print(the_name)
: except IOError as err:
: print("File Error : " + str(err))
: 接著再用另一個py來輸出
: import def_time
: personal_time(james.txt, jaf, james)
: 但是它一直跳出
: Traceback (most recent call last):
: File "personal_time.py", line 11, in <module>
: personal_time(james.txt, jaf, james)
: NameError: name 'james' is not defined
: 小弟知道它是說james沒有定義…
: 但是要怎麼改才對?!
: 還是說有哪方面的資料可以參考…
: 小弟完全沒有頭緒要從什麼地方改啊…>"<
作者: mars90226 (火星人)   2016-07-17 14:26:00
等等,雙引號怎麼變成兩個單引號了XD
作者: bottomless (碎)   2016-07-17 14:48:00
MAX大…真的太謝謝您了…除了幫忙改還順便上課…看到後面章節的時候…這個部份一定會特別看仔細…再一次謝謝您的幫忙…^^
作者: ccvs (kisS x Sis)   2016-07-17 22:11:00
留一手?
作者: ripple0129 (perry tsai)   2016-07-18 01:32:00
另外提醒一下可以考慮買本clean code看看,雖然是試寫,不過建議帶入的參數能少就少,三個以上的參數都不建議,表示需要再拆解。新手早點看clean code幫助很大。
作者: bottomless (碎)   2016-07-18 06:42:00
R大指的是像 http://tinyurl.com/mxtdu3n 這個嗎?!
作者: ripple0129 (perry tsai)   2016-07-18 23:44:00
對的,我不是大大
作者: bottomless (碎)   2016-07-18 23:46:00
好的…去弄一本來看…  這個是尊稱嘛…XD

Links booklink

Contact Us: admin [ a t ] ucptt.com