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