小菜求教python一个练习题

时间:2022-05-07 12:22:06
刚学习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错误 不知道何故

5 个解决方案

#1


太乱了!
我也是看了Python才2周,给你这段代码,看看有问题吗
def lb3_pow(n , e):
    if type(n)!=int:
        print'error:first argument'
        return -1
    if type(e)!=int:
        print 'error:second argument'
        return -1
    if n<0 and type(e)==float:
        print 'negative number can not be used to calculator power'
        return -1
    result=n**e
    return result%1000

try:
    n=input('enter two number_')
    e=input()
except:
    print 'illegal input:<it is not number or did not end of <CR> >'
    exit(1)

print lb3_pow(n,e)

#2


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)

希望可以帮助到你

#3


2L的朋友的代码看懂了 但是太复杂了。。

3L的朋友解释的很清楚 谢谢了 完全明白了 十分明白

#4


不过python支持大数运算,可以直接求
>>> print str(13**20)[-3:]
801
>>> 

#5


引用 4 楼  的回复:
不过python支持大数运算,可以直接求
Python code
>>> print str(13**20)[-3:]
801
>>>


嗯 这种方法确实更简单 学到一招

#1


太乱了!
我也是看了Python才2周,给你这段代码,看看有问题吗
def lb3_pow(n , e):
    if type(n)!=int:
        print'error:first argument'
        return -1
    if type(e)!=int:
        print 'error:second argument'
        return -1
    if n<0 and type(e)==float:
        print 'negative number can not be used to calculator power'
        return -1
    result=n**e
    return result%1000

try:
    n=input('enter two number_')
    e=input()
except:
    print 'illegal input:<it is not number or did not end of <CR> >'
    exit(1)

print lb3_pow(n,e)

#2


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)

希望可以帮助到你

#3


2L的朋友的代码看懂了 但是太复杂了。。

3L的朋友解释的很清楚 谢谢了 完全明白了 十分明白

#4


不过python支持大数运算,可以直接求
>>> print str(13**20)[-3:]
801
>>> 

#5


引用 4 楼  的回复:
不过python支持大数运算,可以直接求
Python code
>>> print str(13**20)[-3:]
801
>>>


嗯 这种方法确实更简单 学到一招