Python 不确定为什么类似于气泡排序的程序不起作用

Python 不确定为什么类似于气泡排序的程序不起作用,python,python-2.7,checksum,bubble-sort,Python,Python 2.7,Checksum,Bubble Sort,我一直在进行一项编程挑战,主要内容如下: 给定整数数组,您需要遍历所有相邻数组对 元素,从头开始-并交换每对的成员 其中第一个元素大于第二个元素 然后返回交换的金额和最终答案的校验和。我的程序似乎根据它想要的方式进行排序和校验和。但是我的最终答案是否定的,除了他们给出的测试输入 所以:143265-1 使用我的程序生成正确的输出:3 5242536 但有点像: 2 96 7439 92999 240 70748 3 842 74 706 4 86 7 463 1871 7963 904 327

我一直在进行一项编程挑战,主要内容如下:

给定整数数组,您需要遍历所有相邻数组对 元素,从头开始-并交换每对的成员 其中第一个元素大于第二个元素

然后返回交换的金额和最终答案的校验和。我的程序似乎根据它想要的方式进行排序和校验和。但是我的最终答案是否定的,除了他们给出的测试输入

所以:
143265-1
使用我的程序生成正确的输出:
3 5242536

但有点像:

2 96 7439 92999 240 70748 3 842 74 706 4 86 7 463 1871 7963 904 327 6268 20955 92662 278 57 8 5912 724 70916 13 388 1 697 99666 6924 2 100 186 37504 1 27631 59556 33041 87 9 45276 -1
当正确答案为
393485793
时,结果为:
391291223

以下是我目前的情况:

# Python 2.7

def check_sum(data):
    data = [str(x) for x in str(data)[::]]
    numbers = len(data)
    result = 0

    for number in range(numbers):
        result += int(data[number])
        result *= 113
        result %= 10000007

    return(str(result))

def bubble_in_array(data):
    numbers = data[:-1]
    numbers = [int(x) for x in numbers]
    swap_count = 0

    for x in range(len(numbers)-1):
        if numbers[x] > numbers[x+1]:
            temp = numbers[x+1]
            numbers[x+1] = numbers[x]
            numbers[x] = temp
            swap_count += 1

    raw_number = int(''.join([str(x) for x in numbers]))
    print('%s %s') % (str(swap_count), check_sum(raw_number))
bubble_in_array(raw_input().split())

有人知道我哪里出错了吗?

问题在于你计算校验和的方法。当数组中的数字超过一位时,它将失败。例如:

2 96 7439 92999 240 70748 3 842 74 706 4 86 7 463 1871 7963 904 327 6268 20955 92662 278 57 8 5912 724 70916 13 388 1 697 99666 6924 2 100 186 37504 1 27631 59556 33041 87 9 45276 -1
您正在为
296743924070748384274706486746318717963904327626820955926622785759127247916133881692999699242100186375041276315963304187944527699666计算
Checksum
逐位计算
的校验和[2,96,7439,240,70748,3,842,74,706,4,86,7,463,1871,7963,904,327,6268,20955,92662,278,57,85912,724,70916,13388,1,697,92999,6924,2,100,186,37504,1,27631,59556,33041,87,9,45666]

修复方法:

# Python 2.7

def check_sum(data):
    result = 0

    for number in data:
        result += number
        result *= 113
        result %= 10000007

    return(result)

def bubble_in_array(data):
    numbers = [int(x) for x in data[:-1]]
    swap_count = 0

    for x in xrange(len(numbers)-1):
        if numbers[x] > numbers[x+1]:
            numbers[x+1], numbers[x] = numbers[x], numbers[x+1]
            swap_count += 1

    print('%d %d') % (swap_count, check_sum(numbers))

bubble_in_array(raw_input().split())
更多注释

  • 要在Python中交换两个变量,不需要使用
    temp
    变量,只需使用
    a,b=b,a
  • 在Python2.X中,使用
    xrange
    而不是
    range

您正在从
numbers=data[:-1]
@shashashank中切掉列表的最后一个元素。这是故意的,在质询输入中,他们指定输入的结尾用“-1”表示,不应包含在输入中。我很确定,目的是读取元素,直到有一个元素
-1
。但是,如果您已经验证了这一点,请从您的问题中删除所有输入内容。将其替换为演示问题的硬编码值。还有,为什么要使用旧的Python 2??/?我不希望有更好的答案。谢谢你,这消除了我的困惑,我学到了一些意想不到的东西。