我目前正在开发一个开源项目,目标是制作一个可以在终端上运行的俄罗斯方块游戏。我目前仍坚持第三次测试。我编写的代码通过了第一次测试。和第二次测试。并且通过眼睛测试以进行测试3.但是测试3需要从测试2获取输出并在测试3开始时插入。我想我会通过附加'>>'来做到这一点。这就是问题所在。 第一个测试是将名为learntris.py的文件保存到testris文件夹,然后运行:
testris.py --shell ./learntris.py
我每次都通过它。然后它运行learntris.py中的代码来生成tetris板输出。它运行'p'命令打印出电路板。这个游戏中的俄罗斯方块板是由'。'制成的10x22矩阵。
这是learntris.py中传递测试2的代码:
def test2():
while True:
qp = raw_input('')
if qp == 'p':
for i in range(0, 22):
for j in range(0, 10):
print'.',
print''
else:
return exit()
test2()
有关测试2输出的更多信息,您可以访问:https://github.com/LearnProgramming/learntris/blob/master/testplan.org#establish-a-way-to-print-the-matrix-p
现在来测试3,这是打印俄罗斯方块形状的g命令。它们由各种字母表示。这是在测试3失败后收到的文本输出:
The 'g' command instructs learntris to read 22 lines
of text from the standard input stream, and use the
characters on these lines to populate some internal
representation of the matrix.
The letter 'g' is a mnemonic for the word 'given', as
in: "given the following matrix...."
The input format should be identical to the output
produced by the 'p' command.
The letters used in the representation correspond to
the set of colors used for blocks in the game:
. = empty (black) b = blue c = cyan
g = green m = magenta o = orange
r = red y = yellow
这是我用于测试3的代码。我知道应该有某种标准输入/输出来接收'p'命令的输出,但我不知道该怎么做。代码主要集中在重现正确的输出,你可以在这里看到: https://github.com/LearnProgramming/learntris/blob/master/testplan.org#establish-a-way-to-set-the-entire-matrix-g
def test3():
while True:
qp = raw_input('')
if qp == 'g':
for i in range(0, 4):
for j in range(0, 10):
print'.',
print''
for i in range(4, 5):
for j in range(0, 10):
print'm',
print''
for i in range(5, 6):
for j in range(0, 10):
print'b',
print''
for i in range(6, 7):
for j in range(0, 10):
print'c',
print''
for i in range(7, 8):
for j in range(0, 10):
print'y',
print''
for i in range(8, 9):
for j in range(0, 10):
print'o',
print''
for i in range(9, 10):
for j in range(0, 10):
print'r',
print''
for i in range(11, 15):
for j in range(0, 10):
print'.',
print''
for i in range(15, 17):
for j in range(0, 1):
print'c',
for j in range(1, 10):
print'.',
print''
for i in range(17, 18):
for j in range(0, 1):
print'c',
for j in range(1, 5):
print'.',
for j in range(5, 6):
print'g',
for j in range(6, 10):
print'.',
print''
for i in range(18, 19):
for j in range(0, 1):
print'c',
for j in range(1, 3):
print'.',
for j in range(3, 4):
print'o',
for j in range(4, 5):
print'.',
for j in range(5, 7):
print'g',
for j in range(7, 10):
print'.',
print''
for i in range(19, 20):
for j in range(0, 3):
print'.',
for j in range(3, 4):
print'o',
for j in range(4, 5):
print'.',
for j in range(5, 6):
print'b',
for j in range(6, 7):
print'g',
for j in range(7, 10):
print'.',
print''
for i in range(20, 21):
for j in range(0, 1):
print'.',
for j in range(1, 2):
print'm',
for j in range(2, 4):
print'r',
for j in range(4, 6):
print'o',
for j in range(6, 7):
print'b',
for j in range(7, 9):
print'y',
for j in range(9, 10):
print'.',
print''
for i in range(21, 22):
for j in range(0, 3):
print'm',
for j in range(3, 5):
print'r',
for j in range(5, 7):
print'b',
for j in range(7, 9):
print'y',
for j in range(9, 10):
print'.'
print''
else:
return exit()
test3()
同样,我只专注于获得正确的输出。所以我现在从句子“输入格式应该与'p'命令产生的输出格式相同”,我需要附加learntris.py来包含test3的代码 - 位于whatever.py上。或者我是否必须使用learntris.py中的代码附加whatever.py?我在终端上附加功能时遇到了麻烦。我试过去Learntris.py> whatever.py用test 2代码覆盖所有代码,但它只是删除了所有test3代码,并没有用test2代码替换它。似乎我追加任何东西的唯一方法是用testris.py来运行它。 我去的时候:
./testris.py --shell ./learntris.py >> ./whatever.py
导致终端只打印另一条线。只是另一台MacBook-Pro:Learntris用户$ line打印。但是当我检查whatever.py文件时,我看到你从测试3失败得到的所有输出都被添加到测试3代码的末尾。我去的时候
./testris.py --shell ./whatever.py >> ./learntris.py
它只是将失败的测试2输出添加到learntris.py代码的末尾。所以我猜测'>>'仅用于附加文本输出?或者我在测试3代码前面缺少一些东西来捕获p命令输出?还有一种更有效的方法来编写测试3的代码吗?
答案 0 :(得分:0)
克隆了项目以检查此问题。
我想这是一个简单的代码,可以完成程序员期望的前两个任务(如果您想从列表理解和lambda中编写更多代码,这将是一个很好的练习。项目)
def tetris():
command = input('')
if command == 'q':
exit()
elif command == 'p':
for i in range(0, 22):
output = ''
for j in range(0, 10):
if j == 0:
output = '.'
else:
output = output + ' .'
if i != 21:
print(output + '\n', end="")
else:
print(output)
if __name__ == '__main__':
tetris()
对于第三项任务,您只需要添加另一个条件,检查输入是否为'g',然后预先设置矩阵即可。