2016-12-20 8 views
-1

文字の値と位置を返そうとしています。これをプレーン・フォー・ループとして実行するとうまくいきます。それは、私がそれがうねったように見え始める機能に変えたときです。リスト返り値なし、値を省略します

ここでは、その出力と一緒です:

dict = {'a': 1, 'b': 2 ... 'z': 26} 

list1 = [] 
list2 = [] 

def plot(word): 
    counter = 0 
    for i in word: 
     y = dict.get(i) 
     list1.append(y) #keeps printing None for the first letters 
     counter += 1 
     x = counter 
     list2.append(x) 
    print list1 
    print list2 
    r = zip(list1, list2) 
    print r 

t = raw_input('Enter word: ') 
Enter word: Hello 

plot(t) 

Output: 
[None, None, 5, 12, 12, 15] 
[1, 2, 3, 4, 5] 
[(None, 1), (None, 2), (5, 3), (12, 4), (12, 5)] 
+2

'dict.get(i)'が 'None'の場合、' i'は 'dict'のキーではありません。 '' h''はそれに含まれていますが '' H'''ですか?また、*自分の辞書 'dict' *に名前をつけないでください。 – jonrsharpe

+0

私が探している出力は[(8,1)、(5,2)、(12,3)、(12,4)、(15,5)]です。 – Rajahfox

+0

また、list1には6つの要素「こんにちは」には5文字しかありません。だから、あなたは実際に一つの手紙を欠いているだけです。すべての文字を小文字にするには、単語のlower()メソッドを使用してみてください。次に、単語の前にスペースがないことを確認します( 'Hello'の前にスペースがあるように見えます)。 –

答えて

2

私は問題はあなたが大文字をマップしようとしているということだと思います。単純にforループを変更して、小文字を反復処理します。

for i in word.lower(): 
    y = dict.get(i) 
    list1.append(y) #keeps printing None for the first letters 
    counter += 1 
    x = counter 
    list2.append(x) 
+0

ありがとう!私はまた、raw_input( 'Enter word:')にコロンの後に余分なスペースを数えていることも発見しました。私がそれを取り除くと、すべてがスムーズに進みました。 – Rajahfox

+0

問題ありません!あなたは受け入れられた答えとしてマーキングしてもよろしいですか? – Navidad20

関連する問題