我的代码output
中存在问题;
每列的元素并不完全相互放置。
我原来的代码太忙了,所以我把它简化为一个简单的代码;
所以首先,les解释这个简单的:
首先考虑一个简单的问题如下:
编写一个代码,它接收一个自然数r
,作为行数;
并收到另一个自然数c
,作为列数;
然后打印所有自然数字
在1
行和rc
列中填写r
到c
。
所以code
将如下所示:
r = int(input("How many Rows? ")); ## here r stands for number of rows
c = int(input("How many columns? ")); ## here c stands for number of columns
for i in range(1,r+1):
for j in range (1,c+1):
print(j+c*(i-1)) ,
print
,output
如下:
How many Rows? 5
How many columns? 6
1 2 3 4 5 6
7 8 9 10 11 12
13 14 15 16 17 18
19 20 21 22 23 24
25 26 27 28 29 30
>>>
或:
How many Rows? 7
How many columns? 3
1 2 3
4 5 6
7 8 9
10 11 12
13 14 15
16 17 18
19 20 21
>>>
我该怎么做才能得到output
这样的人?
How many Rows? 5
How many columns? 6
1 2 3 4 5 6
7 8 9 10 11 12
13 14 15 16 17 18
19 20 21 22 23 24
25 26 27 28 29 30
>>>
或
How many Rows? 7
How many columns? 3
1 2 3
4 5 6
7 8 9
10 11 12
13 14 15
16 17 18
19 20 21
>>>
现在我的原始代码类似于以下内容:
def function(n):
R=0;
something...something...something...
something...something...something...
something...something...something...
something...something...something...
return(R)
r = int(input("How many Rows? ")); ## here r stands for number of rows
c = int(input("How many columns? ")); ## here c stands for number of columns
for i in range(0,r+1):
for j in range(0,c+1)
n=j+c*(i-1);
r=function(n);
print (r)
现在为了简单起见,假设通过一些手动操作我们得到:
f(1)=function(1)=17
,f(2)=235
,f(3)=-8
;
f(4)=-9641
,f(5)=54278249
,f(6)=411
;
现在,当我运行代码时,out put
如下:
How many Rows? 2
How many columns? 3
17
235
-8
-9641
54278249
41
>>>
我做了什么来获得output
这样的话:
How many Rows? 2
How many columns? 3
17 235 -8
-9641 54278249 411
>>>
另请注意,我不想得到这样的内容:
How many Rows? 2
How many columns? 3
17 235 -8
-9641 54278249 411
>>>
答案 0 :(得分:3)
使用rjust
方法:
r,c = 5,5
for i in range(1,r+1):
for j in range (1,c+1):
str_to_printout = str(j+c*(i-1)).rjust(2)
print(str_to_printout),
print
结果:
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
至于你的上一个例子,我们假设f(n)
以这种方式定义:
def f(n):
my_dict = {1:17, 2:235, 3:-8, 4:-9641, 5:54278249, 6:411}
return my_dict.get(n, 0)
然后您可以使用以下方法:
r,c = 2,3
# data table with elemets in string format
data_str = [[str(f(j+c*(i-1))) for j in range (1,c+1)] for i in range(1,r+1)]
# transposed data table and list of max len for every column in data_str
data_str_transposed = [list(i) for i in zip(*data_str)]
max_len_columns = [max(map(len, col)) for col in data_str_transposed]
# printing out
# the string " " before 'join' is a delimiter between columns
for row in data_str:
print(" ".join(elem.rjust(max_len) for elem, max_len in zip(row, max_len_columns)))
结果:
17 235 -8
-9641 54278249 411
使用r,c = 3,3
:
17 235 -8
-9641 54278249 411
0 0 0
请注意,每列中的缩进对应于此列中的最大长度,而不是整个表中的缩写。
答案 1 :(得分:1)
希望这会有所帮助。如果您需要进一步说明,请发表评论。
# result stores the final matrix
# max_len stores the length of maximum element
result, max_len = [], 0
for i in range(1, r + 1):
temp = []
for j in range(1, c + 1):
n = j + c * (i - 1);
r = function(n);
if len(str(r)) > max_len:
max_len = len(str(r))
temp.append(r)
result.append(temp)
# printing the values seperately to apply rjust() to each and every element
for i in result:
for j in i:
print(str(j).rjust(max_len), end=' ')
print()
答案 2 :(得分:1)
MaximTitarenko的回答:
首先查找最小值和最大值,然后确定哪个是较长的值,并使用其长度作为rjust(x)调用的值。
import random
r,c = 15,5
m = random.sample(xrange(10000), 100)
length1 = len(str(max(m)))
length2 = len(str(min(m)))
longest = max(length1, length2)
for i in range(r):
for j in range (c):
str_to_printout = str(m[i*c+j]).rjust(longest)
print(str_to_printout),
print
示例输出:
937 9992 8602 4213 7053
1957 9766 6704 8051 8636
267 889 1903 8693 5565
8287 7842 6933 2111 9689
3948 428 8894 7522 417
3708 8033 878 4945 2771
6393 35 9065 2193 6797
5430 2720 647 4582 3316
9803 1033 7864 656 4556
6751 6342 4915 5986 6805
9490 2325 5237 8513 8860
8400 1789 2004 4500 2836
8329 4322 6616 132 7198
4715 193 2931 3947 8288
1338 9386 5036 4297 2903
答案 3 :(得分:0)
string
method
.rjust
从文档(上面链接):
<强>
string.rjust(s, width[, fillchar])
强>此函数右对齐给定
string
字段中的width
。它返回一个至少string
个字符宽的width
,通过用string
填充字符fillchar
(默认为空格)创建,直到右边的给定宽度为止。字符串永远不会被截断。
因此,我们需要计算每个width
应该number
的{{1}}(以字符为单位)。这非常简单,只有padded
rows
个*
columns
+
的数量(1
之间增加了一个空格间隔每个+1
)。
使用它,编写代码变得非常简单:
column
分别为r = int(input("How many Rows? "))
c = int(input("How many columns? "))
width = len(str(r*c)) + 1
for i in range(1,r+1):
for j in range(1,c+1):
print str(j+c*(i-1)).rjust(width) ,
print
,r
c
,4
,5
:
outputs
希望这可以帮助你,你可以自己适应其他情况!