2017-09-13 15 views
0

if文と条件文に関する私の構文に問題があります。私は、2つのパラメータに応じて目覚まし時計を設定する時間を返す関数を何日か、その人が休暇中かどうかを返す関数を作成しようとしています。私の日は、0 =日曜日、1 =月曜日... 6 =土曜日としてエンコードされます。この関数は、休暇ではない平日には'7:00'、休暇ではない平日には'10:00'、休暇ではない間に週末に返す必要があり、最後に休暇ではなく週末に'off'を返します。これまでのところ私は次のコードを持っていますが、'off'の代わりにprint(alarm_clock(0, True))という関数を呼び出すと、'10:00'と表示されます。どんな助けもありがたい。おかげPythonの条件文とif文

def alarm_clock(day, on_vacation): 
    """Alarm clock function""" 

    if (int(day) < 6 and int(day) != 0) and not on_vacation: 
     return('7:00') 

    elif (int(day) == 6 or int(day) == 0) and not on_vacation: 
     return('10:00') 

    elif (int(day) < 6 or int(day) != 0) and on_vacation: 
     return('10:00') 

    elif (int(day) == 6 or int(day) == 0) and on_vacation: 
     return('off') 
+2

3番目のelif文で、 'または'を 'に変更し、 –

答えて

0

第三状態でandに変更or:3番目のステートメントで

def alarm_clock(day, on_vacation): 
    """Alarm clock function""" 

    if (int(day) < 6 and int(day) != 0) and not on_vacation: 
     return('7:00') 

    elif (int(day) == 6 or int(day) == 0) and not on_vacation: 
     return('10:00') 

    elif (int(day) < 6 and int(day) != 0) and on_vacation: 
     return('10:00') 

    elif (int(day) == 6 or int(day) == 0) and on_vacation: 
     return('off') 
0

、またはべきであると。その日は、それはまた、0日目

だったにもかかわらず、6個未満であったため print(alarm_clock(0, True))は、3番目のステートメントで捕まるた
def alarm_clock(day, on_vacation): 
    """Alarm clock function""" 

    if (int(day) < 6 and int(day) != 0) and not on_vacation: 
     return('7:00') 

    elif (int(day) == 6 or int(day) == 0) and not on_vacation: 
     return('10:00') 

    elif (int(day) < 6 and int(day) != 0) and on_vacation: 
     return('10:00') 

    elif (int(day) == 6 or int(day) == 0) and on_vacation: 
     return('off') 
1

int(day) < 6 or int(day) != 00を含む)すべての値がいずれかであるため、常に、dayの任意の値のtrueになります6未満であるか、または6より小さくない場合、それは0と等しくない。

この種のものを書くための明確な方法が互いに素なもののために連鎖範囲について比較またはタプルメンバーシップを使用することです:

def alarm_clock(day, on_vacation): 
    """Alarm clock function""" 
    day = int(day) 
    if 0 != day < 6 and not on_vacation: 
     return '7:00' 

    elif day in (6, 0) and not on_vacation: 
     return '10:00' 

    elif 0 != day < 6 and on_vacation: 
     return '10:00' 

    elif day in (6, 0) and on_vacation: 
     return 'off' 

も共通int(day)を抽出し、スプリアス括弧を削除することになりビットクリーナーをコードします。