为了账号安全,请及时绑定邮箱和手机立即绑定

使用打印功能缩进的逻辑

使用打印功能缩进的逻辑

喵喵时光机 2023-02-07 14:28:44
我希望将“波浪”模式打印到控制台,例如:   /\  /  \ /    或者:   /\  /  \      \       \最后,显示为一个大的多波:   /\  /\  /  \/  \ /        \           \基于描述向上/向前或向下/向后方向/斜线中斜线数量的整数列表。我定义了两个函数,一个用于波的左侧最长,反之亦然:from itertools import zip_longestdef 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=""在打印函数调用中用作参数?
查看完整描述

2 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

如果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]:


  /\

 /  \      /\

/    \    /  \

      \  /    \

       \/      \

                \

                 \

                  \

                   \                /

                    \              /

                     \  /\        /

                      \/  \      /

                           \    /

                            \  /

                             \/

希望这会有所帮助。


查看完整回答
反对 回复 2023-02-07
?
呼如林

TA贡献1798条经验 获得超3个赞

当它是 python 2x 时,这很简单,它是由末尾的一个简单逗号完成的魔术,例如。Print("a"), Print("b") 输出:ab Incase of python 3x

你必须使用。end=" " 控制下一个打印函数之间的空格


查看完整回答
反对 回复 2023-02-07
  • 2 回答
  • 0 关注
  • 102 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号