2016-01-13 12 views
-2

Я кодирую игру, где, если пользователь предоставляет слово, игра использует это слово. В противном случае программа должна выбрать случайное слово из словаря. Словарь - это глобальный список. В настоящее время случайный случай по умолчанию всегда будет оцениваться до 0, но в любом случае правильно оценивается.Python - len (x) не оценивается в параметрах?

Код:

def game(i = random.randint(0, len(dictionary))): 
    print 'default random:', i 
    print 'random inside function:', random.randint(0, len(dictionary)) 

Выход:

default random: 0 
random inside function: 40403 

Может не Python оценивать Len внутри параметров?

+0

Это может быть, но вы должны поместить логику приложения внутри функции вместо ее подписи. –

+0

Возможный дубликат [«Наименьшее удивление» в Python: разрешимый аргумент по умолчанию] (http://stackoverflow.com/questions/1132941/least-astonishment-in-python-the-mutable-default-argument) –

+0

Нет, это не могу. Это по дизайну. Значения по умолчанию оцениваются во время определения функции, а не во время вызова функции. –

ответ

0

Если вы скажете генератору случайных чисел «выберите число от 0 до 100», и он выбирает 0, это не значит, что случайное число lib нарушено. Python оценил оператор в сигнатуре функции.

Все в коде выше работает так же, как вы ожидаете. http://dilbert.com/strip/2001-10-25

+0

Он дает 0 каждый раз, когда он запускается ... – SeeMeRaze

+0

Вы установили случайное семя перед кодом, который вы отправили (это гарантирует, что люди могут генерировать одну и ту же последовательность времени за раз)? или ваша длина словаря 0 при запуске? (Я предполагаю, что это последнее) (сделайте вторую переменную только len (dictionary), чтобы это доказать) – Back2Basics

+0

Я не уверен, что вы подразумеваете под случайным семенем перед кодом. Это первое, что называется. длина слова не равна 0, и если вы посмотрите в теле метода, я показал, что строка кода, включая len (dictionary), отлично работает внутри метода, просто не в параметре – SeeMeRaze