为了账号安全,请及时绑定邮箱和手机立即绑定

请教@清波大神。小弟的代码得不到预期的运行结果,麻烦您看一下。

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
  • 参与学习       758625    人
  • 解答问题       8667    个

学python入门视频教程,让你快速入门并能编写简单的Python程序

进入课程

请教@清波大神。小弟的代码得不到预期的运行结果,麻烦您看一下。

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信