Python 为什么';我的名单不能并排打印吗?
我正在写一个程序,希望骰子能并排打印。但是,实际输出仅将第二个模具的上基座放置在第一个模具的下基座旁边。有人能帮我理解为什么会这样吗Python 为什么';我的名单不能并排打印吗?,python,string,python-3.x,Python,String,Python 3.x,我正在写一个程序,希望骰子能并排打印。但是,实际输出仅将第二个模具的上基座放置在第一个模具的下基座旁边。有人能帮我理解为什么会这样吗 die1 = ('+-------+\n| |\n| * |\n| |\n+-------+') die2 = ('+-------+\n| * |\n| |\n| * |\n+-------+') die3 = ('+-------+\n| * |\n| * |\n| * |\n
die1 = ('+-------+\n| |\n| * |\n| |\n+-------+')
die2 = ('+-------+\n| * |\n| |\n| * |\n+-------+')
die3 = ('+-------+\n| * |\n| * |\n| * |\n+-------+')
die4 = ('+-------+\n| * * |\n| |\n| * * |\n+-------+')
die5 = ('+-------+\n| * * |\n| * |\n| * * |\n+-------+')
die6 = ('+-------+\n| * * * |\n| |\n| * * * |\n+-------+')
list_die = ['0', die1, die2, die3, die4, die5, die6]
x = list_die[1]+' ' + list_die[2]
print(x)
my output
+-------+
| |
| * |
| |
+-------+ +-------+
| * |
| |
| * |
+-------+
尝试使用zip和列表 要让它们并排打印,您需要用拉链将它们连在一起
die1 = ('+-------+','| |','| * |','| |','+-------+')
die2 = ('+-------+','| * |','| |','| * |','+-------+')
die3 = ('+-------+','| * |','| * |','| * |','+-------+')
die4 = ('+-------+','| * * |','| |','| * * |','+-------+')
die5 = ('+-------+','| * * |','| * |','| * * |','+-------+')
die6 = ('+-------+','| * * * |','| |','| * * * |','+-------+')
list_die = ['0',die1,die2,die3,die4,die5,die6];
die_a = list_die[1];
die_b = list_die[2];
for line in zip(die_a,die_b):
print line;
output:
('+-------+', '+-------+')
('| |', '| * |')
('| * |', '| |')
('| |', '| * |')
('+-------+', '+-------+')
尝试使用zip和列表 要让它们并排打印,您需要用拉链将它们连在一起
die1 = ('+-------+','| |','| * |','| |','+-------+')
die2 = ('+-------+','| * |','| |','| * |','+-------+')
die3 = ('+-------+','| * |','| * |','| * |','+-------+')
die4 = ('+-------+','| * * |','| |','| * * |','+-------+')
die5 = ('+-------+','| * * |','| * |','| * * |','+-------+')
die6 = ('+-------+','| * * * |','| |','| * * * |','+-------+')
list_die = ['0',die1,die2,die3,die4,die5,die6];
die_a = list_die[1];
die_b = list_die[2];
for line in zip(die_a,die_b):
print line;
output:
('+-------+', '+-------+')
('| |', '| * |')
('| * |', '| |')
('| |', '| * |')
('+-------+', '+-------+')
拆开以获得单独的行,连接这些行,然后重新连接。请注意,最终结果的
\n
少于原始字符串的简单串联:
def pair(i,j):
linesI = list_die[i].split('\n')
linesJ = list_die[j].split('\n')
return '\n'.join(x+y for x,y in zip(linesI,linesJ))
比如说,
>>> print(pair(1,2))
+-------++-------+
| || * |
| * || |
| || * |
+-------++-------+
编辑时一次又一次地重复拆分相同的字符串是低效的。保留原始定义,可以使用以下行:
list_die = ['0',die1,die2,die3,die4,die5,die6]
list_die = [d.split('\n') for d in list_die]
现在list\u die
包含拆分
您现在可以简单地使用:
def pair(i,j):
return '\n'.join(x+y for x,y in zip(list_die[i],list_die[j]))
其功能与上述相同
冒着过于可爱的风险,您可以制作一个更灵活的版本,在一行上打印任意数量的骰子(用于编写风险游戏或Yahtzee,通常涉及三个或更多的骰子):
例如:
>>> print(dice(1))
+-------+
| |
| * |
| |
+-------+
>>> print(dice(1,2))
+-------++-------+
| || * |
| * || |
| || * |
+-------++-------+
>>> print(dice(3,1,4))
+-------++-------++-------+
| * || || * * |
| * || * || |
| * || || * * |
+-------++-------++-------+
在进一步编辑时:您可以在不使用zip的情况下执行此操作,但要付出使代码变长的代价zip
是为并行迭代而设计的。例如,您将一对并排排列的骰子组合在一起,但将两个骰子面平行向下迭代。如果不使用zip
,则需要使用列表索引来保持迭代的并行性。例如,第二个版本的pair()
(其中list\u die
包含已经分割成几行的骰子面)如下所示:
def pair(i,j):
lines = []
for k in range(len(list_die[i])):
lines.append(list_die[i][k] + list_die[j][k])
return '\n'.join(lines)
这是可行的,但长度超过200%(5行而不是2行)。拆开以获得单独的行,连接这些行,然后重新连接。请注意,最终结果的\n
少于原始字符串的简单串联:
def pair(i,j):
linesI = list_die[i].split('\n')
linesJ = list_die[j].split('\n')
return '\n'.join(x+y for x,y in zip(linesI,linesJ))
比如说,
>>> print(pair(1,2))
+-------++-------+
| || * |
| * || |
| || * |
+-------++-------+
编辑时一次又一次地重复拆分相同的字符串是低效的。保留原始定义,可以使用以下行:
list_die = ['0',die1,die2,die3,die4,die5,die6]
list_die = [d.split('\n') for d in list_die]
现在list\u die
包含拆分
您现在可以简单地使用:
def pair(i,j):
return '\n'.join(x+y for x,y in zip(list_die[i],list_die[j]))
其功能与上述相同
冒着过于可爱的风险,您可以制作一个更灵活的版本,在一行上打印任意数量的骰子(用于编写风险游戏或Yahtzee,通常涉及三个或更多的骰子):
例如:
>>> print(dice(1))
+-------+
| |
| * |
| |
+-------+
>>> print(dice(1,2))
+-------++-------+
| || * |
| * || |
| || * |
+-------++-------+
>>> print(dice(3,1,4))
+-------++-------++-------+
| * || || * * |
| * || * || |
| * || || * * |
+-------++-------++-------+
在进一步编辑时:您可以在不使用zip的情况下执行此操作,但要付出使代码变长的代价zip
是为并行迭代而设计的。例如,您将一对并排排列的骰子组合在一起,但将两个骰子面平行向下迭代。如果不使用zip
,则需要使用列表索引来保持迭代的并行性。例如,第二个版本的pair()
(其中list\u die
包含已经分割成几行的骰子面)如下所示:
def pair(i,j):
lines = []
for k in range(len(list_die[i])):
lines.append(list_die[i][k] + list_die[j][k])
return '\n'.join(lines)
这是可行的,但长度超过了200%(5行而不是2行)。要回答为什么会发生这种行为的问题,请注意,对print
和explicit\n
s的调用会在文本中插入一个新行,这会强制输出向下一行
除非你使用操纵控制台的代码,否则一旦你走下一行,你就不能返回了。从左到右,从上到下打印,就像打印机一样。你不能取消打印
如果需要此功能,请查看图形库
. 诅咒是C++的简单GOTO库,并且可能有一个Python等价物。
当然,正如其他答案所提到的,您可以将文本并排格式化,对于您当前的目的来说,这可能是更好的选择 要回答为什么会发生这种行为的问题,请注意对print
和explicit\n
的调用会在文本中插入一个换行符,这会强制输出向下一行
除非你使用操纵控制台的代码,否则一旦你走下一行,你就不能返回了。从左到右,从上到下打印,就像打印机一样。你不能取消打印
如果需要此功能,请查看图形库
. 诅咒是C++的简单GOTO库,并且可能有一个Python等价物。
当然,正如其他答案所提到的,您可以将文本并排格式化,对于您当前的目的来说,这可能是更好的选择 谢谢你的帮助。但是,不使用zip函数是否可以做到这一点?@kas713不使用zip当然可以做到这一点,尽管结果不太像Pythonic。在一次编辑中,我演示了如何调整pair
函数。我编写的最后一个函数(可以处理任意多个参数)也可以解压缩,但需要嵌套循环,编写起来有些麻烦。谢谢您的帮助。但是,不使用zip函数是否可以做到这一点?@kas713不使用zip当然可以做到这一点,尽管结果不太像Pythonic。在一次编辑中,我演示了如何调整pair
函数。我编写的最后一个函数(可以处理任意多个参数)也可以解压缩,但需要嵌套循环,编写起来有些麻烦。