编程问题中的格式问题

时间:2019-06-15 20:31:22

标签: python formatting perfect-numbers

uVA 382(https://uva.onlinejudge.org/index.php?option=onlinejudge&page=show_problem&problem=318)非常简单:给定一个数字,说出它是一个完美的,不足的还是丰富的数字。但是似乎格式化存在问题。问题是这样的:

  

输出的第一行应显示为“ PERFECTION OUTPUT”。接下来的N行输出应列出   每个输入整数(无论是完美的,不足的还是丰富的),如下例所示。格式   counts:回显的整数应在输出行的前5个空格内右对齐   两个空格,然后是整数的说明。输出的最后一行应显示为   “输出结束”。

这是我的代码:

def sum_divisors(n):
    sm = 0
    for i in range(1, n):
        if n % i == 0:
            sm += i
    return sm
n = list(map(int, input().split()))
n.pop()
print("PERFECTION OUTPUT")
for i in n:
    sm = sum_divisors(i)
    if sm == i:
        state = "PERFECT"
    if sm < i:
        state = "DEFICIENT"
    if sm > i:
        state = "ABUNDANT"
    spaces = ' ' * (5 - len(str(i)))
    print("{}{}  {}".format(spaces, i, state))
print("END OF OUTPUT")

现在,我已经尝试过将uDebug与许多不同的输出配合使用,并且得到了正确的答案,我认为问题不在于算法。我认为这与输出的格式有关,但不知道我出了什么问题。

1 个答案:

答案 0 :(得分:0)

是否存在特定的错误消息,导致您的格式化失败?我认为暂时没有问题。根据测试的严格程度,考虑输入之间的差异:

15 28 6 56 60000 22 496 0

和:

15 28 6 56 60000 0 22 496

以及您的代码如何处理它们。严格来说,我们将输入的数字列表从零结束。但是您的解决方案将包括它并扔掉496。

这是对代码的重做,以解决该问题以及样式建议:

def sum_divisors(n):
    summation = 0

    for divisor in range(1, n // 2 + 1):
        if n % divisor == 0:
            summation += divisor

    return summation

numbers = map(int, input().split())

print("PERFECTION OUTPUT")

for number in numbers:
    if number == 0:
        break

    summation = sum_divisors(number)

    if summation < number:
        status = "DEFICIENT"
    elif summation > number:
        status = "ABUNDANT"
    else:
        status = "PERFECT"

    print("{:5}  {}".format(number, status))

print("END OF OUTPUT")

看看这对您是否更好。否则,请包含原始程序产生的确切错误消息。