作者kslman ()
看板Python
標題[問題] 新手問題,不知錯在哪
時間Sat May 23 11:38:48 2020
昨天開始看書學python,學到elif這邊的時候想試著寫加上while的邏輯,但這邊卡住了
=====程式碼如下=====
def getage(agenum):
while True:
if agenum<16:
print('can`t eat')
getage(int(input()))
continue
elif agenum<18:
print('close')
getage(int(input()))
continue
print('ya')
break
print(getage(int(input())))
=====以上=====
但輸入數字的時候很奇怪,如果直接輸入18,會回傳ya和None然後break
但搞不懂None是怎麼來的?
如果先輸入1,會回傳can`t eat
再輸入18,會回傳ya和can`t eat,然後不會break
之後再輸入數字都就都不會break了
想請教是哪裡有問題,寫了好久想不出來...
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.122.53.87 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Python/M.1590205131.A.1C1.html
1F:推 lemon651: 你的getage沒有return東西 所以你print(getage())這邊就 05/23 12:13
2F:→ lemon651: 會是None 05/23 12:13
3F:推 lemon651: 第二 你第一個agenum是1 進入另一個getage() 輸入18 跳 05/23 12:16
4F:→ lemon651: 出那層出來接continue 但是你的agenum還是1沒有被變過 05/23 12:16
5F:→ lemon651: 所以基本就是無限迴圈 我覺得你自己一步一步把結果寫出 05/23 12:16
6F:→ lemon651: 來或是開debug模式看一下就知道了 05/23 12:16
7F:推 cuteSquirrel: agenum 在使用者輸入後要記得再賦值一次 05/23 12:41
9F:推 outshaker: 看一下你的while的跳出方式,是看agenum的數值對吧? 05/23 12:44
10F:→ outshaker: 只要進入while迴圈,agenum內容沒有更動過的話 05/23 12:47
11F:→ outshaker: 就基本不太可能離開while了,要記得更新agenum的內容 05/23 12:48
12F:→ outshaker: 另外在函數內呼叫函數,這種遞迴寫法也不是這樣子用的 05/23 12:48
13F:→ outshaker: 然後 print 只是在螢幕上顯示數字,並不是回傳喔 05/23 12:59
感謝以上各位熱心大大,終於看懂問題了,謝謝<(_ _)>
※ 編輯: kslman (218.187.182.6 臺灣), 05/23/2020 16:44:55