反向字符串Python

反向字符串Python,python,string,python-3.x,Python,String,Python 3.x,我希望从用户处获取输入,然后像这样反向打印字符串: 输入: 你好 输出: oolollolleolleh 这是我的代码: s = input() for i in range(len(s) - 2, -1, -1): print(s[:i:-1]) 我收到的输出是: oolollolle 我总是错过最后一个角色。我尝试了许多不同的切片方法。我缺少什么?您必须首先获取子字符串,然后将其反转: s = "hello" for i in range(len(s)-1, -1, -1):

我希望从用户处获取输入,然后像这样反向打印字符串:
输入:

你好


输出:

o
ol
oll
olle
olleh

这是我的代码:

s = input()
for i in range(len(s) - 2, -1, -1):
    print(s[:i:-1])
我收到的输出是:

o
ol
oll
olle


我总是错过最后一个角色。我尝试了许多不同的切片方法。我缺少什么?

您必须首先获取子字符串,然后将其反转:

s = "hello"
for i in range(len(s)-1, -1, -1):
    print(s[i:][::-1])
或:

或者反转单词并获取子字符串:

s = "hello"
for i, _ in enumerate(s):
    print(s[::-1][:i+1])

最简单的可能是从
-1
向后迭代:

s = 'hello'
for i in range(1, len(s)+1):
    print(s[-1: -i-1: -1])

hello
o
ol
oll
olle
olleh
按照这种方式,您将按顺序进行切片:

  • s[-1:-2:-1]
  • s[-1:-3:-1]
  • s[-1:-len(s)-1:-1]

要反转整个字符串,必须使用
s[::-1]
忽略第一个值。 因为这不适合您的迭代,所以您必须使用以下内容:

s = input()

for i in range(len(s) - 2, -1, -1):
  print(s[:i:-1])

print(s[::-1])

我会这样做:

a = "Hello"
for i in range(len(a)):
    print(a[-i-1])

这样,您就不需要处理字符串切片,只需要对字符串进行索引,并且没有一堆额外的数字来确定它们在做什么

您也可以简单地将整个内容反转,然后从一开始就将其切片打印出来,这样可以省去一些麻烦:

b = "hello"   # your input
h = b[::-1]   # inverse all - so this is now olleh

# list slicing is from:exclusive to - so simply add 1 to fit with the ranges values 0-4
for k in ( h[0:i+1] for i in range(0,len(h)) ):
    print(k)
输出:

o
ol
oll
olle
olleh

反转字符串
s
的最基本方法是
s[::-1]
(并保存它) 在另一个变量中,例如
s2

然后,要按此字符串的递增部分(
s2
)打印连续行, 您需要在
范围(1,len(s2)+1)上进行循环
,说明
s2的上限
(不包括在内)

因此,脚本可以如下所示:

s = 'hello'
s2 = s[::-1]
for i in range(1, len(s2)+1):
    print(s2[:i])

这很好,但我不认为双字符串切片是严格必要的。@jpp为什么你认为双字符串切片是不正确的?它会产生什么问题?:-)将操作加倍:)。我不是说这是错的,只是。。没有必要。这是一个很酷的解决方案,但我认为没有必要使用比我更好的双slicingI。我认为这是最简单的解决方案。我真的很喜欢它,并没有真正考虑在for循环的末尾使用s[::-1],我只是试图通过迭代完全反转它。谢谢!:)不幸的是,这将不起作用,因为您没有定义任何切片。我明白了-我错过了整个单词向后的要求。此方法将按相反顺序分别打印每个字母。
s = 'hello'
s2 = s[::-1]
for i in range(1, len(s2)+1):
    print(s2[:i])