根据字符在Python中的位置打印空格

时间:2019-02-10 17:54:06

标签: python

您的答案曾经对我有很大帮助,但是现在我陷入了一个无法找到答案的问题。我目前正开始自学Python,我遇到了一个我不知道的练习。我需要以相反的顺序在新行上打印字符串的每个字符,每个字符之前的空格数等于字符在字符串中的位置。理想情况下,这将使用for循环。

我可以将每个字符打印在新行上,并且可以按相反的顺序打印,但是我的问题是,当我反转字符串时,它会反转每个字符的位置:在字符串“ dog”中,“ d”在位置1,但相反,在位置3。我想打印空格数乘以字符串的原始位置,而不是在它反转之后。

这是我到目前为止(对任何狡猾的代码表示歉意)。

def print_reverse(text):
        x = 0
        spc = ' '
        for i in text[::-1]:
            print(spc * x, i)
            x += 1

print_reverse('dog')

Expected results:
  g
 o
d


Actual results:
g
 o
  d

5 个答案:

答案 0 :(得分:0)

问题最初是x0。相反,您可以尝试从文本长度开始减少x

def print_reverse(text):
    x = len(text)
    spc = ' '
    for i in text[::-1]:
        print(spc * x, i)
        x -= 1

print_reverse('dog')

答案 1 :(得分:0)

在迭代中,您像0,1,2,3,...一样进行迭代。您要减少空格(...3,2,1,0),因此请尝试例如:

def print_reverse(text):
        x = 0
        spc = ' '
        for i in text[::-1]:
            print((len(text) - x)*spc,
            print(i)
            x += 1

在这里,您获取字符串的长度并减去循环索引。与用户学生提出的其他解决方案相同的想法,但实现方式略有不同:)

答案 2 :(得分:0)

def print_reverse(text):
    x = len(text)
    spc = ' '
    for i in text[::-1]:
        print(spc * x, i)
        x -= 1

答案 3 :(得分:0)

这有效

def print_reverse(text):
        x = len(text)
        spc = ' '
        for i in text[::-1]:
            print(spc * x, i)
            x -= 1

答案 4 :(得分:0)

您可以通过几行生成器理解和enumerate来完成此操作:

def print_reverse(text):
    for line in (' ' * (len(word)-i) + c for i, c in enumerate(text[::-1])):
        print(line)

enumerate返回每个列表项及其在列表中的位置(在这种情况下为字符串)。

因此enumerate('dog')将返回:

((0, 'd'), (1, 'o'), (2, 'g'))

如果您从单词(len(word)-i)的总长度中减去该位置,则会得到字母前面所需的空格数。

此答案还使用了生成器表达式,这是对列表中的每个项目应用相同表达式的简便方法。

最后,text[::-1]为您提供了一个反向列表(您也可以执行reversed(text)