请教@清波大神。小弟的代码得不到预期的运行结果,麻烦您看一下。
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 的位数太少,有限制。
第二,如果用户输入的不是数字,而是字符或者其他的什么,怎么办。 这里说一个后端开发常说的一句话,永远不要相信前端传回来的任何数据, 同样套在这里就是: 永远不要相信用户的输入。
恩,到这儿吧,两个问题 留给题主把玩
举报