我正在尝试编写一个python程序,该程序将创建一个10 x 10的表(数组),并使用100个从1到250的随机整数自动填充该表。然后,该程序应显示每个行和列的总和该表。
我的程序当前输出的表包含100个随机整数以及每一行的总和。但是,它无法产生每一列的总和。
import random
dash = "-" * 62
print("Random Integer Table:")
print(dash)
print("{:<10s} {:>45s}".format("RANDOM INTEGERS", "ROW TOTAL"))
print(dash)
for rows in range(10):
random_list = [random.randrange(1,251, 1) for rows in range(10)]
stringList = [str(i) for i in random_list]
row_total = sum(random_list)
print("{:<3} {:>4} {:>4} {:>4} {:>4} {:>4} {:>4} {:>4} {:>4}".format(stringList[0], stringList[1], stringList[2], stringList[3], stringList[4], stringList[5], stringList[6], stringList[7], stringList[8], stringList[9]), "{:17d}".format(row_total))
print(dash)
print("COLUMN TOTAL")
print(dash)
sum(random_list(zip([0])))
程序当前输出以下内容:
Random Integer Table:
--------------------------------------------------------------
RANDOM INTEGERS ROW TOTAL
--------------------------------------------------------------
71 29 33 69 6 188 167 158 126 892
100 114 109 89 237 168 25 201 43 1173
91 51 62 220 63 10 85 79 104 796
54 189 69 36 218 130 204 76 93 1289
113 36 104 81 18 215 53 169 103 925
92 20 206 16 116 69 237 168 212 1253
116 86 115 62 189 234 158 240 207 1602
35 101 234 25 41 136 73 154 197 1102
97 81 13 86 26 140 220 42 180 1132
118 117 134 170 237 212 89 140 124 1529
--------------------------------------------------------------
COLUMN TOTAL
--------------------------------------------------------------
但是有错误:
TypeError: 'list' object is not callable
当尝试打印每一列的总计时,出现在我的代码的第30行(最后一行)中。有什么办法可以正确汇总这些列和/或提高程序效率?谢谢。
答案 0 :(得分:1)
一种解决方案是在迭代每一行的同时保存列的总和。 这是一种方法:
import random
dash = "-" * 62
print("Random Integer Table:")
print(dash)
print("{:<10s} {:>45s}".format("RANDOM INTEGERS", "ROW TOTAL"))
print(dash)
# Initialize a list that will have the sum of each column
sum_col = [0 for _ in range(10)]
for rows in range(10):
random_list = [random.randrange(1, 251, 1) for rows in range(10)]
# Save the current sum of each columns
sum_col = [x + sum_part for x, sum_part in zip(random_list, sum_col)]
stringList = [str(i) for i in random_list]
row_total = sum(random_list)
print("{:<3} {:>4} {:>4} {:>4} {:>4} {:>4} {:>4} {:>4} {:>4}".format(stringList[0], stringList[1], stringList[2], stringList[
3], stringList[4], stringList[5], stringList[6], stringList[7], stringList[8], stringList[9]), "{:17d}".format(row_total))
print(dash)
print("COLUMN TOTAL")
print(dash)
print("{:<3} {:>4} {:>4} {:>4} {:>4} {:>4} {:>4} {:>4} {:>4}".format(sum_col[0], sum_col[1], sum_col[2], sum_col[
3], sum_col[4], sum_col[5], sum_col[6], sum_col[7], sum_col[8], sum_col[9]), "{:17d}".format(sum(sum_col)))
# Random Integer Table:
# --------------------------------------------------------------
# RANDOM INTEGERS ROW TOTAL
# --------------------------------------------------------------
# 147 54 61 56 183 172 228 110 241 1260
# 211 77 80 148 237 98 30 99 8 1016
# 216 241 200 31 218 122 183 34 118 1420
# 34 147 195 115 61 69 208 155 96 1203
# 174 27 39 40 99 241 11 92 114 838
# 102 131 8 130 22 225 80 152 159 1032
# 129 30 122 87 142 245 202 97 40 1280
# 219 226 147 153 217 242 154 129 39 1585
# 186 37 123 168 12 152 105 225 57 1072
# 120 243 146 39 216 50 177 208 36 1434
# --------------------------------------------------------------
# COLUMN TOTAL
# --------------------------------------------------------------
# 1538 1213 1121 967 1407 1616 1378 1301 908 12140
如果可以使用numpy
,请使用它!这比较简单:)
希望有帮助!
答案 1 :(得分:0)
这里只是一个清洁工。我使用的是numpy而不是random。这样,您的随机表数组将根据需要保留。还要注意如何将</i>
传递到格式字符串以减少键入。
stringList
import numpy as np dash = "-" * 62 print("Random Integer Table:") print(dash) print("{:<10s} {:>45s}".format("RANDOM INTEGERS", "ROW TOTAL")) print(dash) array_size = (10, 10) random_array = np.random.random_integers(1, 251, size=array_size) for i in range(array_size[0]): random_list = [j for j in random_array[i, :]] stringList = [str(j) for j in random_list] row_total = sum(random_list) print("{:<3} {:>4} {:>4} {:>4} {:>4} {:>4} {:>4} {:>4} {:>4} {:>4}".format(*stringList), "{:17d}".format(row_total)) print(dash) print("COLUMN TOTAL") print(dash) column_totals = random_array.sum(axis=0) print(" ".join(column_totals.astype(str)))