2015-10-11 4 views
-1

Итак, я запускаю python 2.7, и я пытаюсь получить этот код для отображения соответствующего номера (chamod) с помощью ввода (cha), но он продолжает возвращать 0. Как мне получить чтобы получить соответствующий результат? Его следует распечатать 2.Функция Python продолжает возвращаться 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() 
+4

На самом деле это 'или' – cdonts

+0

@cdonts Спасибо! || отображается как недопустимый синтаксис. Что такое | значит, тогда? –

+0

'|' является * побитовым или *. См. [BitwiseOperators] (https://wiki.python.org/moin/BitwiseOperators). – cdonts

ответ

2

Вы должны использовать 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

Есть «поразрядный или». Каждый бит на выходе составляет 0, если соответствующий бит х и у есть 0, в противном случае это 1.

BitwiseOperators

2

Как уже другие люди сказали, вы должны использовать or вместо |. Однако то, что вы действительно должны сделать, это использовать правильный словарь вместо if-гия:

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 множества).

+0

При необходимости вы можете использовать последнюю функцию с некоторыми испытаниями диапазона, чтобы заставить ее вести себя как другой – holroy

Смежные вопросы