亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

請教@清波大神。小弟的代碼得不到預期的運行結果,麻煩您看一下。

num = raw_input('input number:')

def my_abs(num):

? ? if num >= 0:

? ? ? ? return num

? ? else:

? ? ? ? return -num


正在回答

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 的位數太少,有限制。

第二,如果用戶輸入的不是數字,而是字符或者其他的什么,怎么辦。 這里說一個后端開發常說的一句話,永遠不要相信前端傳回來的任何數據, 同樣套在這里就是: 永遠不要相信用戶的輸入。


恩,到這兒吧,兩個問題 留給題主把玩

1 回復 有任何疑惑可以回復我~
#1

夏天的夏7 提問者

謝謝啦~ o(∩_∩)o 哈哈
2016-04-20 回復 有任何疑惑可以回復我~

。。。 嚇得我趕緊進來瞅瞅,被直接點名了,大神不敢當, mark 明天回答

0 回復 有任何疑惑可以回復我~

-num是什么鬼?改成0-num?

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
初識Python
  • 參與學習       758382    人
  • 解答問題       8967    個

學python入門視頻教程,讓你快速入門并能編寫簡單的Python程序

進入課程

請教@清波大神。小弟的代碼得不到預期的運行結果,麻煩您看一下。

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號