объект 'module' не вызывается при вызове значений в словаре - PullRequest
0 голосов
/ 14 января 2020

когда я вызываю значения в словаре d, я получаю такую ​​ошибку: 'module' object is not callable так я использую значения в d:

d = {'c1': (10,20), 'c2': (30,20), 'c3': (10,30), 'c4': (10,40)}

import math
import random

because there are two values for one key, I just need one random value of them, so I use random.choice, then I get the error:
'builtin_function_or_method' object has no attribute 'choice'
can somebody help me with this part?

time1=-random.choice(d['c1'])* math.log(1.0 - random())
time2=-random.choice(d['c2'])* math.log(1.0 - random())
time3=-random.choice(d['c3'])* math.log(1.0 - random())
time4=-random.choice(d['c4'])* math.log(1.0 - random())

Обновление: мне просто нужно изменить random () to random.random () для расчета времени1

Ответы [ 2 ]

1 голос
/ 14 января 2020

Это все о random, который является модулем. Вы не можете вызвать модуль, но функцию, предоставленную в модуле. На мой взгляд, вам нужно заменить random() на random.randint(a, b). В любом случае, вы можете найти все поддерживаемые функции здесь из документации.

0 голосов
/ 14 января 2020

Это потому, что в модуле есть random функция с именем random. Когда вы вызываете import random, вы делаете код random видимым для кода, но не для функции random.

Попробуйте это (строка 4 имеет значение):

>>> d = {'c1': 10, 'c2': 20, 'c3': 40, 'c4': 8}
>>> 
>>> import math
>>> from random import random
>>> 
>>> time1=-d['c1']* math.log(1.0 - random())
>>> time2=-d['c2']* math.log(1.0 - random())
>>> time3=-d['c3']* math.log(1.0 - random())
>>> time4=-d['c4']* math.log(1.0 - random())
>>> time1
16.376979481808323

I также предлагает прочитать больше о модулях: https://docs.python.org/3/tutorial/modules.html

и модель исполнения: https://docs.python.org/3/reference/executionmodel.html

...