鱼C论坛

 找回密码
 立即注册
查看: 2138|回复: 11

[已解决]017课程的问题

[复制链接]
发表于 2017-3-26 22:51:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 自然水 于 2017-3-26 23:01 编辑

4. 请问这个函数有多少个参数?
def MyFun((x, y), (a, b)):

如果你回答两个,那么恭喜你错啦,答案是0,因为类似于这样的写法是错误的!
我们分析下,函数的参数需要的是变量,而这里你试图用“元祖”的形式来传递是不可行的。
     
我想你如果这么写,你应该是要表达这么个意思:
  1. >>> def MyFun(x, y):
  2.         return x[0] * x[1] - y[0] * y[1]
  3. >>> MyFun((3, 4), (1, 2))
  4. 10
复制代码



答案没看明白:

       我之前填写的2个,看完答案倒是可以理解为什么事0个。 (参数必须是个变量 或者位置符号? 这么理解)

       但是后面那个函数我没明白;这么写的话,应该要先定义 X 和Y是个元组吧? 而且是空元组才行吧?

动动手:
0. 编写一个函数power()模拟内建函数pow(),即power(x, y)为计算并返回x的y次幂的值。
直接使用:

  1. def power(x,y):
  2.     return(x**y)
复制代码

就能实现,为什么用下面的方法:

  1. def power(x, y):
  2.     result = 1
  3.    
  4.     for i in range(y):
  5.         result *= x

  6.     return result

  7. print(power(2, 3))
复制代码


这样需要循环多次。。。有必要么
最佳答案
2017-3-29 11:47:48
自然水 发表于 2017-3-28 21:17
恐怕理解错了:
我是不理解,

就是说实际上有些人想要计算元组元素的函数时可能会定义成def MyFun((x, y), (a, b)):这样子
但是这种是不被允许的,所以小甲鱼(老污龟)会给出正确的定义方式还有传入参数时的方法,他应该是想表达实际用函数引用元组元素的实际方法
函数在定义时参数不能为元组,因为元组的值是无法改变的,传入参数是可以为元组
钻研精神不错,赞一个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-27 09:05:28 | 显示全部楼层
第一个问题,在后面那个参数中,并不需要先定义x,y,只要穿入的参数能够满足下面的运算年要求就行了,简单的来说,只要是能够切片出0和1的,可以进行运算的参数都可以。你如果传入两个3个元素的列表,一样也能运行。
第二个,我觉得两行就可以了。
当然,**在一定意义上是使用了int.__pow__这个自带的魔法方法。
而int.__pow__的内容就是:
  1. __pow__(self, value, mod=None, /)
  2.     Return pow(self, value, mod).
复制代码

等于是用pow函数去完成这个新的power,算是取巧而已。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-27 09:12:21 | 显示全部楼层
第一个问题:Python语言跟C语言不一样,不需要参数定义类型,一个变量可以赋值成各种类型,变量类型就变成类赋值的类型,类似于C语言的void的指针,可以指向任何类型,我的理解是调用函数的时候将形参初始化成元组类型并赋值,代码是有缺陷的,一旦调用的是用int类型就会抛出异常

第二个问题:是让你实现幂运算的过程,而不是直接让你采用别人实现过的,python的 **运算符其实也是别人写好实现了幂运算的过程,而题目要求应该是让你只用+-*/这些基本的运算符实现这个运算
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-27 19:51:07 | 显示全部楼层
第二个刚开始我也是那样写的还沾沾自喜  再看看题目要求是让咱们自己用底层方法实现那个自带的函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-27 20:26:54 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-3-27 23:28:02 | 显示全部楼层
ooxx7788 发表于 2017-3-27 09:05
第一个问题,在后面那个参数中,并不需要先定义x,y,只要穿入的参数能够满足下面的运算年要求就行了,简单 ...

谢谢,第一个问题依然没明白。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-27 23:28:35 | 显示全部楼层
lumber2388779 发表于 2017-3-27 09:12
第一个问题:Python语言跟C语言不一样,不需要参数定义类型,一个变量可以赋值成各种类型,变量类型就变成类 ...

谢谢,但是第一个问题依然没明白。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-27 23:33:15 | 显示全部楼层
自然水 发表于 2017-3-27 23:28
谢谢,第一个问题依然没明白。。。

因为python本身就不需要定义变量。只要你能传进去的参数能够满足后面的需要就行了。
这这里后面需要的就是一个可以切片,并且在0,1两个位置上面有元素,就可以了。至于是元组,还是列表,甚至于其他都不重要。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-28 00:09:03 | 显示全部楼层
自然水 发表于 2017-3-27 23:28
谢谢,但是第一个问题依然没明白。。。

相当于你在调用函数的时候是这样的
  1. MyFun(x=(3, 4), y=(1, 2))
复制代码

python语法中不需要告知x,y是什么类型,直接是list或者tuple或者int都可以
但是这个函数中实现部分只能用于list和tuple类型,其他类型会抛出异常的
这样能理解不
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-28 21:17:56 | 显示全部楼层
本帖最后由 自然水 于 2017-3-28 21:19 编辑
lumber2388779 发表于 2017-3-28 00:09
相当于你在调用函数的时候是这样的

python语法中不需要告知x,y是什么类型,直接是list或者tuple或者in ...


恐怕理解错了:
我是不理解,
  1. def MyFun((x, y), (a, b)):
复制代码


  1. >>> def MyFun(x, y):
  2.         return x[0] * x[1] - y[0] * y[1]
复制代码


有什么关系,为什么老污龟会说 恐怕你们是想实现这个功能。。。

单纯看后者我明白的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-28 21:20:04 | 显示全部楼层
ooxx7788 发表于 2017-3-27 23:33
因为python本身就不需要定义变量。只要你能传进去的参数能够满足后面的需要就行了。
这这里后面需要的就 ...

同10楼- -
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-29 11:47:48 | 显示全部楼层    本楼为最佳答案   
自然水 发表于 2017-3-28 21:17
恐怕理解错了:
我是不理解,

就是说实际上有些人想要计算元组元素的函数时可能会定义成def MyFun((x, y), (a, b)):这样子
但是这种是不被允许的,所以小甲鱼(老污龟)会给出正确的定义方式还有传入参数时的方法,他应该是想表达实际用函数引用元组元素的实际方法
函数在定义时参数不能为元组,因为元组的值是无法改变的,传入参数是可以为元组
钻研精神不错,赞一个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-16 03:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表