Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么';我的名单不能并排打印吗?_Python_String_Python 3.x - Fatal编程技术网

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
函数。我编写的最后一个函数(可以处理任意多个参数)也可以解压缩,但需要嵌套循环,编写起来有些麻烦。