请教@清波大神。小弟的代码得不到预期的运行结果,麻烦您看一下。
num = raw_input('input number:')
def my_abs(num):
if num >= 0:
return num
else:
return -num
2016-04-19
早饭吃完了,来回答题主问题,直接贴可以运行的代码:
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 的位数太少,有限制。
第二,如果用户输入的不是数字,而是字符或者其他的什么,怎么办。 这里说一个后端开发常说的一句话,永远不要相信前端传回来的任何数据, 同样套在这里就是: 永远不要相信用户的输入。
恩,到这儿吧,两个问题 留给题主把玩
举报