在 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 个字符宽,否则它将滚动到多行并且看起来一团糟。我想你在这里可能想要的是使用 3
和 5
.
或者,也许,您有一些其他变量应该是 3,并且您想要使用(我们称该变量为 x
)x
和 x+2
而不是 l
和 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
抱歉我在这里问这个问题,因为这看起来很初级而且很可能以前有人问过。但是,我已经搜索并尝试了几个小时,但找不到任何可以帮助我的东西。我想写一个程序,要求一个上限和 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 个字符宽,否则它将滚动到多行并且看起来一团糟。我想你在这里可能想要的是使用 3
和 5
.
或者,也许,您有一些其他变量应该是 3,并且您想要使用(我们称该变量为 x
)x
和 x+2
而不是 l
和 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