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'];を返します。とcを連結した結果、を文字列に明示的に変換したため、この結果について混乱しています。( ) ここでいくつかの基本的なことを見逃していたに違いないことはわかっていますが、何が原因かわかりませんでした。誰かがこれに光を当てることができますか?ありがとうございました!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を指定すると、runningは、 を接着剤として使用してs.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 に答える