Python函数不断返回0

2024-05-04 10:24:16 发布

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

所以我运行的是Python2.7,我一直在尝试让这段代码用输入(cha)显示相应的数字(chamod),但它一直返回0。如何得到相应的输出?应该是打印出来的。你知道吗

def charismamod(cha):
    chamod = 0
    if cha == 1:
        chamod = -5
    elif cha == 2 | cha == 3:
        chamod = -4
    elif cha == 4 | cha == 5:
        chamod = -3
    elif cha == 6 | cha == 7:
        chamod = -2
    elif cha == 8 | cha == 9:
        chamod = -1
    elif cha == 10 | cha == 11:
        chamod = 0
    elif cha == 12 | cha == 13:
        chamod = 1
    elif cha == 14 | cha == 15:
        chamod = 2
    elif cha == 16 | cha == 17:
        chamod = 3
    elif cha == 18 | cha == 19:
        chamod = 4
    elif cha == 20:
        chamod = 5
    return chamod
def barbarian():
    cha = 14
    bchamod = charismamod(cha)
    print bchamod
barbarian()

Tags: 代码returnifdef数字printelifcha
3条回答

必须使用or而不是|

def charismamod(cha):
    chamod = 0
    if cha == 1:
        chamod = -5
    elif cha == 2 or cha == 3:
        chamod = -4
    elif cha == 4 or cha == 5:
        chamod = -3
    elif cha == 6 or cha == 7:
        chamod = -2
    elif cha == 8 or cha == 9:
        chamod = -1
    elif cha == 10 or cha == 11:
        chamod = 0
    elif cha == 12 or cha == 13:
        chamod = 1
    elif cha == 14 or cha == 15:
        chamod = 2
    elif cha == 16 or cha == 17:
        chamod = 3
    elif cha == 18 or cha == 19:
        chamod = 4
    elif cha == 20:
        chamod = 5
    return chamod
def barbarian():
    cha = 14
    bchamod = charismamod(cha)
    print bchamod
barbarian()

|是位运算符。必须使用or||。你知道吗

x | y

Does a "bitwise or". Each bit of the output is 0 if the corresponding bit of x AND of y is 0, otherwise it's 1.

BitwiseOperators

使用or。你知道吗

你所做的是“按位或”,它的工作方式与你想做的不同。 您可以在这里快速阅读摘要:http://www.tutorialspoint.com/python/bitwise_operators_example.htm

正如其他人已经提到的,您应该使用or而不是|。然而,你真正应该做的是使用一本合适的词典,而不是:

mapping = {
    1: -5,
    2: -4,
    3: -4,
    4: -3,
    5: -3,
    6: -2,
    7: -2,
    8: -1,
    9: -1,
    10: 0,
    11: 0,
    12: 1,
    13: 1,
    14: 2,
    15: 2,
    16: 3,
    17: 3,
    18: 4,
    19: 4,
    20: 5,
}

def charismamod(cha):
    return mapping.get(cha, 0)

这使它更容易阅读和改变未来。你知道吗

你也可以玩数学:

def charismamod(cha):
    return (cha / 2) - 5

它为您提供了最简洁、最易于理解的函数(具有一点不同的功能,因为它对1, ..., 20集之外的任何对象都有不同的工作方式)。你知道吗

相关问题 更多 >