【问题标题】:python overflowerror on long integer when run on a 32bit raspberry pi在 32 位树莓派上运行时长整数上的 python 溢出错误
【发布时间】:2013-03-14 12:26:29
【问题描述】:

我有一个脚本,我正在尝试使用我的 RPi。它在 64 位系统上按预期工作,但在 32 位系统上无法正常工作。我明白了

OverflowError: Python int 太大而无法转换为 C long

这是脚本

for number in xrange(int("0101010101"), int("9898989898")+1):
    number = `number`.zfill(10)
    prev = ''
    i = 0
    for c in `number`:
            if c in prev:
                    break
            else:
                    i += 1
                    prev = c
            if i>=len(`number`):
                    print number

我可以用 perl 很好地做到这一点,但不知道如何用 python 来完成

这是 perl 的等价物

my $num = "";
for $num ("0101010101" .. "0101989898"){
    if ($num =~ /00|11|22|33|44|55|66|77|88|99/o) {
            ++$num;}
    else {
            print "$num\n";}}

也试过用python3写,但我对3完全不熟悉

【问题讨论】:

  • 代码甚至无法正常运行。你确定要"number".zfill(10)"吗? (填充字符串number)?
  • 是的,没有它 0101010101 打印为 101010101。希望保持 10 位数。我刚刚复制/粘贴了我在 python 解释器中发布的代码,以确保我没有打错字并且它运行良好,所以不确定为什么它不会为你运行。
  • 我不确定这是否是语义错误

标签: python python-2.7 python-3.x raspberry-pi


【解决方案1】:

您可以查看 Python 文档以供参考。

CPython 实现细节:xrange() 旨在简单快速。实现可能会施加限制来实现这一点。 Python 的 C 实现将所有参数限制为原生 C long(“短”Python 整数),并且还要求元素的数量适合原生 C long。如果需要更大的范围,可以使用 itertools 模块制作替代版本:islice(count(start, step), (stop-start+step-1+2*(stephttp://docs.python.org/2/library/functions.html#xrange

【讨论】:

  • 我觉得我对 python 来说太愚蠢了。 perls 语法总是有意义的。我在搞乱 itertools 但不知道如何格式化所有内容。感谢您为我指明正确的方向。
  • 我用 intertools.count 弄明白了,再次感谢您的帮助
  • 不要气馁,虽然学习它每次都发生,只是了解语言相关的事情。没有发布完整的答案,因为你可以自己学习,只能通过实验。如果真的有帮助,您可以接受答案。
猜你喜欢
  • 1970-01-01
  • 2022-06-11
  • 2020-03-14
  • 2013-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-17
相关资源
最近更新 更多