2015-12-15 3 views
-4

Я основной пользователь с питоном 2,7 .my запрос этопитона несколько условий одновременно

x = raw_input(...:) 

if len(x) != 6 

    re enter x 

if x(1:2) < 0 or x(1:2) > 20 

    re enter x 

if x(1:2) < 0 or x(1:2) > 20 

    re enter x 

Проблема с описанным выше способом является то, что он проверяет условия по одному. Например, если на третьем if я ввожу 4 цифры вместо 6, это все еще ошибка, но не отображает правильную ошибку.

Я попытался использовать цикл while, в котором присутствуют операторы if, но возникает такая же проблема: он обнаруживает ошибку, но не является правильным сообщением об ошибке.

Я бы очень признателен за любую помощь по этому вопросу. Я хочу, чтобы независимо от того, где я снова вхожу x, он должен проверять все if-утверждения.

+3

'х (1: 2)' не похож на правильный синтаксис команды .. . Я что-то упускаю? обычно мы можем дать вам лучшую помощь, если вы разместите фактический код, который мы можем запустить, и посмотрим поведение, которое вы описываете. – mgilson

+0

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

+0

им жаль, если я был немного тупым. – user5683544

ответ

2

С самого обманутого запроса я мог извлечь только 4 вещи;

Вы хотите:

  1. Входной х, что не должно быть повторно предложено до х удовлетворяет условиям.
  2. длина x должна отличаться от 6?
  3. если x означает 123456, вы хотите, чтобы 2 было больше 0 и меньше 20?

    while True: #This is a while loop. True could be replaced with a boolean. But for now, we will keep it True to run until break. 
        x=raw_input() #Get some input 
        if len(x) != 6 or 0<x[1:2]<20: #I used or because I don't know if you want both to be True, or 1 to be True, in order for the input to be invalid. Switch to and for both.  
         print "wrong please try again" 
         continue #Continue takes the code back to the beginning where we prompted for input. 
        else: #If the else is not satisfied... 
         break #Break out of the loop and stock asking for input. 
    

Несколько вещей, которые вы должны учиться на собственном коде:

x = raw_input(...:) 

if len(x)!=6 #This one I understand, but still, should use while loop. 

re enter x #Unneccesary if you switch to while loop and use keyword continue. 

if x(1:2)<0 or x(1:2)>20 #x(1:2) I am guessing you want to slice, you need [] not() 

re enter x #Unneccesary if you switch to while loop and use keyword continue. 

if x(1:2)<0 or x(1:2)>20 #Why do you even have this here? Same as line above 

re enter x #Unneccesary if you switch to while loop and use keyword continue. 

#Did you want your conditions to BOTH be True and reenter, or only 1? 
#This is important for boolean logic. 
#This is what determines if you will use AND or OR boolean operators. 
+1

Исправить вашу идентификацию. – tglaria

0

Просто используйте if...else код:

if condition_1: 
    ...do something... 
elif condition 2: 
    ...do something else... 
else: 
    ...do something else again... 

Вы должны проверить состояние после тех каждый раз пользователь вводит что-то.

Кроме того, вы можете использовать переменную для обнаружения для ввода Valir:

valid = False 
while valid == False: 
    valid = True 
    input = raw_input() 
    if error_condition: 
     valid = False 
     ...do_something... 
0

Использование any:

while True: 
    x = raw_input(prompt) 
    if any([len(x) != 6, x[1:2] < 0, x[1:2] > 20]): 
     continue 
    break 
Смежные вопросы