[問題] 新手問題,不知錯在哪

看板Python作者時間3年前 (2020/05/23 11:38), 3年前編輯推噓5(508)
留言13則, 3人參與, 3年前最新討論串1/1
昨天開始看書學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://www.ptt.cc/bbs/Python/M.1590205131.A.1C1.html

05/23 12:13, 3年前 , 1F
你的getage沒有return東西 所以你print(getage())這邊就
05/23 12:13, 1F

05/23 12:13, 3年前 , 2F
會是None
05/23 12:13, 2F

05/23 12:16, 3年前 , 3F
第二 你第一個agenum是1 進入另一個getage() 輸入18 跳
05/23 12:16, 3F

05/23 12:16, 3年前 , 4F
出那層出來接continue 但是你的agenum還是1沒有被變過
05/23 12:16, 4F

05/23 12:16, 3年前 , 5F
所以基本就是無限迴圈 我覺得你自己一步一步把結果寫出
05/23 12:16, 5F

05/23 12:16, 3年前 , 6F
來或是開debug模式看一下就知道了
05/23 12:16, 6F

05/23 12:41, 3年前 , 7F
agenum 在使用者輸入後要記得再賦值一次
05/23 12:41, 7F

05/23 12:43, 3年前 , 8F

05/23 12:44, 3年前 , 9F
看一下你的while的跳出方式,是看agenum的數值對吧?
05/23 12:44, 9F

05/23 12:47, 3年前 , 10F
只要進入while迴圈,agenum內容沒有更動過的話
05/23 12:47, 10F

05/23 12:48, 3年前 , 11F
就基本不太可能離開while了,要記得更新agenum的內容
05/23 12:48, 11F

05/23 12:48, 3年前 , 12F
另外在函數內呼叫函數,這種遞迴寫法也不是這樣子用的
05/23 12:48, 12F

05/23 12:59, 3年前 , 13F
然後 print 只是在螢幕上顯示數字,並不是回傳喔
05/23 12:59, 13F
感謝以上各位熱心大大,終於看懂問題了,謝謝<(_ _)> ※ 編輯: kslman (218.187.182.6 臺灣), 05/23/2020 16:44:55
文章代碼(AID): #1Uo9hB71 (Python)