无法将len(x)转换为可用的int进行字符串切片?

Ben*_*ens 2 python

我正在尝试编写一个函数,它接受一个字符串并正常打印,然后反过来,如下所示:

    string = "hello"
    mirror(string)
    'helloolleh'
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止的代码:

    def mirror(x) :
        sentence = " "
        length = len(x)
        lengthstring = str(len(x))
        lengthint = int(lengthstring)
        sentence = x[lengthint, 0]
        print x + sentence
Run Code Online (Sandbox Code Playgroud)

但它一直说len(x)是一个元组而不是一个int,它不能成为字符串切片的一部分?

Gre*_*ill 12

我用你的代码得到的错误是:

  File "<stdin>", line 6, in mirror
TypeError: string indices must be integers, not tuple
Run Code Online (Sandbox Code Playgroud)

什么也没说len(x).实际上,它指的是这条线

    sentence = x[lengthint, 0]
Run Code Online (Sandbox Code Playgroud)

您正在尝试x使用索引进行索引lengthint, 0.Python假定您使用逗号表示您要x使用元组进行索引(lengthint, 0),这是无效的.

您似乎正在尝试使用字符串切片语法来反转字符串.字符串切片语法使用:,而不是,像这样:

sentence = x[lengthint:0]
Run Code Online (Sandbox Code Playgroud)

但是,因为lengthint大于或等于零,所以除了空结果之外永远不会产生任何东西.你需要告诉Python向后索引,如下所示:

sentence = x[lengthint:0:-1]
Run Code Online (Sandbox Code Playgroud)

这几乎可行.它省略了反转副本中原始字符串的第一个字符,因为它0表示超过结束位置的位置.所以你必须使用特殊值None:

sentence = x[lengthint:None:-1]
Run Code Online (Sandbox Code Playgroud)

在你这样做并验证它是否有效之后,你可以删除使用lengthstringlengthint(我认为这是为了避免原始错误而添加的):

sentence = x[len(x):None:-1]
Run Code Online (Sandbox Code Playgroud)

最后,在这种情况下,Python允许您省略前两个切片参数,只留下:

sentence = x[::-1]
Run Code Online (Sandbox Code Playgroud)


Sla*_*off 6

如果你的目标是使这个功能起作用,我认为你的方法太复杂了.您可以简单地将字符串添加到其反向:

>>> def mirror(example):
...     return example + example[::-1]
... 
>>> mirror('hello')
'helloolleh'
Run Code Online (Sandbox Code Playgroud)

Python支持跨步索引,这意味着[::-1]简单地反转字符串.