如何在python3.5中使用循环生成菱形文本模式

2024-10-01 04:52:33 发布

您现在位置:Python中文网/ 问答频道 /正文

正如标题中所述,我希望使用Python3.5制作一个菱形文本模式,但我对如何使形状正常工作有点拘泥。在

期望输出:

                   S
                  SAS
                 SAMAS
                SAMPMAS
               SAMPLPMAS
              SAMPLELPMAS
               SAMPLPMAS
                SAMPMAS
                 SAMAS
                  SAS
                   S

代码:

^{pr2}$

电流输出:

      f
     fof
    fooof
   fooboof
  foobaboof
 foobaraboof
  foobaboof  fooboof   fooof    fof     f

Tags: 文本标题模式形状sas菱形fof拘泥
3条回答

看起来您在每一行的开头都缺少了等于length - i - 1length - l - 1空格的填充。在

def print_row(i, l):
    print(" " * (l - i - 1), end="")
    for j in range(0, i+1):
        print(word[j], end="")
    for k in range(i-1, -1, -1):
        print(word[k], end="")
    print()

for i in range(0, length):
    print_row(i, length)
for l in range(length, -1, -1):
    print_row(l, length)

编辑:简化循环

你几乎已经自己解决了,唯一缺少的是每行前面的空格。现在第一行前面有n-1空格,n是字符串的长度,第二行前面有n-2空格,依此类推,直到我们到达中间。中间线前面不应包含空格。在

当我们到达中间位置后,我们再次一次增加一个标题空格的数量。在

word=input("Enter characters: ")
length=len(word)
for i in range (0, length):
    for j in range(length-i-1):
        print(' ', end="")
    for j in range(0, i+1):
        print(word[j], end="")
    for k in range (i-1, -1, -1):
        print (word[k], end="")
    print()
for l in range (length, 0, -1):
    for j in range(length-l+1):
        print(' ', end="")
    for m in range (l-1, 0, -1):
        print(word[m], end ="")
    for n in range (0, i-1):
        print(word[n], end="")
    print()

不幸的是,这不是代码中唯一的问题。当你测试它时,你会得到一颗钻石,如:

^{pr2}$
word=input("Enter characters: ")
length=len(word)
for i in range (0, length):
    for j in range(length-i-1):
        print(' ', end="")
    for j in range(0, i+1):
        print(word[j], end="")
    for k in range (i-1, -1, -1):
        print (word[k], end="")
    print()
for l in range (1,length):for j in range(l) :
        print(' ', end="")
    for m in range (0,length-l-1):
        print(word[m], end ="")
    for n in range (length-l-1,-1,-1):
        print(word[n], end="")
    print()

打印:

     f
    fof
   fooof
  fooboof
 foobaboof
foobaraboof
 foobaboof
  fooboof
   fooof
    fof
     f

怎么样

import itertools
l = len(word)
for j in itertools.chain(range(l), reversed(range(l-1))):
    print(word[0:j].rjust(l) + word[j::-1])

你正在寻找的输出。它使用rjuststring方法适当地填充缩短单词之前的空格,并使用扩展切片来获得字符串的反向部分。在

相关问题 更多 >