2015-06-04 54 views
-1

我希望用戶輸入一個單詞,例如apple然後轉換的每個字符在此字符串到相應的字母(a = 1,B = 2,C = 3等)將原始輸入字符串轉換爲數字(對於每個字母),然後對這些數字求和

到目前爲止我所定義的所有的字母

a=1 
b=2 
c=3 
d=4 
e=5 
f=6 
g=7 
etc... 

和有拆分字符串打印出來使用

word = str(raw_input("Enter a word: ").lower()) 

for i in range (len(word)): 
    print word[i] 

這個單獨打印字符的每個字母,但我無法弄清楚如何打印這些作爲他們的相應數字,然後我可以加在一起。

+2

'ORD(字[I]) - 96 ' – Ajay

+0

可替代地,使用字典'{ 'A':1,...}'而不是分配一個'= 1'。 – jonrsharpe

回答

1

首先,你可以遍歷您的字符串本身作爲一個迭代器,那麼你可以得到你的信預期的ID與ord(i)%96

word = str(raw_input("Enter a word: ").lower()) 

for i in word: 
    print ord(i)%96 

注意ord('a')=97

而對於總和:

sum(ord(i)%96 for i in word) 
0

會使用ord(轉換角色,以它的代碼):

def getnumber(letter) 
    return ord(letter) - ord('a') + 1 

,然後,你可以這樣做:

print sum(map(getnumber, word)) 
1
>>> string = 'hello' 
>>> for char in string: 
...  print ord(char) - 96, 
... 
8 5 12 12 15 

你可以得到

>>> sum = 0 
>>> for char in string: 
...  sum += ord(char) - 96 
... 
>>> sum 
52 

或打火機

>>> sum ([ ord(i) - 96 for i in string ]) 
52 
1

如果相關聯的字母的值沒有必要如下因素的ASCII順序值,一個解決方案可以是字母和其相應的值存儲到一個字典:

values = { 
    'a':1, 
    'b':2, 
    'c':3, 
    'd':4, 
    'e':5, 
    'f':6, 
    'g':7, 
    # etc. 
} 

word = str(raw_input("Enter a word: ").lower()) 

for i in range (len(word)): 
    print values[word[i]] 
+0

嘿!我現在看到了你的答案。我們相隔23秒,但選擇了相同的變量名!也許這就是所謂的知識一致性:) –

2

在你的情況下,最好使用一個定義所有字符和值的字典。 string庫提供了一個更簡單的方法來執行此操作。在dict comprehension內使用string.ascii_lowercase,您可以像這樣填充字典映射。

>>> import string 
>>> wordmap = {x:y for x,y in zip(string.ascii_lowercase,range(1,27))} 
>>> wordmap 
{'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4, 'g': 7, 'f': 6, 'i': 9, 'h': 8, 'k': 11, 'j': 10, 'm': 13, 'l': 12, 'o': 15, 'n': 14, 'q': 17, 'p': 16, 's': 19, 'r': 18, 'u': 21, 't': 20, 'w': 23, 'v': 22, 'y': 25, 'x': 24, 'z': 26} 

現在,您可以輕鬆將其映射到您的輸出。首先我們輸入

>>> word = str(raw_input("Enter a word: ").lower()) 
Enter a word: apple 
>>> values = [] 

現在我們只是循環輸入單詞並將值附加到空列表中。我們追加這些值是因爲我們還需要找到這些值的總和。

>>> for i in word: 
...  print "{}".format(wordmap[i]) 
...  values.append(wordmap[i]) 
... 
1 
16 
16 
12 
5 

你終於可以使用sum功能輸出的總和值。

>>> sum(values) 
50 
0

如果你想ANSI字符的默認順序,你可以使用:

w = 'apple' 
print [ ord(i) for i in w ] 

如果不是這樣,在函數定義自己的映射,並調用在列表理解代替在ord().

0

存放在字典中的字符:字典[ '一'] = 1,等

0

獲得當前的方法W你可以這樣做...

word = str(raw_input("Enter a word: ").lower()) 

for i in range (len(word)): 
    # eval to change the string to an object 
    print eval(str(word[i])) 

這將用您已經定義的字符對象替換字符串。

但更好的方法來求解你的問題可能是這樣的......

nums = map(lambda x: ord(x)-96, list(raw_input("Enter word: ").lower())) 

這將返回編號,其中a是1的所有字母的列表,B爲2 ... y爲25 ,z是26.然後,您可以執行for i in nums: print i以逐行打印所有數字。

0
word = raw_input("Enter a word: ").lower() 
s=[list(i) for i in word.split()] 
s=[x for _list in s for x in _list] 
print s 
for i in s: 
    print ord(i)-96 
相關問題