2011-12-19 4 views
0

C'était mon code de test (Python 3,2)Que signifie cette erreur 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) 

Quand je lance le code, je reçois parfois cette erreur:

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) 

Je ne pouvais pas comprendre ce que cela signifie, ou ce que je a mal fait.

Répondre

5

Vous indiquez à votre programme de créer un nombre aléatoire compris entre 1 et 5050 et de le stocker dans un. Ensuite, vous voulez obtenir un autre nombre aléatoire entre 1 et 5050-a, maintenant, si un est 5050, vous demandez de générer un nombre aléatoire entre 1 et 0.

reference

4

Réponse courte: la erreur signifie que a est parfois égal à 5050.

Réponse longue:randint() renvoie un nombre aléatoire situé dans la plage fournie. Si la limite supérieure est inférieure à la borne inférieure, la fonction échoue car il n'y a pas de plage réelle à traiter.

Votre premier appel stocke un nombre aléatoire entre 1 et 5050 (inclus) dans a. Votre deuxième appel stocke un nombre aléatoire entre 1 et 5050 - a (inclus) dans b. Si le premier appel renvoie 5050, le deuxième appel échouera car la plage fournie sera invalide.

+0

Merci. Maintenant je me demande pourquoi je suis "ça" stupide. – blackened