【问题标题】:Python printing before/after different linesPython在不同行之前/之后打印
【发布时间】:2019-03-04 01:29:37
【问题描述】:

我很久以前创建了一些代码,这有助于在论坛中使用的 BBcode 中创建表格。

counter = 0
counter2 = 0
while True:
        UserInput = input("")
    if counter2 == 0:
        print ("[tr]")
    print ("[td][center]Label\n" + "[img]" + str(UserInput) + "[/img][/center][/td]")
    counter += 1
    counter2 += 1
    if counter % 5 == 0:
        print ("[/tr]")

所以如果我在单独的行中输入 Image1.jpg ~ Image7.jpg,输出如下所示

> [tr] 
> [td][center]Label[img]Image1.jpg[/img][/center][/td] 
> [td][center]Label[img]Image2.jpg[/img][/center][/td] 
> [td][center]Label[img]Image3.jpg[/img][/center][/td] 
> [td][center]Label[img]Image4.jpg[/img][/center][/td] 
> [td][center]Label[img]Image5.jpg[/img][/center][/td] 
> [/tr]
> [td][center]Label[img]Image6.jpg[/img][/center][/td] 
> [td][center]Label[img]Image7.jpg[/img][/center][/td] 

目前,该代码仅在每 5 张图像的末尾插入 [/tr]。如何使 [/tr] 也打印在输出末尾,无论输入多少 jpg?

如何在开头打印 [tr] 并将其与下面的行连接,然后在打印 [/tr] 之前不再打印?

为我糟糕的英语和解释技巧道歉。

(当前进度)

counter = 0
while True:
    UserInput = input("")
    if counter == 0 or counter % 5 == 0:
        print("[tr]", end = "")
    print ("[td][center]Label\n" + "[img]" + str(UserInput) + "[/img][/center][/td]")
    counter += 1
    if counter % 5 == 0:
        print("[/tr]")

【问题讨论】:

  • 请更正缩进,使其准确反映您的代码。

标签: python python-3.x bbcode


【解决方案1】:

看了你写的 5 遍我相信你想要的是:

    print("[tr]")
    while True:
        counter = 0
        UserInput = input("")
        if UserInput == "exit":
            exit(0)
        print("[tr]", end = "")
        while (counter !=5):
            print ("[td][center]Label\n" + "[img]" + str(UserInput) + "[/img][/center][/td]")
            counter += 1
        print ("[/tr]")
    print("[/tr]")

所以这里发生的情况是,您可以根据需要在与第一个从内部打印的行相同的行中打印 [tr]。 [/tr] 在新行中,但您也可以通过在第二个打印中添加 end = "" 来将其放入相同的行中。

【讨论】:

  • 感谢您的回答,我已经改写并提供了一个示例。我尝试了您的解决方案,输入了 5 行;它最终打印了同一行 5 次,然后继续执行序列中的下一行,这可能是我的错,因为英语不好。
  • @diu.lei 我仍然不确定你想要什么。在您的示例中,它不是在 [/tr] 之后缺少 [tr] 吗?或者你只是想要它在一切的开始和每 5 个 [/tr] ?试着举一个完整的例子
  • 是的,它缺少一个很好发现的 [tr],基本上想要一个 [tr] 在与示例中的第 2 行相同的行的开头,然后每 5 行另一个 [tr]
  • 我编辑了它,在开始和结束时添加了之前和之后的打印。也每 5 行执行一次。添加了退出条件,使其不会永久卡在 while 循环中。你可以改变它,但它应该是类似的
  • 我把代码弄得乱七八糟,得到的结果与我想要的非常相似。您的代码的问题是 while 计数器部分循环并仅打印 1 行我的输入 5 次,而不是执行我们假设的操作,并且仅在每 5 行之后打印一行。现在我唯一需要弄清楚的是代码如何检测它已经打印了所有用户输入行并输出结束 [/tr] 行。
【解决方案2】:

分离功能。获取图像列表,然后对其进行处理:

def bbcode(images):
    for i in range(0,len(images),5):
        print('[tr]')
        for image in images[i:i+5]:
            print(f'[td][center]Label[img]{image}[/img][/center][/td]')
        print('[/tr]')

def get_images():
    images = []
    while True:
        image = input('Image? ')
        if not image: break
        images.append(image)
    return images

images = get_images()
bbcode(images)

你可以把它写成一个长脚本,但不是很清楚:

count = 0

while True:
    image = input('Image? ')
    if not image:
        break

    count = (count + 1) % 5
    if count == 1:
        print('[tr]')
    print(f'[td][center]Label[img]{image}[/img][/center][/td]')
    if count == 0:
        print('[/tr]')

if count != 0:
    print('[/tr]')

【讨论】:

    【解决方案3】:

    以下是带有一些评论的结果。要更新您的规范,只需将 max_item_blocks 变量设置为您想要的任何值。

    ### your main body element with {} to pass a number
    element = '[td][center]Label[img]Image{}.jpg[/img][/center][/td]'
    
    ### The number of "blocks" you want to print.
    max_item_blocks = 3
    
    ### Define a start value of 1
    start = 1
    
    ### Our simple loop with join() function
    while max_item_blocks > 0:
    
        ### End value is start + 5
        end = start + 5
    
        print('[tr]\n' + '\n'.join([element.format(i) for i in range(start, end)]) + '\n[\\tr]')
    
        ### Start takes ending value
        start = end
    
        ### Ending value is now start + 5
        end = start + 5
    
        ### Reduce our block counts by 1
        max_item_blocks -= 1
    

    3 个区块的输出:

    [tr]
    [td][center]Label[img]Image1.jpg[/img][/center][/td]
    [td][center]Label[img]Image2.jpg[/img][/center][/td]
    [td][center]Label[img]Image3.jpg[/img][/center][/td]
    [td][center]Label[img]Image4.jpg[/img][/center][/td]
    [td][center]Label[img]Image5.jpg[/img][/center][/td]
    [\tr]
    [tr]
    [td][center]Label[img]Image6.jpg[/img][/center][/td]
    [td][center]Label[img]Image7.jpg[/img][/center][/td]
    [td][center]Label[img]Image8.jpg[/img][/center][/td]
    [td][center]Label[img]Image9.jpg[/img][/center][/td]
    [td][center]Label[img]Image10.jpg[/img][/center][/td]
    [\tr]
    [tr]
    [td][center]Label[img]Image11.jpg[/img][/center][/td]
    [td][center]Label[img]Image12.jpg[/img][/center][/td]
    [td][center]Label[img]Image13.jpg[/img][/center][/td]
    [td][center]Label[img]Image14.jpg[/img][/center][/td]
    [td][center]Label[img]Image15.jpg[/img][/center][/td]
    [\tr]
    

    【讨论】:

    • 对我不起作用,我通常在尝试此操作时粘贴包含 jpgs 的链接块(从示例中截取),使用 / 时仅返回“SyntaxError:无效语法”
    • @Diu.Lei 你好。 SyntaxError 涵盖了很多东西。我刚刚在我的 IDE 中重试了它,它工作正常。可能有用的一件事:如果您有 Notepad++(或其他允许正则表达式的文本编辑器),您可以尝试在其中复制脚本,然后用 4 个空格替换任何选项卡('\t' 或 TAB 按钮)吗?另外,我使用单引号,所以也许检查它们以确保它们与您的设置兼容可能会有所帮助。让我知道是否有任何效果或是否仍有问题!
    猜你喜欢
    • 2019-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-05
    • 1970-01-01
    • 2013-10-10
    • 2020-03-11
    • 2013-06-12
    相关资源
    最近更新 更多