您的答案曾经对我有很大帮助,但是现在我陷入了一个无法找到答案的问题。我目前正开始自学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
答案 0 :(得分:0)
问题最初是x
是0
。相反,您可以尝试从文本长度开始减少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)
。