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