在 Python 中以没有空格的表格形式放置整数

Putting integers in tabular form without whitespace in Python

抱歉我在这里问这个问题,因为这看起来很初级而且很可能以前有人问过。但是,我已经搜索并尝试了几个小时,但找不到任何可以帮助我的东西。我想写一个程序,要求一个上限和 returns a table 与数字对 (m,n) 这样 n 的除数之和(不包括 n)等于 m,并且反之亦然。

现在我写了下面的

bound = int(input('upper bound = '))
l = len(str(bound))
for x in range(1,l):
    print(' ', end='')
print('m', end='  ')
for y in range(1,l):
    print(' ', end='')
print('n', end='')
for i in range(1,bound):
    for j in range (1, bound):
        if j == i:
            break
        som_i = 0
        som_j = 0
        for k in range(1,i):
            if i % k == 0:
                som_i += k
        for l in range(1,j):
            if j % l == 0:
                som_j += l
        if som_i == j and som_j == i:
            print('{:{prec}d}'.format(j, prec = l).rstrip(''), end="")
            print('{:{prec}d}'.format(i, prec = l+2).lstrip(''), end="")

问题是我希望这对以表格形式并排显示,并且缩进正确,具体取决于数字的长度。无论我尝试什么(我已经阅读了很多有类似问题的文章)Python 不断添加空格。

谁能帮我解决这个问题?我是 Python 的新手,我自己也弄不明白。如果相关,我使用的是 3.6 版。

编辑:

例如,当我运行程序时,我得到:

upper bound = 300
  m    n        
220
284

虽然我想得到

upper bound = 300
  m    n        
220  284

对于较大的输入也类似。

EDIT2 我的问题不是重复的,因为我已经尝试添加

end=""

这没有用。

第一个问题是您在打印 j 值后没有使用 end='',但您显然已经知道了。您还 在打印了您不想要的 n header 后使用它。

您编辑的版本修复了 j 打印后缺少的 end='',但随后又在 i 打印后添加了一个,这也是您不想要的。

我不确定您是否理解 end='' 的含义,所以您只是将其随机放入您的代码中。那不会让你走得太远。您可以阅读 print 的文档,但简短的版本是:当您打印不应作为行尾的内容时使用 end='',例如 m header 和 j 值,但是 不要 在打印 应该是的东西时使用它一行的结尾,比如 n header 和 i value.


第二个问题是 l 太大了。在 for l in range(1,j): 之后,它将与 j 的值相同,这意味着它将是 219,因此您将打印 220 填充为 219 个字符,并且284填写到221个字符。因此,除非您的终端超过 446 个字符宽,否则它将滚动到多行并且看起来一团糟。我想你在这里可能想要的是使用 35.

或者,也许,您有一些其他变量应该是 3,并且您想要使用(我们称该变量为 xxx+2 而不是 ll+2。但是我在你的代码中没有看到任何明显的候选人。

所以:

# ... unchanged lines
print('n') # no end='' here
# ... more unchanged lines
        # using 3 and 5 instead of l and l+2, and adding end=''
        print(('{:{prec}d}'.format(j, prec = 3)).rstrip(''), end='')
        print(('{:{prec}d}'.format(i, prec = 5)).lstrip(''))

现在,输出是:

upper bound = 300
  m    n
220  284