2016-10-13 8 views
1

私は教科書の練習をしています。名前を取る数値計算プログラムを作成し、各文字に昇順に基づいて値を割り当てますアルファベットで注文し、文字の合計を返します。繰り返し文字を確実にする方法は、Pythonのforループで説明されています

私が書いたコードは、文字を繰り返さない任意の名前でうまく動作します。たとえば、名前が 'kayla'の場合、if文が最初の 'a'インスタンスで停止することがわかります。現在のデザイン内に複数の文字をキャッチする方法はありますか、それとも文字を別の方法で並べ替える必要がありますか?

def main(): 

    alphabet = 'abcdefghijklmnopqrstuvwxyxz' 
    user_name = raw_input('Please enter your name ') 
    value = sum = 0 

    for char in alphabet: 
     value = value + 1 
     if char in user_name: 
      sum = sum + value 

    print sum 

答えて

1

あなたは教科書を使っているので、私は答えがほしいと思わないので、ここにヒントがあります。あなたは間違ったことを繰り返しています。 alphabetではなく、user_nameをループする必要があります。

更新。あなたはあなたの問題への素敵な「Python的」解決策が必要な場合、これは一つの方法である:

user_name = raw_input('Please enter your name ') 
print sum(ord(letter.upper())-64 for letter in user_name) 

説明

  1. ordは、このような'A'
  2. ため 65として、文字のASCIIコードを返します。
  3. AZのASCIIコードは65〜90で、正しい順序で表示されます。
  4. 012を超えると、A、には1Bためなど
  5. sumにあなたがsum
  6. パラメータを期待するだけでは何を組み込み関数は、数字の列に評価される式ですuser_name中の文字ごとに1つ
+0

は私が間違ったことを反復処理していることを指摘いただきありがとうございます。それは実際に私が苦労していた他のいくつかの例を明確にするのを助けました。私は7行で何をしようとしていたのかは本当に冷たく、2行にすることができます。 –

1

in機能は、要素がリストに存在するかどうかを確認するだけです。あなたは多くの点で問題を解決することができますが、私は学ぶための良い方法は、店の手紙に辞書を作成することだと思う、と値のペアと、その後値を合計するには、名前の文字を反復:

def main(): 
    alphabet = 'abcdefghijklmnopqrstuvwxyxz' 
    values, val = {}, 1 
    for char in alphabet: 
     values[char] = val 
     val += 1 
    print values 
    user_name = raw_input('Please enter your name ') 
    value = sum = 0 

    for char in user_name.lower(): 
     sum += values[char] 

    print sum 

if __name__ == '__main__': 
    main() 

別の形態をインデックス文字列関数を使用して、文字列内の文字の位置の値を取得しています。

def main(): 
    alphabet = 'abcdefghijklmnopqrstuvwxyxz' 
    user_name = raw_input('Please enter your name ') 
    sum = 0 

    for char in user_name.lower(): 
     sum += alphabet.index(char) + 1 
    print sum 

if __name__ == '__main__': 
    main() 
+0

2番目の例は素晴らしいものでした。ありがとうございました –

+0

あなたを助けてうれしい –

0

非常に単純な方法リストの内包と内蔵のsum機能を使用して::ここで は、サンプルコードで

alphabet = 'abcdefghijklmnopqrstuvwxyxz' 
    user_name = raw_input('Please enter your name ') 
    user_name = user_name.lower().strip() 
    value = sum([alphabet.index(c)+1 for c in user_name]) 
    print(value) 
関連する問題