Итак, я пытаюсь изменить код C на python. Я не знаю, как это сделать. Основная идея заключается в том, что я пытаюсь преобразовать букву AA в числовую кодировку (0-21)
Это то, что я пытался сделать
def annum(ch):
const_aacvs = ['999','0','3','4','3','6','13','7','8','9','21','11','10','12','2','21','14','5','1','15','16','21','19','17','21','18','6']
return(ch.isalpha() ? aacvs[ch & 30] : 20)
он показывает неверный синтаксис. Я знаю, что это должна быть простая проблема.
это исходный код из C
int annum(int ch){
const static int accvs[] = {999, 0, 3, 4, 3, 6, 13, 7, 8, 9, 21, 11, 10, 12, 2, 21, 14, 5, 1, 15, 16, 21, 19, 17, 21, 18, 6};
return(isalpha(ch) ? accvs[ch & 30] : 20)
}






Я вижу здесь три проблемы:
В коде C accvs - это массив чисел. В коде Python const_aacvs - это массив строк, а имя переменной написано (неправильно) непоследовательно.
Код C зависит от идентичности char как числового типа. Код Python ожидает, что ch будет строкой, но не предпринимает никаких шагов для преобразования ее в число перед использованием для индексации в const_aacvs. Используйте ord() для выполнения этого преобразования.
В Python нет оператора ?:. Используйте a if c else b как тернар, но помните, что операнды идут в другом порядке.
def annum(ch):
acvs = [999,0,3,4,3,6,13,7,8,9,21,11,10,12,2,21,14,5,1,15,16,21,19,17,21,18,6]
return aacvs[ord(ch) & 30] if ch.isalpha() else 20
Дело в том, что в Python нет такого же тернарного оператора.
condition?true:false => true if condition else false
Для реализации линии:
return(isalpha(ch) ? accvs[ch & 30] : 20)
в python вам нужно сделать следующее:
return (accvs[ord(ch) & 30] if ch.isalpha() else '20')
Это тоже не сработает.
chдолжен быть строкой для существованияch.isalpha, поэтомуch & 30выдаст TypeError.