Я запускаю следующий код для демонстрации центральной предельной теоремы в статистике.
Я использую два ползунка для изменения двух значений, относящихся к циклам, выполняющимся внутри функции обновления, которая вызывается при изменении значения любого из ползунков.
Я передаю val через функцию обновления.
def update(val):
trial = [0]*int(sTrials.val)
print(sTrials.val)
print(sMeasurements.val)
for i in range(int(sTrials.val)):
x = 0
for j in range(int(sMeasurements.val)):
x = x + random.randint(1, 6)
ПРИМЕЧАНИЕ. Я могу изменить «val» на любое имя переменной, потому что я не вызываю его в функция. Я читаю sTrias.val и sMeasurements.val из основной области программы. Я изменил имя переданной переменной с «val» на «none», чтобы доказать это самому себе.
Если я запускаю update (), код не будет работать. Я должен поставить переменную в круглых скобках для его запуска. Я понимаю, почему это так, потому что, когда я запускаю on_change (update)
sTrials.on_changed(update)
sMeasurements.on_changed(update)
, это передает новое значение sTrials в функцию обновления, означая, что ему нужна переменная для получения этого значения, даже хотя он не используется.
Мой вопрос состоит из трех частей:
Правильно ли мое понимание того, что происходит в отношении передачи значений? Для update (val) требуется val, чтобы получить значение, поступающее от on_change.
Правильно ли, что это значение не используется в функции. Я почти уверен, что значение не используется, но я хотел это подтвердить.
Я понимаю, что передача переменной в функцию без ее использования - плохая практика. Это кажется расточительным. Есть ли более эффективный способ написать эти строки относительно ползунков.
Ниже представлена вся программа:
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider
import random
# Slider Widget added to Central Limit Plot
bins = [0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 5.5, 6.0]
fig, ax = plt.subplots()
plt.subplots_adjust(bottom=0.2)
axTrials = plt.axes([0.25, 0.080, 0.65, 0.05])
axMeasurements = plt.axes([0.25, 0.025, 0.65, 0.05])
sTrials = Slider(axTrials, 'Trials', 1, 500, valinit = 250, valfmt = "%i")
sTrials.label.set_size(20)
sMeasurements = Slider(axMeasurements, 'Measurements', 1, 30, valinit = 15, valfmt = "%i")
sMeasurements.label.set_size(20)
def update(val):
trial = [0]*int(sTrials.val)
print(sTrials.val)
print(sMeasurements.val)
for i in range(int(sTrials.val)):
x = 0
for j in range(int(sMeasurements.val)):
x = x + random.randint(1, 6)
trial[i] = x/int(sMeasurements.val)
ax.cla()
ax.hist(trial, bins = bins, edgecolor = 'black')
ax.set_title('Central Limit Theorem with Dice', fontsize = 30)
ax.set_xlabel('Averages of' + ' ' + str(int(sMeasurements.val)) + ' ' + 'Roles', fontsize = 20, labelpad = 10)
ax.set_ylabel('Frequency of Means' + ' ' +'(' + str(int(sTrials.val)) + ' ' + 'Trials)', fontsize = 20)
plt.show()
sTrials.on_changed(update)
sMeasurements.on_changed(update)