【发布时间】:2020-10-19 15:04:46
【问题描述】:
我希望在控制台上打印“波浪”模式,例如:
/\
/ \
/
或:
/\
/ \
\
\
最后,显示为一个大的多波:
/\ /\
/ \/ \
/ \
\
基于描述向上/向前或向下/向后方向/斜线的斜线数量的整数列表。 我定义了两个函数,一个是波的左侧最长,反之亦然:
from itertools import zip_longest
def left_wave(water_l, water_r):
"""When left side of wave is largest"""
l_str = " " * water_l + "/"
if water_r == 1:
r_str = "\\"
elif water_r:
r_str = " " * (water_r * 2 - 2) + "\\"
else:
r_str = ""
line = l_str + r_str
print(line)
def right_wave(water_l, water_r):
"""When right side of wave is largest"""
if water_l:
l_str = " " * water_l + "/"
factor_r = water_r * 2 - 2
else:
l_str = " "
factor_r = water_r * 2 - 2
r_str = " " * factor_r + "\\"
line = l_str + r_str
print(line)
我从print_sequence() 调用的定义如下:
def print_sequence(args):
"""Show all waves."""
for wave_height_l, wave_height_r in zip_longest(args[0::2], args[1::2], fillvalue=0):
for water_l, water_r in zip_longest(reversed(range(1, wave_height_l + 1)),
range(1, wave_height_r + 1),
fillvalue=0):
if wave_height_l > wave_height_r:
left_wave(water_l, water_r)
else:
right_wave(water_l, water_r)
运行如下:
args = [11, 2,
5, 7,
# 4
]
print_sequence(args)
目前返回:
/\
/ \
/
/
/
/
/
/
/
/
/
/\
/ \
/ \
/ \
/ \
\
\
我现在正在努力解决的主要问题:我在 right_wave 函数中犯的逻辑错误是什么? (缩进是错误的)。
此外,我将如何开始在同一行上打印 2 个波形?也许在打印函数调用中使用end="" 作为参数?
【问题讨论】:
-
请注意,
print是面向行的,除非您使用与系统相关的控制代码。这意味着您不能print从不同的功能到同一行,并且随后不能将整个波形打印为每个部分的功能。您必须在打印之前构造整行(作为列表、str 或类似的形式)。
标签: python python-3.x logic