2013-11-19 4 views
0

В основном для этого задания мне нужно преобразовать имя в «секретное число», суммируя значение, которое я назначил каждой букве. Все работает до сих пор, но когда я пытаюсь подвести итог, это дает мне ошибку. Я думаю, мне нужно преобразовать буквы в их числовую форму, но все, что я пробовал до сих пор, не будет работать.Программа Python не будет работать - очень просто

например
total_name =0 for c in end_name 
    c_int = int(c)   
    total_name+= c_int 

Любая помощь будет принята с благодарностью! Вот мой код:

'a' ==1 
'b'==2 
'c'==3 
'd'==4 
'e'==5 
'f'==6 
'g'==7 
'h'==8 
'i'==9 
'j'==10 
'k'==11 
'l'==12 
'm'==13 
'n'==14 
'o'==15 
'p'==16 
'q'==17 
'r'==18 
's'==19 
't'==10 
'u'==21 
'v'==22 
'w'==23 
'x'==24 
'y'==25 
'z'==26 

#input:ask user to enter their name 
#processing: convert name into all lower case then calculate number 
#output: return name and reduction to user 

name = input('Name:') 
new_name= str.lower(name) 
end_name=new_name.replace(" ","") 

print('Your "cleaned up" name is:',end_name) 

total_name =0 
for c in end_name 

    total_name+= c 

print('Reduction:',total_name) 
+2

Как ваш код работает? Все эти сравнения должны быть частью заявления 'if', не так ли? Другими словами, какова первая часть исходного кода? Кроме того, не работает, какую ошибку или поведение вы видите? – octopusgrabbus

+1

Каковы линии '' a '== 1' и т. Д., Которые должны быть достигнуты? Все, что вы делаете, это тестирование, если символ '' a'' равен целому числу '1', которое возвращает' False'. –

+0

Я думаю, вы пытаетесь использовать кодировку от 'a' до' 1' и т. Д., Правильно? –

ответ

1

Вы пропустили двоеточие:

for c in end_name:

1

Вам нужна функция ord() будет преобразовать символ в число.

Код ASCII для «A» равен 65, поэтому вы можете отчислить 64 до масштаба, необходимого вашему офсету.

total_name=0 
for c in end_name: 
    total_name+=ord(c)-64 

Для нижнего регистра «a» - код ASCII 97, но тогда вы получите отрицательные числа для любого прописного. Вы могли бы точно также нормализовать всю строку до верхнего регистра (или в нижнем регистре, по вашему выбору) до цикла.

1

Вот один подход:

values = dict(zip("abcdefghijklmnopqrstuvwxyz", range(1,27))) 
name = raw_input('Name:') 
score = 0 

for l in name.lower(): 
    score += values[l] 

Для входа Jason я получить значение 59

+0

+1 для фактической фиксации кода – kevinsa5

0
_d = {chr(k): k for k in range(97, 123)} 

inp = raw_input().replace(" ", "").lower() 

print ''.join([str(_d[ele]) for ele in inp]) 

Или использовать сумму, если вы хотите как сумма

print sum([str(_d[ele]) for ele in inp]) 

Выход:

as d f g 
97115100102103 
0

Эта проблема может быть сделано в две строки:

name = input('Name: ').lower().replace(" ", "") 
print(sum(ord(letter) - ord('a') + 1 for letter in name)) 
Смежные вопросы