1

我想做的是:

取一个字符串并附加该字符串的反向副本,形成回文

我想出了什么:

# take an input string
a = input('Please enter a string: ')
a = list(a)

# read the string backwards
b = list(reversed(a))

# append the backward-ordered string to the original string, and print this new string
c = a + b
c = str(c)

print(c)

问题:当给定运行时,此脚本接受一个字符串,例如“test”,并返回['t', 'e', 's', 't', 't', 's', 'e', 't']; 我对这个结果感到困惑,因为我将andc的串联结果显式转换为字符串。( ) 我知道我一定错过了这里的一些基本内容,但我无法弄清楚是什么。有人可以对此有所了解吗?谢谢!abc = str(c)

有人愿意详细说明为什么我的不起作用c = str(c)吗?谢谢!

4

4 回答 4

5

说的问题c = str(c)在于,应用于str列表只是给出了该列表的字符串表示- 例如,str([1,2,3])产生字符串'[1, 2, 3]'

将字符串列表放入字符串的最简单方法是使用该str.join()方法。给定一个字符串s和一个字符串列表a,runnings.join(a)返回一个通过连接 的元素形成的字符串as用作胶水。

例如:

a = ['h','e','l','l','o']
print( ''.join(a) ) # Prints: hello

或者:

a = ['Hello', 'and', 'welcome']
print( ' '.join(a) ) # Prints: Hello and welcome

最后:

a = ['555','414','2799']
print( '-'.join(a) ) # Prints: 555-414-2799
于 2013-06-12T23:52:12.690 回答
1

你可以这样做:

in_str = input('Please enter a string: ')
a = list(in_str)
b=a+a[::-1]
print (''.join(b))

印刷:

Please enter a string: test
testtset

对于这种情况,实际上没有理由首先转换为列表,因为您可以直接在 Python 中索引、反转和连接字符串:

>>> s='test'
>>> s+s[::-1]
'testtset'

这显示了 Python 中用于测试字符串是否为回文的常见习语:

>>> pal='tattarrattat'
>>> pal==pal[::-1]
True
于 2013-06-12T23:55:13.737 回答
1

了解如何使用是值得的join——nrpeterson 的回答很好地解释了这一点。

值得知道如何不给自己制造问题来解决。

问问自己为什么打电话a = list(a)。您正在尝试将字符串转换为字符序列,对吗?但是字符串已经是一个字符序列。你可以调用reversed它,你可以循环它,你可以切片它等等。所以,这是不必要的。

而且,如果您a作为字符串离开,则切片a[::-1]也是字符串。

这意味着您的整个程序可以简化为:

a = input('Please enter a string: ')

# read the string backwards
b = a[::-1]

# append the backward-ordered string to the original string, and print this new string
c = a + b

print(c)

或者,更简单地说:

a = input('Please enter a string: ')

print(a + a[::-1])
于 2013-06-13T01:10:33.307 回答
0
def make_palindrome(string):
    return string + string[::-1]

make_palindrome(input('Please enter a String: '))
于 2013-06-13T02:37:25.910 回答