【问题标题】:Trying to change or interpret the C code to python试图将 C 代码更改或解释为 python
【发布时间】:2018-12-27 04:13:24
【问题描述】:

所以我正在尝试将 C 代码更改为 python。我不知道该怎么做。基本思想是我正在尝试将 AA 字母转换为数字 cod(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)
}

【问题讨论】:

    标签: python c


    【解决方案1】:

    所以问题是,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')
    

    【讨论】:

      【解决方案2】:

      我在这里看到三个问题:

      1. 在 C 代码中,accvs 是一个数字数组。在 Python 代码中,const_aacvs 是一个字符串数组——变量名(错误)拼写不一致。

      2. C 代码依赖于char 的数字类型标识。 Python 代码期望ch 是一个字符串,但在使用它来索引const_aacvs 之前不采取任何步骤将其转换为数字。使用ord() 执行此转换。

      3. Python 中没有 ?: 运算符。将a if c else b 用作三元组,但请注意操作数的顺序不同。

      【讨论】:

        【解决方案3】:
        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
        

        【讨论】:

        • 那也行不通。 ch 必须是 ch.isalpha 存在的字符串,所以 ch & 30 会抛出 TypeError。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-17
        • 2012-06-19
        • 1970-01-01
        • 2012-05-04
        • 1970-01-01
        • 1970-01-01
        • 2023-03-18
        相关资源
        最近更新 更多