求帮忙简单解释一下这个python程序,急,在线等,谢谢了!

def o(s):
l=len(s)
return len(set([a+b+c
for a in s for b in s for c in s])
)==l*(l+1)*(l+2)//6
M=int(input())
N=3**M
i=1
s=M*[i]
while i:
if s[i]-N:
s[i]=s[i]+1
if o(s[:i+1]):
if i<M-1:
i=i+1
s[i]=s[i-1]
else:
N=s[-1]
else:
i=i-1
print(N)

def o(s):#定义函数o()参数为s
    l=len(s)#把s(也就是从程序入口传进来的参数)的长度值赋给l
    return len(set([a+b+c
                    for a in s for b in s for c in s])
               )==l*(l+1)*(l+2)//6 
               #return就是返回的意思,此处是返回布尔值(true/false)
               #运算符符号==为比较两者是否相等,如果相等返回真,如果不不相等返回假
               

M=int(input())#将用户输入的值转化为整型并赋给M
N=3**M #将3的M次幂赋值给N
i=1 # 赋值语句
s=M*[i] #生成列表 列表长度为M 列表内容为M个i(也就是1)。
while i: #当i不为0时 程序始终在循环块内执行
    if s[i]-N: #判断语句 如果列表中第i+1位的值与N相等则执行下列语句否则跳到最后一个else语句
        s[i]=s[i]+1 #将列表s的第i+1位的值增1
        if o(s[:i+1]): #调用自定义函数o(s) 将列表前两位的值传如自定义函数中 能得到该函数返回的bool值 如果为真则往下执行 否则跳出该if-else块
            if i<M-1:#如果M大于2则:
                i=i+1#i增1
                s[i]=s[i-1]#赋值
            else:
                N=s[-1]#N等于s列表最后一个的值
    else:
        i=i-1#赋值i减1,当i为0的时候跳出循环语句
print(N)#打印N的值

温馨提示:答案为网友推荐,仅供参考
相似回答