python - 如何水平而不是垂直打印多个 ASCII 艺术图形?
问题描述
我正在做一个 yahtzee 项目,想在屏幕上从左到右显示骰子文本图形,而不是上下
这是我现在拥有的代码:
import random
die1 = random.randint(1,6)
die2 = random.randint(1,6)
die3 = random.randint(1,6)
die4 = random.randint(1,6)
die5 = random.randint(1,6)
def diepic(die):
if die == 1:
print ("=========")
print ("| |")
print ("| O |")
print ("| |")
print ("=========")
elif die == 2:
print ("=========")
print ("| O |")
print ("| |")
print ("| O |")
print ("=========")
elif die == 3:
print ("=========")
print ("| O |")
print ("| O |")
print ("| O |")
print ("=========")
elif die == 4:
print ("=========")
print ("| O O |")
print ("| |")
print ("| O O |")
print ("=========")
elif die == 5:
print ("=========")
print ("| O O |")
print ("| O |")
print ("| O O |")
print ("=========")
else:
print ("=========")
print ("| O O |")
print ("| O O |")
print ("| O O |")
print ("=========")
diepic(die1)
diepic(die2)
diepic(die3)
diepic(die4)
diepic(die5)
这将从上到下打印出随机骰子选择,但我想在屏幕的最顶部从左到右打印出来。有没有一种简单的方法可以做到这一点?此代码将打印出来,如下所示:
=========
| |
| O |
| |
=========
=========
| O |
| |
| O |
=========
=========
| O |
| O |
| O |
=========
=========
| O O |
| |
| O O |
=========
=========
| O O |
| O |
| O O |
=========
我想要这样:
========= ========= ========= ========= =========
| | | O | | O | | O O | | O O |
| O | | | | O | | | | O |
| | | O | | O | | O O | | O O |
========= ========= ========= ========= =========
然后游戏可以在骰子下继续进行。这可以做到吗?
解决方案
这是一个快速的片段。
首先,重新定义您的函数以返回包含骰子图形每一行的列表,而不是直接打印它们。
def diepic(die):
if die == 1:
return ["=========",
"| |",
"| O |",
"| |",
"=========",]
elif die == 2:
return ["=========",
"| O |",
"| |",
"| O |",
"=========",]
elif die == 3:
return ["=========",
"| O |",
"| O |",
"| O |",
"=========",]
elif die == 4:
return ["=========",
"| O O |",
"| |",
"| O O |",
"=========",]
elif die == 5:
return ["=========",
"| O O |",
"| O |",
"| O O |",
"=========",]
else:
return ["=========",
"| O O |",
"| O O |",
"| O O |",
"=========",]
然后你可以zip
和join
元素水平连接不同的行:
import random
print('\n'.join(map(' '.join, zip(*[diepic(random.randint(1,6)) for i in range(5)]))))
示例输出:
========= ========= ========= ========= =========
| O | | O O | | O | | | | O O |
| | | | | O | | O | | O O |
| O | | O O | | O | | | | O O |
========= ========= ========= ========= =========
最后一部分的注释代码。由于这是一种理解,因此应从下到上阅读:
print( # print the whole
'\n'.join( # join the lines
map(' '.join, # join the swapped chunks
zip(*[ # swap the chunks
diepic(random.randint(1,6)) # return the chunks per die
for i in range(5) # repeat 5 times
]
)
)
)
)
推荐阅读
- c++ - 当标头包含c ++时运行函数
- laravel - Laravel 中未定义的偏移量:0(查看:path\profile.blade.php)问题
- html - iOS Safari (iPhone SE) 自动完成不工作 添加了 HTML5 自动完成属性
- javascript - javascript加入类似的数组
- sendgrid - sendgrid 每个键可以有不同的 requiretls 设置吗?
- ruby-on-rails - 凭证文件未在 Amazon Linux 上读取 Rails 6.1
- javascript - 你如何使用事件委托来切换 Font Awesome 5 SVG 图标?
- java - 如何在 Android JAVA 的列表视图中显示部分但不是全部 JSON 数据
- html - 使用样式组件垂直对齐 div 中的文本
- laravel - Laravel 控制器触发模式以显示数据