首页 > 解决方案 > 在 Python 中将整数放在没有空格的表格形式中

问题描述

抱歉,我在这里问这个问题,因为这看起来很基础,而且很可能是以前问过的。但是,我已经搜索和尝试了几个小时,但找不到任何可以帮助我的东西。我想编写一个程序,它要求一个上限并返回一个带有数字对(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=""

这没有用。

标签: pythonstringremoving-whitespace

解决方案


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

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

我不确定你理解什么end=''意思,所以你只是将它随机放入你的代码中。这不会让你走得太远。您可以阅读 文档print,但简短的版本是:end=''在打印不应该是行尾的内容时使用,例如m标题和j值,但不要在打印时使用它应该是行尾的东西,比如标题ni


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

或者,也许,您有一些其他变量应该是 3,并且您想使用(我们称之为变量xxx+2不是land l+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

推荐阅读