这是我的测试代码(Python 3.2)
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)
我无法弄清楚这意味着什么,或者我做错了什么。
答案 0 :(得分:5)
您告诉您的程序创建1到5050之间的随机数并将其存储在a中。之后你想获得1到5050-a之间的另一个随机数,现在如果a是5050,你会要求它生成1到0之间的随机数。
答案 1 :(得分:4)
简答:错误表示a
有时等于5050
。
长答案: randint()会返回一个位于提供范围内的随机数。如果上限小于下限,则函数失败,因为没有要处理的实际范围。
您的第一个电话会将1
和5050
(含)之间的随机数存储到a
。您的第二个电话会将1
和5050 - a
(包括)之间的随机数存储到b
。如果第一个调用返回5050
,则第二个调用将失败,因为提供的范围将无效。