2013-03-25 123 views
0

我有一个脚本,我试图让我的RPi工作。它的工作原理在64位系统上如预期,但不能在32我得到python overflowror在32位树莓派上运行的长整数

OverflowError:Python的INT太大,转换为C长

这里是脚本

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

+0

该代码甚至无法正常运行。你确定要''编号'.zfill(10)''?(填充字符串'编号')? – 2013-03-25 04:48:06

+0

是的,输出它0101010101打印为101010101.想要保留10位数字我只是复制/粘贴了代码我发布在python解释器中,以确保我没有输入错字,它对我运行良好,所以不知道它为什么不会运行。 – otkaz 2013-03-25 05:35:11

+0

我不确定它是否是语义错误 – 2013-03-25 06:04:26

回答

2

你可以看看Python文档以供参考。

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

+0

我认为我对于python来说,这太愚蠢了,perls语法总是有意义的,我用itertools搞乱了,但是不知道如何格式化所有的东西,感谢指向正确的方向 – otkaz 2013-03-25 06:30:27

+0

我使用了intertools。 count再次感谢您的帮助 – otkaz 2013-03-25 07:16:46

+0

不要灰心丧气,每次都要学习它,只需要了解与语言有关的事情,不要发布完整的答案,因为只有通过实验才能自学,您可以接受答案, 如果它 真的有帮助。 – 2013-03-25 08:55:55