Инкремент глобальных переменных через функции - PullRequest
1 голос
/ 31 марта 2020

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

a = 17
c = 43
m = 10000
seed = 13

def randomValue(a,m,c,seed):
    x1=(a*seed+c )%m
    seed = x1
    return (x1/m)

print(randomValue(a,m,c,seed))
print(randomValue(a,m,c,seed))

Ответы [ 2 ]

1 голос
/ 31 марта 2020

Операторы global сообщают python, что в области действия функции randomValue переменная seed ссылается на глобальную переменную, а не на локальную переменную в контексте функции randomValue .

Заменить:

def randomValue(a,m,c,seed):
    x1=(a*seed+c )%m
    seed = x1
    return (x1/m)

на:

def randomValue(a,m,c,seed):
    global seed
    x1=(a*seed+c )%m
    seed = x1
    return (x1/m)

Чтобы лучше понять global переменные учитывают следующий пример:

A = 10

def func1():
    print("\nThe value of A inside func1 is:", A)

def func2():
    A = 20
    print("\nThe value of A inside func2 is:", A)

def func3():
    global A
    A = 20
    print("\nThe value of A inside func3 is:", A)

func1()
print("The value of variable A after calling func1 is:", A)

func2()
print("The value of variable A after calling func2 is:", A)

func3()
print("The value of variable A after calling func3 is:", A)

Выход:

The value of A inside func1 is: 10
The value of variable A after calling func1 is: 10

The value of A inside func2 is: 20
The value of variable A after calling func2 is: 10

The value of A inside func3 is: 20
The value of variable A after calling func3 is: 20
0 голосов
/ 31 марта 2020

Попробуйте это с global

a = 17
c = 43
m = 10000
seed = 13


def randomValue():
    global a, m, c, seed
    x1 = (a * seed + c) % m
    seed = x1
    return (x1 / m)


print(randomValue())
print(randomValue())
...