Я новичок в Python 3.0 и изо всех сил пытаюсь найти решение следующей проблемы. Это шаг к симуляционному упражнению на доске Гальтона.

  1. У меня есть массив numpy, длина которого автоматически генерируется на основе другой переменной
  2. Затем я генерирую набор чисел, добавляю их в список и суммирую.
  3. Наконец, я хотел бы добавить счетчик +1 к индексу массива, который равен числу в сумме на шаге 2.
import numpy as np
import random as rnd

zufall = rnd.randint(0,1)
zufall_list = []
hoehe = int(input("Höhe? "))
behaelter = np.zeros(hoehe+1, int)


for i in range(hoehe):
    zufall_list.append(rnd.randint(0,1))

    for j in str(sum(zufall_list)):
        behaelter[j] += 1
print(zufall_list)

Я получаю сообщение об ошибке IndexError: only integers, slices (:), ellipsis (...), numpy.newaxis (None) and integer or boolean arrays are valid indices и не понимаю, почему это так.

0
Nikolay Lazarov 26 Янв 2022 в 16:55
Вы индексируете behaelter со строкой. Не любой из действительных, которые вы перечислили выше.
 – 
12944qwerty
26 Янв 2022 в 17:01
Во внутреннем цикле for вы конвертируете сумму zufall_list в str, вероятно, чтобы вы могли перебирать отдельные цифры результирующего числа. Однако это все еще ул. Попробуйте behaelter[int(j)] += 1
 – 
jaaq
26 Янв 2022 в 17:01

2 ответа

Лучший ответ
for j in str(sum(zufall_list)):
    behaelter[j] += 1

В этой строке вы используете строку str(sum(...)), как индекс. Хотя строка повторяема, ее нельзя использовать в качестве индекса.

В вашем случае я бы сделал behaelter[int(j)], чтобы изменить 'j' на целое число, чтобы вы могли использовать его в качестве индекса.

0
ajay_110125 26 Янв 2022 в 17:11
Спасибо! Это сработало :)
 – 
Nikolay Lazarov
26 Янв 2022 в 17:17

Вместо того

for j in str(sum(zufall_list)):
    behaelter[j] += 1

Использовать

for j in str(sum(zufall_list)):
    behaelter[int(j)] += 1
0
Abdullah Ansari 26 Янв 2022 в 17:19