В Python, есть ли в любом случае переменная случайное число каждый раз? - PullRequest
1 голос
/ 06 января 2011

В основном у меня есть это:

import random
variable1 = random.randint(13, 19)

И в основном это назначает переменной1 случайное число от 13 до 19. Отлично.

Но я хочу назначить этой переменной случайное число от 13 до 19 при каждом вызове. Могу ли я в любом случае сделать это?

Если я не достаточно ясен, вот пример:

import random
variable1 = random.randint(13, 19)
print(variable1)
print(variable1)
print(variable1)

И вывод, который я хочу, будет выглядеть примерно так:

./script.py
15
19
13

Так что да, в любом случае я мог бы сделать это на питоне? (Более конкретно, python3. Но ответ, вероятно, будет аналогичен ответу на python2)

Ответы [ 8 ]

4 голосов
/ 06 января 2011

Это близко к тому, что вы хотите

>>> import random
>>> variable1 = lambda: random.randint(13, 19)
>>> print(variable1())
18
>>> print(variable1())
15
>>> print(variable1())
17
>>> 
4 голосов
/ 06 января 2011

Возможно, глупый вопрос, но почему бы просто не использовать функцию вместо переменной?

Или, возможно, более встраиваемый в вашу переменную парадигму, почему бы не использовать метод для объекта. Затем объект может быть передан как переменная, и метод возвращает новое случайное число.

3 голосов
/ 06 января 2011

В этом конкретном примере, есть довольно глупый способ сделать это print неявно преобразует свой аргумент в строку. Вы можете перегрузить эту функциональность:

class randomizer():
    def __str__(self):
        return str(random.randint(13, 19))

variable1 = randomizer()
print(variable1)
print(variable1)
print(variable1)
2 голосов
/ 06 января 2011

Вы упоминаете слово "призвал", и таким образом, я думаю, вы ответили на свой вопрос. Это точно работа функции или метода.

Переменная - это просто ссылка на объект. Вы можете сохранить объект в вашей переменной, который переопределяет метод to string для генерации случайного числа, но это все еще метод.

В конечном итоге то, о чем вы просите, запутало бы то, что на самом деле происходит под капотом, и в результате могло бы создать менее поддерживаемый код, imho.


Когда вы делаете variable1 = random.randint(13, 19), variable1 содержит неизменный объект «число 13» (или некоторое другое число). По определению это не может измениться, не становясь другим объектом. Вместо этого вы можете заполнить вашу переменную вышеупомянутым изменяемым объектом, позволяя ей изменять свое «случайное число». Или вы можете просто напрямую вызвать функцию.

Это просто вопрос простоты.

1 голос
/ 06 января 2011

использование:

alist = range(13,20)  
random.shuffle(alist)  

Теперь вы можете пройти через это в случайном порядке

0 голосов
/ 06 января 2011

Как насчет использования random.sample для вашей задачи?Это Chooses k unique random elements from a population sequence.

import random
v1,v2,v3 = random.sample(range(13,20),3)
print v1,v2,v3

Конечно, я дал это для 3 переменных, вы можете использовать его для n переменных.

0 голосов
/ 06 января 2011

Возможно, я не правильно понимаю вопрос, но не могли бы вы просто сделать:

print(random.randint(13, 19))
0 голосов
/ 06 января 2011

Почему бы вообще не пропустить переменную? Вы также можете использовать встроенную функцию: print(random.randint(13, 19) + 1).

Попробуйте и посмотрите, подходит ли вам это;)

print(random.randint(13, 19))
print(random.randint(13, 19))
print(random.randint(13, 19))
print(random.randint(13, 19))
print(random.randint(13, 19))

Я не вижу других возможностей, так что удачи!

...