Python 3.43:制作网格并使用sys.stdout.write()

时间:2016-01-23 02:12:57

标签: python python-3.x

我知道这很有可能在之前被问过,我只是希望在经过数小时的搜索后获得一些见解。我试图使用python 3.43创建一个网格。

+ - - + - - +
|     |     |
|     |     |
+ - - + - - +
|     |     |
|     |     |
+ - - + - - +

到目前为止,这是我的代码,我成功地拥有前4列和7行。麻烦的是将它扩展为一种模式,再制作两个连接盒来制作网格。

print ('#1')
corner = '+'
bar = ' -'
side = '|'
space = ' '

top_row = corner + bar + bar + space + corner
sides = side + space*5 + side

def do_twice(func,arg):
    func(arg)
    func(arg)

def sides(width):
    sides = side + (space * width) + side
    print (sides)

def top(length):
    top_row = corner + (bar * length) + space + corner
    print(top_row)


top(2)
do_twice(sides,5)
top(2)
do_twice(sides,5)
top(2)

这给了我网格的一面。对于那些有蟒蛇经验的人来说,这似乎很简陋,但我只是想抓住基础知识。我试图在顶行添加另一面的是:

import sys
def top(length):
    top_row = corner + (bar * length) + space + corner
    print(top_row),(sys.stdout.write(' - - +'))

它确实有帮助,但它返回"无"最后,我相信这是因为我基本上打印了两次,但我的目的是将文本添加到同一行。结果如下:

+ - - + - - + None
|     |
|     |
+ - - + - - + None
|     |
|     |
+ - - + - - + None

任何人都有任何关于我如何扩展此功能或其他方法在同一行上打印的想法?

我真的很感激,谢谢你的时间。

2 个答案:

答案 0 :(得分:0)

尝试:

left = corner + (space + bar)*length + space
top = left + corner + left[::-1]
print(top)

[::-1]反转字符串,网格的左半部分是右半部分的反射,但中间有一个角。

你是对的,为什么你有None。我建议不要在同一个地方使用printsys.stdout.write,因为它们是相同的,会让您的代码不必要地混淆。

  

应该有一个 - 最好只有一个 - 显而易见的方法。

     

- Python的禅宗,蒂姆·彼得斯

答案 1 :(得分:0)

在Python 3.x中,print()接受一个'end'参数,该参数告诉函数在打印完所有参数后要打印什么。参数默认为'\ n',以便打印后功能移动到下一行。如果要在同一行上保持打印,只需使用end =''。

print('1234', end='')
print('ABCD')           #  should print 1234ABCD

关于创建一个网格,你似乎知道将一个字符串乘以一个整数重复该字符串(例如,bar * length =>' - - ')。在Python 3.x中,print()采用'结束' '参数告诉函数在打印完所有参数后要打印什么。参数默认为'\ n',以便打印后功能移动到下一行。如果要在同一行上保持打印,只需使用end =''。

print('1234', end='')
print('ABCD')           #  should print 1234ABCD

关于制作网格:您似乎知道将字符串乘以整数会重复字符串(例如,bar * length =>' - - ')。您似乎也认识到可以通过添加' - - +'来扩展该行。将这些想法放在一起,你得到:

cell_width = 2
grid_width = 3

hpart = bar*cell_width + space + corner  # -> ' - - +'
hline = corner + hpart*grid_width        # -> '+ - - + - - + - - +'

可以使用相同的技术制作垂直线:

'|     |     |     |'

然后是行部分:

'|     |     |     |\n'
'|     |     |     |\n'
'+ - - + - - + - - +\n'

然后网格是hline + row_part * grid_height。