Python脚本“生成”“无”值

2024-09-30 16:23:38 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我在一个简单的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”对象和一个“None”对象相加。当我修改代码并打印“winnings”而不是每次迭代的总和时,函数有时会返回“None”而不是数字。然而,我似乎不能用较少的迭代次数来重新创建它,所以我的问题是:这段代码是相关的,还是调用函数“太快”不会创建一个数字?我知道这个问题看起来很奇怪,但我对整个编程和python本身都是新手,我不知道如何调试这个问题。你知道吗


Tags: inrightfalseforreturnifrandomelse
2条回答

winnings函数可以返回None,因为内部if没有else。在这种情况下,它不会触发最后的else,并默认返回None。要修复它,请在if中添加一个else,或者删除winnings中的最后一个else

def winnings(right, altright):
    altcorrect = False
    # ...
    elif right == 4:
        if altcorrect:
            return 45
        # maybe add an else here?

    # or if you get to this point, _always_ return 0
    return 0

winnings函数有时返回None。因为有些案子抓不到。如果Python到达函数末尾时没有命中任何其他返回,则返回None。你知道吗

具体来说,如果right为4,altright为0,则不会捕获任何if情况,并且函数返回None。你知道吗

相关问题 更多 >