2013-06-29 2 views
0

Я изучаю Python, и у меня есть небольшая проблема. Пришел этот короткий сценарий, увидев что-то подобное в курсе, который я принимаю. Я использовал «или» с «если» раньше с успехом (здесь это не очень много). По некоторым причинам я не могу получить эту работу:"или" условно в проблемах с Python

test = raw_input("It's the flying circus! Cool animals but which is the best?") 
x = test.lower() 

if x == "monkey" or "monkeys": 
    print "You're right, they are awesome!!" 
elif x != "monkey" or "monkeys": 
    print "I'm sorry, you're incorrect.", x[0].upper() + x[1:], "is not the right animal." 

Но это прекрасно работает:

test = raw_input("It's the flying circus! Cool animals but which is the best?") 
x = test.lower() 

if x == "monkey": 
    print "You're right, they are awesome!!" 
elif x != "monkey": 
    print "I'm sorry, you're incorrect.", x[0].upper() + x[1:], "is not the right animal." 

Вероятно, или условный здесь не подходит. Но я пробовал и т. Д. Мне бы хотелось, чтобы это принимало обезьяну или обезьян, а все остальное запускало elif.

ответ

11

булевых выражениями в большинстве языков программирования не следует тем же правилам грамматики английского языка. Вы должны сделать отдельные сравнения с каждой строкой, и соединить их с or:

if x == "monkey" or x == "monkeys": 
    print "You're right, they are awesome!!" 
else: 
    print "I'm sorry, you're incorrect.", x[0].upper() + x[1:], "is not the right animal." 

Вам не нужно делать тест на неправильном случай, просто используйте else. Но если вы сделали, это было бы:

elif x != "monkey" and x != "monkeys" 

Вы помните, узнав о deMorgan's Laws в логическом классе? Они объясняют, как инвертировать конъюнкцию или дизъюнкцию.

+0

Благодарю вас так много, что работает и потрясающая информация, помогает мне понять это намного лучше Теперь! – Interrupt

3

gkayling правильный. Ваш первый, если оператор возвращает истину, если:

х == «обезьяна»

или

«обезьян» оценивается как истина (это делает, так как это не пустая строка).

Если вы хотите, чтобы проверить, если х является одним из нескольких значений, то удобно использовать «в» оператора:

test = raw_input("It's the flying circus! Cool animals but which is the best?") 
x = test.lower() 

if x in ["monkey","monkeys"]: 
    print "You're right, they are awesome!!" 
else: 
    print "I'm sorry, you're incorrect.", x[0].upper() + x[1:], "is not the right 
+0

Очень круто, я даже не знал об этом в операторе. спасибо – Interrupt