2016-09-02 4 views
-1

ИСПОЛЬЗОВАНИЕ IDLE/Python 3.5.1Перевести VBA массив в Python

Могу ли я прежде всего начать с того, я достаточно опытный программист в VBA, но я на 2-й день Python. Уверяю вас, я провел много поисков по этому вопросу, но 30 или около того документов, которые я прочитал, похоже, не объясняют мою проблему.

Могу ли я также запросить, чтобы все полученные ответы были правильно отформатированным кодом для Python 3.5.1, а не полезными указателями на другую документацию или ссылки?

Проблема

Я бегу отчет и вывод результатов, как я иду. Мне нужно сохранить результаты (предположительно в массиве) во время этого, чтобы потом я мог ссылаться на них. Отчет (и заполнение массива) может повторяться несколько раз, поэтому, пожалуйста, помните об этом, если использовать при создании массива такие понятия, как «добавить». Массив имеет размеры [25,4] - максимум 25 записей с четырьмя элементами в каждом.

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

Как правило, упорядоченные последовательности объектов обрабатываются в питона 'list's. 'array' имеют более конкретные, менее распространенные случаи использования. [Вы уверены, что хотите массивы?] (Http://stackoverflow.com/questions/176011/python-list-vs-array-when-to-use) – glibdud

+0

Мне не нужны массивы, если списки являются нормой в Python. Мне просто нужно знать, как сделать эквивалент. –

ответ

0

Я не уверен, что я получил ваш вопрос правильно ... Если вы хотите создать массив (список ıA лучше термин в данном случае) в размере [ 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]] 

, если вы хотите, чтобы показать, что «массив должен быть способны восстанавливать с нуля, а не создаются только один раз» (почему ее uld вам это нужно?)

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] 
+0

Вы должны, вероятно, отметить, что, хотя вы используете терминологию афера «array», вы фактически имеете дело со списками. [Массивы] (https://docs.python.org/3/library/array.html) существуют в питоне и являются другим животным. – glibdud

+0

Парень выразил желание избежать импорта массива, поэтому «список» - единственный вариант, который я думаю. –

+0

Я согласен, но продолжаю сжимать термины в вашем ответе, просто создаст больше путаницы. – glibdud

Смежные вопросы