一、九宫格
1、第一种方式
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2018/1/28 17:25
# @Author : zhouyuyao
# @File : nine.py
# PyCharm 2017.3.2 (Community Edition)
# Build #PC-173.4127.16, built on December 19, 2017
# JRE: 1.8.0_152-release-1024-b8 amd64
# JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
# Windows 10 10.0
# Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36)
# [MSC v.1900 64 bit (AMD64)] on win32
'''
九宫格
___________
|_A_|_B_|_C_|
|_D_|_E_|_F_|
|_G_|_H_|_I _|
如果A取1到9,B则只能在1到9中取出A的值,C的值则从1到9中取出A和B,
每个数的取值都从1到9中取值,然后加入条件,这九个数之间存在的联系,
其一:9个数都不能相等,
其二:行和列每三个的数相加等于15
该算法比较慢,大概需要计算10的10次幂
'''
number = list()
for i in range(1,10):
number.append(i)
for A in number:
for B in number:
for C in number:
for D in number:
for E in number:
for F in number:
for G in number:
for H in number:
for I in number:
s = set()
s.add(A)
s.add(B)
s.add(C)
s.add(D)
s.add(E)
s.add(F)
s.add(G)
s.add(H)
s.add(I)
if (A+B+C) == (D+E+F) == (G+H+I) == (A+D+G) == (B+E+H) == (C+F+I) == (A+E+I) == (C+E+G) ==15 and len(s)==9:
print("""
______________
|_{0}_|_{1}_|_{2}_|
|_{3}_|_{4}_|_{5}_|
|_{6}_|_{7}_|_{8}_|""".format(A,B,C,D,E,F,G,H,I))
这样的算法运行结果需要很长时间:
___________
|_2_|_7_|_6_|
|_9_|_5_|_1_|
|_4_|_3_|_8_|
___________
|_2_|_9_|_4_|
|_7_|_5_|_3_|
|_6_|_1_|_8_|
___________
|_4_|_3_|_8_|
|_9_|_5_|_1_|
|_2_|_7_|_6_|
___________
|_4_|_9_|_2_|
|_3_|_5_|_7_|
|_8_|_1_|_6_|
___________
|_6_|_1_|_8_|
|_7_|_5_|_3_|
|_2_|_9_|_4_|
___________
|_6_|_7_|_2_|
|_1_|_5_|_9_|
|_8_|_3_|_4_|
___________
|_8_|_1_|_6_|
|_3_|_5_|_7_|
|_4_|_9_|_2_|
___________
|_8_|_3_|_4_|
|_1_|_5_|_9_|
|_6_|_7_|_2_|
2、第二种方式
class NinePaper(object):
def __init__(self):
print('''
______________
|____|____|____|
|____|____|____|
|____|____|____|
A,B,C,E,F,G,H,I,J必须是1-9,所有行和列的三个数相加都等于15
''')
self.numbers=list()
for i in range(1,10):
self.numbers.append(i)
print("number = {0}".format(self.numbers))
def run(self):
for A in range(1,10):
l1=list()
l1+=self.numbers
l1.remove(A)
for B in l1:
l2=list()
l2+=l1
l2.remove(B)
for C in l2:
l3=list()
l3+=l2
l3.remove(C)
for D in l3:
l4=list()
l4+=l3
l4.remove(D)
for E in l4:
l5=list()
l5+=l4
l5.remove(E)
for F in l5:
l6=list()
l6+=l5
l6.remove(F)
for G in l6:
l7=list()
l7+=l6
l7.remove(G)
for H in l7:
l8=list()
l8+=l7
l8.remove(H)
for I in l8:
if A+B+C==E+F+D==H+I+G==A+E+I==B+E+H==C+G+E==A+E+I==C+F+I==15:
print('''
___________
|_{0}_|_{1}_|_{2}_|
|_{3}_|_{4}_|_{5}_|
|_{6}_|_{7}_|_{8}_|
'''.format(A,B,C,D,E,F,G,H,I))
# ABC
# DEF
# GHI
def main():
ninePaper=NinePaper()
ninePaper.run()
if __name__ == '__main__':
main()
二、函数入门
在我们需要解决一个问题时,我们可以把一个个问题分解成一个个模块,一个模块就是一个函数。
函数应是先申明,再调用,
def a(args):
pass
函数代码块以def关键字开头,+函数名+参数
接着第一行内容应该缩进,然后是编写的代码逻辑
return关键字:代表函数执行完返回的值
pass关键字:代表什么都不干
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2018/1/28 21:56
# @Author : zhouyuyao
# @File : demon1.py
# PyCharm 2017.3.2 (Community Edition)
# Build #PC-173.4127.16, built on December 19, 2017
# JRE: 1.8.0_152-release-1024-b8 amd64
# JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
# Windows 10 10.0
# Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36)
# [MSC v.1900 64 bit (AMD64)] on win32
def add(args):
total = 0
for i in args:
total += i
return total
def main():
number = list()
s = input("Please input digit like(a+b+c+d): ")
for num in s.split("+"): # 以+号为分隔符切割s字符串
number.append(int(num.strip())) # num.strip() 去除前后的空格
print(add(number)) # 最后得到的字符串 number 调用add函数
if __name__ == "__main__": # 直接调用主函数
main()