2011-12-19 2 views
0

Это был мой тестовый код (Python 3.2)Что означает эта ошибка Python?

import random 

def singleMatch(): 
    a = random.randint(1, 5050) 
    b = random.randint(1, 5050-a) 
    c = 5050-a-b 

    h = [a, b, c] 
    print(h) 
    computer = [841, 842, 3367] 

    score = 0 

    for i, j in zip(computer, h): 
     if i > j: 
      score = score + 1 

    if score == 2: 
     return 1 
    else: 
     return 0 



def match(n): 
    matchScore = 0 
    for i in range(n): 
     s = singleMatch() 
     matchScore = matchScore + s 
    return matchScore 

x = match(10000) 
print(x) 

Когда я запускаю код, иногда я получаю эту ошибку:

Traceback (most recent call last): 
    File "D:\Ercan\blotto.py", line 32, in <module> 
    x = match(10000) 
    File "D:\Ercan\blotto.py", line 28, in match 
    s = singleMatch() 
    File "D:\Ercan\blotto.py", line 5, in singleMatch 
    b = random.randint(1, 5050-a) 
    File "C:\Python32\lib\random.py", line 215, in randint 
    return self.randrange(a, b+1) 
    File "C:\Python32\lib\random.py", line 193, in randrange 
    raise ValueError("empty range for randrange() (%d,%d, %d)" % (istart, istop, width)) 
ValueError: empty range for randrange() (1,1, 0) 

Я не мог понять, что это значит, и что я сделал не так.

ответ

5

Вы сообщаете своей программе, чтобы создать случайное число от 1 до 5050 и сохранить его в. После этого вы хотите, чтобы получить другое случайное число между 1 и 5050-а, теперь, если это 5050, вы бы попросить его, чтобы сгенерировать случайное число между 1 и 0.

reference

4

Короткий ответ: на ошибка означает, что a иногда равен 5050.

Длинный ответ:randint() возвращает случайное число, лежащее в поставляемом диапазоне. Если верхняя граница меньше нижней границы, то функция не работает, потому что нет реального диапазона для обработки.

Ваш первый звонок хранит случайное число между 1 и 5050 (включительно) в a. Ваш второй вызов хранит случайное число между 1 и 5050 - a (включительно) в b. Если первый вызов возвращает 5050, то второй вызов не будет выполнен, потому что указанный диапазон будет недействительным.

+0

Спасибо. Теперь я удивляюсь, почему я «тот» глупый. – blackened

Смежные вопросы