@python 熄灯问题python
def inputaRow() :
#本函数用于输入一行灯的状态,返回一个01构成的字符串,一共6个字符,然后将这一个10组成的6个字符的字符串转换成列表结构
#然后在每个列表前后各增加一个0元素,都成一个8个元素的元组,以便于后期扩充成7行8列的方阵
dengrow=input(‘请输入一行6个灯的状态,0表示关灯状态,1表示开灯状态’)
while not(len(dengrow) ==6 and ((dengrow[0] '0’or dengrow[0]‘1’)and(dengrow[1] '0’or dengrow[1]‘1’)and(dengrow[2] '0’or dengrow[2]‘1’)and(dengrow[3] '0’or dengrow[3]‘1’)and(dengrow[4] '0’or dengrow[4]‘1’)and(dengrow[5] '0’or dengrow[5]‘1’))):
dengrow=input(‘输入错误,请输入一行6个灯的状态,0表示关灯状态,1表示开灯状态’)
drlist=[]
for i in range(6):
drlist.append(int(dengrow[i]))
drlist.insert(0,0)
drlist.append(0)
drtuple=tuple(drlist)
return drtuple
#我是快乐的分割线
************************************************************************
‘’’
test=inputaRow()
print(type(test))
print (test)
#这几句用于测试最后要注释掉
‘’’
#我是快乐的分割线*************************************************************************

def juZhen():
#这个函数通过调用inputaRow函数,构建5行的灯初始状态矩阵,每一行是一个列表,5行又构成一个矩阵列表
juZhenlist=[(0,0,0,0,0,0,0,0)]
for i in range(5):
juZhenlist.append(inputaRow())
juZhenlist.append((0,0,0,0,0,0,0,0))

for j in range(7):#这两句用于测试,正式版中删除

print(juZhenlist[j])#这两句用于测试,正式版中删除

return juZhenlist

#我是快乐的分割线*************************************************************************
#juZhen()#这一句用于测试,最后要注释掉
#我是快乐的分割线*************************************************************************

#我是快乐的分割线*************************************************************************
#以下是测试语句,需要注释掉
‘’’
xnjuZhenmain=xnjuZhen(juZhen())
for i in range(7):
print(xnjuZhenmain[i])
‘’’
#我是快乐的分割线*************************************************************************
def sccaozuo(num):
#这个函数用于对输入的数据生成6个0,1元素构成的操作码,然后前后各加一个0,扩充成8位元素的操作码
caozuoma1=[]
for i in range(6):
caozuoma1.append(num%2)
num=num//2
caozuoma1.insert(0,0)
caozuoma1.append(0)
return caozuoma1
#我是快乐的分割线*************************************************************************
#这几句是测试形成第二行(序号1)的操作码的语句要注释掉
‘’’
for i in range(64):
print(sccaozuo(i))
‘’’
#我是快乐的分割线*************************************************************************
def an1anniu(i,j,xnjuZhenself):
#这个函数是改变一个灯的状态,灯亮的就灭掉,灯灭的就亮起来,可以写成三目语句,回头重写时再优化
if xnjuZhenself[i][j]==1:
xnjuZhenself[i][j]=0
else:
xnjuZhenself[i][j]=1
return xnjuZhenself
#我是快乐的分割线*************************************************************************
def ananniu(rownum,arowcaozuo,xnjuZhenlistself):
#这个函数输入一个一行6个10,如果是1表示按按钮,0则什么也不做,第一个参数代表行号,从第2行(序号1)开始
rowself=rownum
for j in range(1,7):
if arowcaozuo[j]==1:
#print(‘现在对第’,rowself,‘行,第’,j,‘个按钮操作’)#这一句用于测试需要注释掉
xnjuZhenlistself=an1anniu(rowself-1 , j , xnjuZhenlistself)
xnjuZhenlistself=an1anniu(rowself , j-1 , xnjuZhenlistself)
xnjuZhenlistself=an1anniu(rowself , j, xnjuZhenlistself)
xnjuZhenlistself=an1anniu(rowself , j+1 , xnjuZhenlistself)
xnjuZhenlistself=an1anniu(rowself+1 , j , xnjuZhenlistself)
else:
pass
return xnjuZhenlistself
#我是快乐的分割线*************************************************************************
#首先生成一个虚拟的矩阵,这一句是测试用的可以删掉,这个矩阵的主体全是1
#ceshijuzhen=[[0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 1, 1, 0], [0, 1, 1, 1, 1, 1, 1, 0], [0, 1, 1, 1, 1, 1, 1, 0], [0, 1, 1, 1, 1, 1, 1, 0], [0, 1, 1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0]]
‘’’
#测试按一个按钮,不妨是1,1位置
ceshijuzhen=an1anniu(1,1,ceshijuzhen)
print(ceshijuzhen)
ceshijuzhen=an1anniu(1,2,ceshijuzhen)
print(ceshijuzhen)
ceshijuzhen=an1anniu(0,2,ceshijuzhen)
print(ceshijuzhen)
‘’’
‘’’
#测试按一行按钮
ceshicaozuoma=[0,1,0,0,0,0,0,0]
ceshijuzhen=ananniu(1,ceshicaozuoma,ceshijuzhen)
print(ceshijuzhen)
ceshijuzhen=ananniu(2, ceshijuzhen[1] ,ceshijuzhen)
print(ceshijuzhen)
‘’’
#我是快乐的分割线*************************************************************************

#以下是程序主体
#以下是程序主体
#以下是程序主体

#第一句生成78全是0和1的矩阵,四周一圈是无效的
#生成一个7
8矩阵,矩阵的形式是列表,每个元素是元组,代表每一行
chushijuzhen=juZhen()
for i in range(7):
print(chushijuzhen[i])
#构造一个操作矩阵caozuojuzhen,矩阵的形式是列表,每个元素也是列表代表每一行
caozuojuzhen=[]
#下面一段没有必要仅用于测试
‘’’
for i in range(7):
caozuojuzhen.append(list(chushijuzhen[i]))
print(caozuojuzhen[i])
‘’’
#构造一个列表caozuoma,用于放置每一行要执行的按钮操作,0表示该位置什么也不做,1表示要对相邻5个位置翻转灯的状态
caozuoma=[]
#构造一个列表放置执行成功的操作码chenggongma
chenggongma=[]
for caozuo in range(64):
#调用生成操作码函数,生成一个序号1行的操作码
caozuoma=sccaozuo(caozuo)
print(caozuo,‘当前操作码是’, caozuoma)
#初始化操作矩阵
caozuojuzhen.clear()
for i in range(7):
caozuojuzhen.append(list(chushijuzhen[i]))
# print(caozuo,’’ ,caozuojuzhen[i])#测试语句
#执行第一行的操作
ananniu(1,caozuoma,caozuojuzhen)
#for i in range(7):#测试语句
# print(caozuo,’
’,caozuojuzhen[i])#测试语句
for i in range(2,6):
#用上一行的操作结果作为下一行的操作码
ananniu(i,caozuojuzhen[i-1],caozuojuzhen)
jieguo=0
for i in range(1,6):
a0,a1,a2,a3,a4,a5,a6,a7=caozuojuzhen[i]
jieguo=jieguo+a1+a2+a3+a4+a5+a6
#print(i,’*’,caozuojuzhen[i])
if (jieguo)==0:
chenggongma.append(caozuoma)
print(caozuoma,‘是成功的’)

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐