将VBA数组转换为Python

时间:2016-09-02 12:01:16

标签: arrays list python-3.x

使用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

谢谢,

汤姆

1 个答案:

答案 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]