矩阵中的矩阵问题

时间:2016-11-25 03:02:48

标签: python tkinter

为什么会出现几个矩阵,而不仅仅是一个?此外,即使增加1,1,1,1,我也无法扩大。

我的代码:

import os
import time
import random

from Tkinter import *
import os

def leftKey(event):
        e_b(-1)

def rightKey(event):
        e_b(1)

def escKey(event):
        root.quit()

def refresh():
        time.sleep(0.03)
        clear = lambda: os.system('clear')
        for i in range(0,len(m)):
                for j in range(0,len(m)):
                        if m[i][j] == 1:
                                print '#',
                        elif m[i][j] == 2:
                                print '=',
                        elif m[i][j] == 3:
                                print '*',
                        else:
                                print ' ',
                print ''

        root.after(30, refresh) 

def e_b(x):
        for i in range(0,len(b)):
                f = b[i][0]
                c = b[i][1]
                m[f][c] = 0

        if x == -1:
                if b[0][1] > 0:
                        for i in range(0,len(b)):
                                b[i][1] += x
        elif x == 1:
                if b[len(b)-1][1] < len(m)-1:
                        for i in range(0,len(b)):
                                b[i][1] += x

        for i in range(0,len(b)):
                f = b[i][0]
                c = b[i][1]
                m[f][c] = 2


m = [   [1,1,1,1,1,1,1,1,1,1],
        [0,1,1,1,1,1,1,1,0],
        [0,0,0,0,0,0,0,0,],
        [0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0]]

b = [[len(m)-1,0],[len(m)-1,1],[len(m)-1,2]]
e_b(0)

root = Tk()
frame = Frame(root, width=100, height=100)
root.bind('<Left>', leftKey)
root.bind('<Right>', rightKey)
root.bind('<Escape>', escKey)
frame.pack()

root.after(30, refresh)
#root.after(30, mov_ball)
root.mainloop()

enter image description here

我希望它看起来像这样或更大

enter image description here

我正在进行球运动。

1 个答案:

答案 0 :(得分:0)

矩阵的尺寸为10x6,但您打印的是6x6

在Python中,如果不更改矩阵中的值,则不必使用range(len())

for row in m:
    for val in row:
        if val == 1:
            print '#',
        elif val == 2:
            print '=',
        elif val == 3:
            print '*',
        else:
            print ' ',
    print    # you don't need empty string

如果您需要更多elif,则更容易使用list(或dict)

blocks = [" ", "#", "=", "*"]
blocks_length = len(blocks)

for row in m:
    for val in row:
        if val < blocks_length:
            print blocks[val],
        else:
            print '?',
    print

或者如果你确定你不使用val更大或equl然后使用blocks_length

blocks = [" ", "#", "=", "*"]
blocks_length = len(blocks)

for row in m:
    for val in row:
        print blocks[val],
    print

但问题是,如果我们可以使用01

,可以在矩阵中使用" ""#"
m = [
  ["#", "#", "#", "#", "#", "#", "#", "#", "#", "#"],
  [" ", "#", "#", "#", "#", "#", "#", "#", " ", " "],
  [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
  [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
  [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
  [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "]
]

<强>顺便说一句:

您创建了函数clear

clear = lambda:os.system('clear')

但你没有执行它

clear()

因此它不会清除屏幕

相关问题