小菜求教python一个练习题
刚学习python 看到一个练习题
def z6():
#13的20次方的最后三位数是多少
def zz6(x,y,z):
xx=[x]*y
return reduce(lambda x,y:x*y%z, xx)
print zz6(13,20,1000)
不太明白return reduce(lambda x,y:x*y%z, xx)这句的意思,reduce和lambda都是明白 但是组合起来就不明白了 希望能详细解释下,同时将上述代码运行的时候会出现IndentationError: unindent does not match any outer indentation level错误 不知道何故
[解决办法]
xx=[x]*y意思是xx是一个列表,里面有y个x元素;
Python 支持一种有趣的语法,它允许你快速定义单行的最小函数这些叫做 lambda 的函数。
lambda x,y:x*y%z相当于一个小函数,以x,y为参数,x*y之后对Z取余
reduce(lambda x,y:x*y%z, xx)
意思就是对xx的序列连续的使用lambda函数进行运算, 直到这个序列只剩一个值, 然后返回该值
就是(((13*13%1000)*13)%1000)*13)%1000)......意思相当于一个循环,每次对前面两项取余,然后返回一个值,乘以下一个数再取余...
例如
11*11=121,对100取余得到21,然后21*11=231,对100取余得到31....
程序运行错误应该是你的格式问题,应该是
def zz6(x,y,z):
xx=[x]*y
return reduce(lambda x,y:x*y%z, xx)
print zz6(11,3,1000)
希望可以帮助到你