使用打印功能缩进的逻辑

我希望将“波浪”模式打印到控制台,例如:


   /\

  /  \

 /    

或者:


   /\

  /  \

      \

       \

最后,显示为一个大的多波:


   /\  /\

  /  \/  \

 /        \

           \

基于描述向上/向前或向下/向后方向/斜线中斜线数量的整数列表。我定义了两个函数,一个用于波的左侧最长,反之亦然:


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=""在打印函数调用中用作参数?


喵喵时光机
浏览 168回答 2
2回答

慕码人2483693

如果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]:  /\ /  \      /\/    \    /  \      \  /    \       \/      \                \                 \                  \                   \                /                    \              /                     \  /\        /                      \/  \      /                           \    /                            \  /                             \/希望这会有所帮助。

呼如林

当它是 python 2x 时,这很简单,它是由末尾的一个简单逗号完成的魔术,例如。Print("a"), Print("b") 输出:ab Incase of python 3x你必须使用。end=" " 控制下一个打印函数之间的空格
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python