2016-01-28 1 views
-2
def checkclas(x): 
    while x == "A" or "B" or "C" is not True: 
     x = input("You have to choose one of the three classes: ").upper() 
     return x 

clas = input("which class are you in? ").upper() 
clas = checkclas(clas) 
print (clas) 

Я попытался решить проблему с этим кодом, но не смог. Я хочу, чтобы программа проверяла, допустим ли класс ввода, а затем распечатать его, но он продолжает работать в цикле while навсегда, хотя я ввожу правильный класс. Я думаю, что проблема связана с (или) утверждением. Если у кого-то есть решение, пожалуйста, помогите мне, это для моей оценки компьютерной науки, и код должен быть эффективным.Как использовать ярлык для оператора (или) в python

+0

'while x not in" ABC ":'. – Evert

+1

Возможный дубликат [Как проверить одну переменную на несколько значений?] (Http://stackoverflow.com/questions/15112125/how-do-i-test-one-variable-against-multiple-values) – user2357112

+0

Не то, чтобы ваш текущий оператор оценивается как: x == "A", или "B", или "C" не является True. По-вашему, это должно быть '(x ==" A "или x ==" B "или x ==" C ") не является True'. – Evert

ответ

1

Похоже, вам нужно if заявление, обернутый вокруг while заявления. См. Код ниже. (Обратите внимание, что пользовательский ввод должен быть в формате строка.)

def checkclas(x): 
    if x not in ("A", "B", "C"): 
     while x not in ("A", "B", "C"): 
      x = input("You have to choose one of the three classes:  ").upper() 
     return x 
    else: 
     return x 

clas = input("which class are you in? ").upper() 
clas = checkclas(clas) 
print (clas) 

EDIT:

Обращался избыточным если-то еще заявление и обеспечивает более естественный (и соответствующий - см here) способ для ввода строк.

def checkclas(x): 
    while x not in ("A", "B", "C"): 
     x = raw_input("You have to choose one of the three classes: ").upper() 
    return x 

clas = raw_input("which class are you in? ").upper() 
clas = checkclas(clas) 
print (clas) 
+1

Здесь есть избыточность. Вы проверяете 'x не в (« A »,« B »,« C »)' дважды. Поэтому, если бы OP был добавлен в «D», ему пришлось бы добавить его в два места вместо одного. – AustinWBryan

+0

Спасибо @ Имад Али, ваш код помог мне сделать мой код более эффективным. Я просто удалил инструкции if и else, потому что в этом не было необходимости. –

+0

@AustinWBryan - Спасибо, что обратились к избыточности. –

-2

Если у вас есть контроль над определениями A, B и C, я рекомендую использовать Python Inheritance.

class MyBaseObject(object): 
    pass 

class A(MyBaseObject): 
    pass 

class B(MyBaseObject): 
    pass 

class C(MyBaseObject): 
    pass 

... 
x = A() 
if isinstance(x, MyBaseObject): 
    ... 
+0

Это полностью перебор. – AustinWBryan

+0

@AustinWBryan Я предложил это, потому что OP сказал, что вход выбирался между классами, похоже, что OP не говорил о [classes] (https://docs.python.org/2/tutorial/classes.html), а скорее о набор строк. – ThorSummoner

+0

Мой плохой. Я пытался запретить вас, но он сказал, что мой голос заблокирован, если это сообщение не отредактировано. Но да, его «классная» идея смутила меня, читая еще одну запись. Он должен был быть более ясным. – AustinWBryan