【问题标题】:Python script "generating" "None" valuesPython 脚本“生成”“无”值
【发布时间】: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 本身是新手,我不知道如何调试它。

【问题讨论】:

  • 跟踪的完整错误是什么?
  • 函数可以在这种情况下返回Noneelif 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


【解决方案1】:

winnings 函数可以返回None,因为内部if 没有else。在这种情况下,它不会触发最终的else,默认返回None。要修复它,请将else 添加到if,或者只删除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

【讨论】:

  • 如果解决了问题,请在内部添加else,谢谢!
【解决方案2】:

您的奖金函数有时会返回 None。这是因为它没有抓住一些案例。如果 Python 到达函数的末尾而没有遇到任何其他返回,则返回 None。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-20
    • 2011-12-20
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    • 2013-12-14
    • 1970-01-01
    • 2011-09-22
    相关资源
    最近更新 更多