【问题标题】:Python equivalent to program in CPython相当于C中的程序
【发布时间】:2014-09-30 02:17:26
【问题描述】:

我的目标是将以下用 C 语言编写的代码翻译成 python,这样我就可以通过一串数字来评估循环。最初,目标取 0 到 9 的范围,为每次迭代收集输入,同时乘以,并对整个范围求和。最后,确定除以 11 后的余数。

int checksum(char *str) {
    int i, sum = 0;
    for (i=0; i<9; i++) {
        sum+= (str[i] - '0') * (i + 1);
    }
    return sum % 11;
}

【问题讨论】:

  • 如果你自己用 C 语言编写并且理解它,那么将它翻译成 Python 应该没有问题。去阅读tutorial。您想查看函数和 for 循环。
  • 我在一个 python 研究小组中,其中一位成员对这个问题的建议是用 C 语言提交的——这是一种我不熟悉的语言。我的回答是,“虽然我很欣赏这个建议,但我不熟悉 C。请花一天时间将这个建议解释为 Python。”我陷入了僵局并在这里寻求帮助。
  • 我最初的想法,构建一个循环,迭代范围,要求每一步的输入,执行数学,对数学求和并确定余数。这是我的过程想法。

标签: python string loops sum iteration


【解决方案1】:

代码的直接(但不是非常惯用的)翻译如下所示,注意我重命名了一些变量以避免与 Python 的内置函数发生冲突:

def checksum(s):
    c = 0
    for i in range(9):
        c += int(s[i]) * (i + 1)
    return c % 11

另一个更 Pythonic 的选项是使用生成器表达式而不是显式循环:

def checksum(s):
    return sum(int(e) * i for i, e in enumerate(s[:9], 1)) % 11

【讨论】:

  • 如果你要走那条路,那么:return sum(int(val) * idx for idx, val in enumerate(s[:9], 1)) % 11
  • @JonClements 在值1 中开始枚举似乎是个好主意。 s[:9] 部分我不太确定,我喜欢我的版本适用于长度不是9 的字符串。但是如果输入包含数字以外的字符,int(val) 部分将失败(如果可以假设,那么您的建议很好)
  • 我把 9 放进去,因为那是 OPs for 循环的全部范围——它当然可以被删除,或者只是让它成为def checksum(s, n=None),然后让它成为enumerate(s[:n], 1) 或其他东西。此外,OP 想要通过一串数字评估循环,所以我会坚持使用int 来明确并得到验证,否则像ord('!') - ord('0') 这样的东西将会有对结果的奇怪影响。只是我的 2p。
  • 假设输入只是一个整数,跨越0到9的整个范围。
  • 哦,是的,将包括使用 int。谢谢你提醒我。
猜你喜欢
  • 1970-01-01
  • 2020-09-28
  • 2011-06-25
  • 2010-12-21
  • 2011-05-14
  • 1970-01-01
  • 1970-01-01
  • 2017-07-18
  • 1970-01-01
相关资源
最近更新 更多