2017-01-27 5 views
-2

私は私はこの予期しない出力を理解していない、誰も説明することができますか?

[1,4,9,10,#] 

として出力を期待していたが、誰もが起こっていることである理由として、その理由を説明することはできますか?私は

[1,4,9,10] 

を取得していますか

str = "adij" 
mainstr = [] 
for i in range(0, len(str)): 
    if 97 <= ord(str[i]) <= 107: 
     mainstr.append(ord(str[i]) - 96) 
    if ord(str[i]) > 107: 
     mainstr.append(ord(str[i]) - 96) 
     mainstr.append('#') 
print mainstr 
+2

変数 'str'を呼び出さないでください。 'str'は文字列コンストラクタです。すでにPythonインタプリタを使いこなしているかもしれません。そして、暗号的な '97 <= ord(str [i])<= 107'の代わりに' 'a '<= str [i] <=' k ''と書いてみませんか?あなたは、あなたの期待に何が間違っているかすぐに分かります。 – DyZ

+0

'ord( 'j')' = 106です。したがって、107未満です。 –

+0

Pythonでは、文字列内の文字を反復処理するときにループカウンタは必要ありません。 str:mainstr.append(ord(letter))の文字の場合は ' –

答えて

2

ord(str[i])107より大きくなることはありませんので、それはです:

>>> ord("j") > 107 
False 
>>> ord("j") 
106 

のでmainstr.append("#")であっても到達しません。


あなたが解決しなければならない他のもの:strはすでにPythonで何か(それはstring classです)

  • を意味

    • あなたの変数strを呼び出してはなりません、あなたは直接文字列を比較することができます。 "a" <= str[i] <= "k"を使用してください。
    • あなただけのカウンターずに文字列内の文字を反復処理することができます

      for character in theString: 
          if "a" <= character <= "k": 
           # ... 
      
  • 1

    キャラクタ107が'k'です。文字列に'k'の辞書順に続く文字がないため、mainstr.append('#')を含むifステートメントは実行されません。リストに'#'を追加するコードは実行されません。

    関連する問題