使用IDLE / Python 3.5.1
我首先要说的是,我是VBA中经验丰富的程序员,但是在Python的第2天。我向你保证,我已经对这个问题进行了很多搜索,但是我读过的30个左右的文件似乎并没有解释我的问题。
我还请求请求给出的任何答案都是格式正确的Python 3.5.1代码,而不是指向其他文档或链接的有用指针吗?
问题
我正在运行报告并随时输出结果。我需要在此期间存储结果(可能是在数组中),以便我可以在之后引用它们。报告(以及数组的填充)可以多次重新运行,因此如果使用'追加'等概念,请记住这一点。在构建数组时。该数组的维度为[25,4] - 最多25条记录,每条记录包含4个项目。
Day X Y Z Total
1 2 3 4 9
2 3 4 5 12 ...
(Purists: The total needs to be recorded rather than calculated because of rounding.)
如果有人可以将这段代码翻译成Python(从VBA出于插图目的),我可以自己解决问题。我不想导入数组模块,除非它是唯一的方法。注意:变量l是一个循环,它使数组构建两次,以证明数组需要能够从头开始重建,而不是只创建一次。
Sub sArray()
Dim a(25, 4)
For l = 1 To 2
For i = 1 To 25
For j = 1 To 4
a(i, j) = Int(100 * Rnd(1)) + 1
Debug.Print a(i, j);
Next j
Next i
Next l
End Sub
谢谢,
汤姆
答案 0 :(得分:0)
我不确定我的问题是否正确... 如果你想制作一个大小为[25,4]的数组(在这种情况下列出一个更好的术语),这是一种方法:
import random
a = [[int(100*random.random())+1 for j in range(4)] for i in range(25)]
>>> print a
[[74, 17, 36, 75],
[1, 79, 33, 90],
[58, 66, 47, 95],
[35, 40, 87, 38],
[43, 46, 34, 66],
[69, 34, 26, 49],
[56, 83, 44, 14],
[2, 44, 54, 97],
[50, 21, 39, 60],
[13, 94, 12, 48],
[36, 13, 2, 71],
[77, 44, 31, 11],
[56, 26, 30, 39],
[17, 13, 83, 84],
[54, 37, 34, 18],
[5, 54, 88, 100],
[22, 77, 70, 21],
[51, 88, 26, 97],
[69, 33, 86, 48],
[42, 66, 38, 78],
[71, 43, 96, 23],
[6, 46, 100, 29],
[32, 86, 15, 48],
[96, 84, 8, 56],
[29, 64, 69, 79]]
如果你想表明"数组需要能够从头开始重建,而不是只创建一次" (为什么你需要这个?)
for l in range(2):
a = [[int(100*random.random())+1 for j in range(4)] for i in range(25)]
另外,生成随机数的方法很奇怪(我已经翻译了你的方法)。要在python中获得相同的结果,只需使用random.randint(1,100)
从1生成随机整数(我认为你不想在那里有0)到你喜欢的任何数字。
如果我从您的评论中正确理解,这就是您想要的:
def report(g=25):
array = []
for _ in range(g):
x = random.randint(1,10)
y = random.randint(1,10)
z = random.randint(1,10)
total = x+y+x
row = [x,y,z,total]
print(row)
array.append(row)
return array
result = report()
#prints all the rows while computing
>>> result #stores the "array"
[8, 4, 3, 20]
[10, 7, 4, 27]
[2, 4, 5, 8]
[8, 5, 8, 21]
[9, 7, 2, 25]
[2, 2, 3, 6]
[5, 8, 6, 18]
[8, 6, 1, 22]
[7, 6, 4, 20]
[7, 2, 10, 16]
[6, 5, 9, 17]
[3, 8, 8, 14]
[9, 1, 9, 19]
[1, 7, 7, 9]
[6, 6, 2, 18]
[9, 10, 1, 28]
[4, 6, 2, 14]
[6, 1, 6, 13]
[4, 1, 3, 9]
[5, 3, 5, 13]
[7, 5, 2, 19]
[9, 5, 7, 23]
[2, 5, 8, 9]
[3, 10, 4, 16]
[5, 6, 5, 16]