2016-11-22 4 views
-1

私はPythonには新しく、Python 2.7を使用しています。
の文字をそれぞれ文字の大文字小文字をに変更したいと思っています。 もし私が"ABcdE"スクリプトを出力"abCDe"を渡す渡します。
多くの方法がありますが、私はList Comprehensionsをこのタスクに使用します。python:リスト内包表記のパラメータの割り当てまたは更新

私は、次のコードを使用しています

str = 'abcDE'; 
str1 = [x for x in str if ord(x)>=97 and ord(x)<=122 x-32 elif ord(x)>=65 and ord(x)<=90 x+32]; 

これは私のInvalid syntaxエラーを与えています。 エラーとは何か分かりません。 私は別のバージョンも試しました:
添付のスクリーンショットをご覧ください。 enter image description here

最後に試してみるとき。私はvaribleコードの更新を削除したときに成功しています。 私の質問は、なぜ変数の変更が理解中で機能していないのですか?

+1

リストの内包表記には 'elif'オプションはありません、ありません。 –

+0

x =(x-32)のように、括弧で囲まれたx-32で試してみましたか? – edlee

+0

コンソールの出力は** text **です。そのテキストをここにコピーして貼り付けてください。スクリーンショットは検索できません。 –

答えて

1

条件式を使用する必要があります。代わりにのフィルタリングを使用しています。フィルタは、生成される内容を変更することはできません。左側の発現が改変されるべき

ので、反復の各要素の値を生成する部分:

[x.upper() if 122 >= ord(x) >= 97 else x.lower() 
for x in yourstring] 

上記プロセスyourstring内のすべての文字(私は使用しないようにそれを改名ビルトイン名str)、およびそのような文字(x)の場合は、小文字の場合は大文字を使用し、そうでない場合は小文字のバージョンを使用します。

デモ:

>>> yourstring = 'abcDE' 
>>> [x.upper() if 122 >= ord(x) >= 97 else x.lower() for x in yourstring] 
['A', 'B', 'C', 'd', 'e'] 

新しい文字列をしたい場合は、''.join()を使用します。

''.join([x.upper() if 122 >= ord(x) >= 97 else x.lower() 
     for x in yourstring]) 

それともあなただけの同じ仕事をするために、内蔵str.swapcase() functionを使用することができます。

+0

私の主な質問は、内包表記の変数を変更または更新できますか? –

+0

@VishalPatelあなたは 'x'に割り当てることはできません。そしてあなたはする必要はありません。 –

0

次の操作を行うことができます

str1 = [x.lower() if x.isupper() else x.upper() for x in str] 
関連する問題