課程
/后端開發
/Python
/初識Python
num = raw_input('input number:')
def my_abs(num):
? ? if num >= 0:
? ? ? ? return num
? ? else:
? ? ? ? return -num
2016-04-19
源自:初識Python 7-3
正在回答
早飯吃完了,來回答題主問題,直接貼可以運行的代碼:
def?my_abs(a): ????if?a>=?0: ????????return?a ????else: ????????return?-a ???????? num?=?raw_input('input?number:') print?my_abs(num) ##?解釋,首先定義函數,然后取得用戶輸入,最后調用函數并打印 ##?我看題主代碼,姑且認為?題主沒有調用函數,只是取得?num?變量,?就想在函數定義的時候(def?xxx)獲得 ##?結果,?這是不可以的,?函數定義是不會被調用的,如果想調用?就需要?在定義之后?這樣調用: function_name?(args)---?函數名(參數)? ##?參數可選,如果定義是沒有參數,或者使用了關鍵字參數(關于函數參數此處不詳解了)的話,可以不傳參數 ##?如題主定義的函數,調用方法就是?my_abs(num) ##?另外我在定義函數時,可以改變了?形式參數?的命名,?就是想告訴題主,?定義是使用的參數?叫做形式參數 ##?不一定要跟調用的時候一樣,?就像它的名字,只是一個形式而已。
最后說題主定義和調用這個 絕對值函數 有些不嚴謹,并不能取得正確的結果。
?因為 通過 raw_input 我們獲得的num 其實是一個字符串. 然后傳給 my_abs(num) , 不管我們輸入的是正數 ?'11' , 還是負數'-11' 本質上都是一個非空字符串。
Python 雖然是一個強類型語言(不同類型之間做運算,程序會報錯,而不會對其中之一做隱式的轉換。) 但是 其他類型 放到 判斷語句的 條件表達式 位置的時候(if xxx: ? ?xxx 就是條件表達式, 或者 while xxx 同理)會做隱式轉換 ,就字符串來說 非空字符串都是 True 也就是說不管我們 傳入 '11'還是'-11' if都成立,同時函數會返回 字符串本身。 這時候函數 恰好表現為, 輸入正數,返回結果看起來正確(因為是字符串), 輸入負數 返回的看起來還是負數(字符串),如果想改進可以 調整下輸入語句:
num?=?float(raw_input('input?number:')) 或者分開寫,邏輯清晰些: num?=?raw_input('input?number:') num=?float(num)
至此,其實還是有些小問題:
第一, Python2.x 中 float 的位數太少,有限制。
第二,如果用戶輸入的不是數字,而是字符或者其他的什么,怎么辦。 這里說一個后端開發常說的一句話,永遠不要相信前端傳回來的任何數據, 同樣套在這里就是: 永遠不要相信用戶的輸入。
恩,到這兒吧,兩個問題 留給題主把玩
夏天的夏7 提問者
。。。 嚇得我趕緊進來瞅瞅,被直接點名了,大神不敢當, mark 明天回答
-num是什么鬼?改成0-num?
舉報
學python入門視頻教程,讓你快速入門并能編寫簡單的Python程序
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2016-04-20
早飯吃完了,來回答題主問題,直接貼可以運行的代碼:
最后說題主定義和調用這個 絕對值函數 有些不嚴謹,并不能取得正確的結果。
?因為 通過 raw_input 我們獲得的num 其實是一個字符串. 然后傳給 my_abs(num) , 不管我們輸入的是正數 ?'11' , 還是負數'-11' 本質上都是一個非空字符串。
Python 雖然是一個強類型語言(不同類型之間做運算,程序會報錯,而不會對其中之一做隱式的轉換。) 但是 其他類型 放到 判斷語句的 條件表達式 位置的時候(if xxx: ? ?xxx 就是條件表達式, 或者 while xxx 同理)會做隱式轉換 ,就字符串來說 非空字符串都是 True 也就是說不管我們 傳入 '11'還是'-11' if都成立,同時函數會返回 字符串本身。 這時候函數 恰好表現為, 輸入正數,返回結果看起來正確(因為是字符串), 輸入負數 返回的看起來還是負數(字符串),如果想改進可以 調整下輸入語句:
至此,其實還是有些小問題:
第一, Python2.x 中 float 的位數太少,有限制。
第二,如果用戶輸入的不是數字,而是字符或者其他的什么,怎么辦。 這里說一個后端開發常說的一句話,永遠不要相信前端傳回來的任何數據, 同樣套在這里就是: 永遠不要相信用戶的輸入。
恩,到這兒吧,兩個問題 留給題主把玩
2016-04-19
。。。 嚇得我趕緊進來瞅瞅,被直接點名了,大神不敢當, mark 明天回答
2016-04-19
-num是什么鬼?改成0-num?