【发布时间】:2018-10-15 12:55:22
【问题描述】:
所以我一直在使用我正在处理的一个简单的 python 脚本来处理这个问题。我要制作一个模拟彩票的小脚本,并编写了以下代码:
import random
def drawNumbers(nlist, n):
drawnlist = []
i = 0
while i < n:
if i == 0:
drawnlist.append(nlist[random.randint(0,33)])
i+=1
else:
r = random.randint(0,33)
dup = False
for x in drawnlist:
if x == r:
dup = True
if dup == False:
drawnlist.append(nlist[r])
i+=1
return drawnlist
def compList(drawlist, guesslist):
count = 0
for j in drawlist:
for h in guesslist:
if j == h:
count +=1
return count
def winnings(right, altright):
altcorrect = False
if altright > 0:
altcorrect = True
if right == 7:
return 2749455
elif right == 6:
if altcorrect:
return 102110
else:
return 3385
elif right == 5:
return 95
elif right == 4:
if altcorrect:
return 45
else:
return 0
a=0
tot = 0
while a <100:
numbers = []
i = 1
while i <= 34:
numbers.append(i)
i+=1
myGuess = []
i = 0
while i <7:
if i == 0:
myGuess.append(random.randint(1,34))
i+=1
else:
r = random.randint(1,34)
dup = False
for x in myGuess:
if x == r:
dup = True
if dup == False:
myGuess.append(r)
i+=1
tot += winnings(compList(drawNumbers(numbers,7),myGuess),compList(drawNumbers(numbers,3),myGuess))
a+=1
print(tot)
而且它似乎在一次迭代中运行良好,但是,当我像现在一样将 a 增加为 100 时,我收到一条错误消息,指出我无法将“int”对象和“@”相加987654324@" 对象。当我修改代码并打印“奖金”而不是每次迭代的总和时,看起来该函数有时会返回“无”而不是数字。但是,我似乎无法通过较少的迭代来重新创建它,所以我的问题是:这段代码是否相关,或者可能是通过“太快”调用函数它不会创建一个数字?我知道这个问题可能看起来很奇怪,但我对整体编程和 python 本身是新手,我不知道如何调试它。
【问题讨论】:
-
跟踪的完整错误是什么?
-
函数可以在这种情况下返回
None:elif right == 4: if altcorrect: return 45(没有else到内部if)。 -
winnings(4,-1)返回无。这是故意的吗? -
“winnings”函数被传递给正整数,所以 altright = 1 不是一个问题。在
elif right == 4: if altcorrect: return 45中添加else语句解决了这个问题,谢谢!
标签: python python-3.x