使用打印功能缩进的逻辑
Logic with indentation using print function
我希望将 'wave' 模式打印到控制台,例如:
/\
/ \
/
或:
/\
/ \
\
\
最后,显示为一个大的多波:
/\ /\
/ \/ \
/ \
\
基于描述 up/forward 或 down/backward direction/slashes 中斜杠数量的整数列表。
我定义了两个函数,一个用于波的左侧最长,反之亦然:
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=""
作为参数?
当它是python 2x 很简单,就是最后一个简单的逗号完成的魔术
例如。
打印(“一个”),
打印(“b”)
输出:
一个b
如果 python 3x
你不得不用。 end=" " 控制下一个打印函数
之间的space
如果 list
是您的选择,这里有一个打印波形的简单方法:
def print_wave(args):
total_cols = sum(args)
total_rows = args[0] # init total rows by first arg
matrix = [[' ' for _ in range(total_cols)] for _ in range(total_rows)]
curr_col = 0
curr_row = total_rows - 1
down = True
for num in args:
down = not down
char = '\' if down else '/'
# update total rows and current row if need
if down:
diff = curr_row + num - total_rows
if diff > 0:
for _ in range(diff):
matrix.append([' ' for _ in range(total_cols)])
total_rows += diff
else:
diff = num - 1 - curr_row
if diff > 0:
for _ in range(diff):
matrix.insert(0, [' ' for _ in range(total_cols)])
total_rows += diff
curr_row += diff
for i in range(num):
matrix[curr_row][curr_col] = char
# for conjection not update curr row for the last loop
if i != num - 1:
if down:
curr_row += 1
else:
curr_row -= 1
curr_col += 1
for row in matrix:
for col in row:
print(col, end='')
print()
args=[3, 5, 4, 11, 2, 5, 7]
的简单测试:
/\
/ \ /\
/ \ / \
\ / \
\/ \
\
\
\
\ /
\ /
\ /\ /
\/ \ /
\ /
\ /
\/
希望对您有所帮助。
我希望将 'wave' 模式打印到控制台,例如:
/\
/ \
/
或:
/\
/ \
\
\
最后,显示为一个大的多波:
/\ /\
/ \/ \
/ \
\
基于描述 up/forward 或 down/backward direction/slashes 中斜杠数量的整数列表。 我定义了两个函数,一个用于波的左侧最长,反之亦然:
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=""
作为参数?
当它是python 2x 很简单,就是最后一个简单的逗号完成的魔术 例如。 打印(“一个”), 打印(“b”) 输出: 一个b 如果 python 3x
你不得不用。 end=" " 控制下一个打印函数
之间的space如果 list
是您的选择,这里有一个打印波形的简单方法:
def print_wave(args):
total_cols = sum(args)
total_rows = args[0] # init total rows by first arg
matrix = [[' ' for _ in range(total_cols)] for _ in range(total_rows)]
curr_col = 0
curr_row = total_rows - 1
down = True
for num in args:
down = not down
char = '\' if down else '/'
# update total rows and current row if need
if down:
diff = curr_row + num - total_rows
if diff > 0:
for _ in range(diff):
matrix.append([' ' for _ in range(total_cols)])
total_rows += diff
else:
diff = num - 1 - curr_row
if diff > 0:
for _ in range(diff):
matrix.insert(0, [' ' for _ in range(total_cols)])
total_rows += diff
curr_row += diff
for i in range(num):
matrix[curr_row][curr_col] = char
# for conjection not update curr row for the last loop
if i != num - 1:
if down:
curr_row += 1
else:
curr_row -= 1
curr_col += 1
for row in matrix:
for col in row:
print(col, end='')
print()
args=[3, 5, 4, 11, 2, 5, 7]
的简单测试:
/\
/ \ /\
/ \ / \
\ / \
\/ \
\
\
\
\ /
\ /
\ /\ /
\/ \ /
\ /
\ /
\/
希望对您有所帮助。