2014-11-01 2 views
0

Привет это мой код:Как сделать программу различать 1-13 ВНУТРИ raw_input

def function(): 
    n1=1 
    n2=2 
    n3=3 
    n4=4 
    n5=5 
    n6=6 
    n7=7 
    n8=8 
    n9=9 
    n10=10 
    n11=11 
    n12=12 
    n13=13 
    n = raw_input("Number (with optional text): ") 
    if n1 or n2 or n3 or n4 or n5 or n6 or n7 or n8 or n9 in n: 
     print "Not what I want" 
    elif n12 or n13 in n: 
     print "Dis I want" 

function() 

Я пытаюсь сделать это условие raw_input признать, что я положил 13 (как он обнаруживает, что вход имеет 1 или 3 в сообщении), но я просто не могу (пожалуйста, я знаю, что могу сделать диапазон в списке, а затем он принимает, что я помещаю каждый номер отдельно, но это часть кода для другой программы I 'm, в котором пользователь может помещать ли слова, которые они хотят, до тех пор, пока эти числа вводятся, но тогда он не различает 1 или 11, например). Надеюсь, что вы можете помочь :)

+0

Я думаю, что есть логический вопрос здесь, от комментариев вы ответили на другие ответы, вы явно хотите, чтобы это «бла-бла-9-бла», чтобы проверить * * 9 ** находится в пределах 1-13, НО использование 'in' сделает это« blah blah 999 blah »передает состояние ** 9 **, ** 99 ** и *** 999 *** в течение 1- 13 как 'if" 9 "в n' уже вернул True. – Anzel

ответ

1
if '12' in n or '13' in n: 
    print 'OK' 
else: 
    print 'wrong' 

, если у вас есть несколько элементов в наборе разрешенных, то лучше использовать any() с пониманием:

if any(str(x) in n for x in range(1, 14)): 
    print 'found number from range 1-13 in this string' 
+0

+1. Но как быстрая заметка: в Python 3.x 'range (1337)' на самом деле даже _better_, чем 'set (range (1337))', потому что он эффективно выполняет '0 <= x <= 1337' вместо хэширования' x' и искать его. К сожалению, в 2.x, 'range (1337)' сравнивает 1337, а также делает 'xrange (1337)', поэтому этот ответ является наилучшим вариантом. – abarnert

+0

На самом деле оба набора диапазона python3 здесь мало смысла, потому что OP ищет входные данные, а не наоборот. Я просто понял это :) –

0

у вас есть 2 ошибки, во-первых, raw_input возвращает строки, вы нужно сделать это в int. Кроме того, как @karthikr указал на вашу логику, если немного отключиться.

n = raw_input("Number (with optional text): ") 
k = int(n) 
if k in [n1, n2, n3]: 
    print "Not what I want" 
elif k in [n12, n13]: 
    print "Dis I want" 
+0

Дело в том, что мне нужен вход, чтобы быть строкой, потому что я хочу, чтобы пользователь сказал, например: bla bla 13 bla; обнаруживает 13, а не 1 или 3. Thx для вашего времени –

0

Как OP явно хочет, чтобы захватить номер из raw_input, я думаю, что есть логическая проблема при использовании in в качестве условной проверки, например, вы хотите «бла-бла-9-бла», чтобы проверить, 9 находится в пределах 1 -13, НО использование in сделает этот «бла-бла-бла-999 бла» пройденным условием в течение 1-13 как if "9" in n уже возвращено True. Я не думаю, что это то, что ожидаемый результат OP.

Итак, я предлагаю использовать re, чтобы получить первый номер из raw_input и выполнить чек. Что-то вроде этого:

import re 


def check_number_ok(): 
    n1, n2, n3, ... = 1, 2, 3, ... # you can assign n1 to n13 like this too 
    n = raw_input("Number (with optional text): ") 
    check_number = re.compile('\d+') 
    check_result = check_number.search(n) 
    if check_result is not None: 
     first_number = int(check_result.group()) 
     if first_number == n1: 
      # do something here 
     elif first_number == n2: 
      # do another thing 
     # ... check if any others match 
     else: 
      print "Not what I want" 
      return 
      # do exit thing here so below code will not run 
     # if code runs here which means it passes the check 
     print "Dis I want" 
    else: 
     print "Please at least enter something with a number" 

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

check_number_ok() 
Number (with optional text): hello 2 world 
Dis I want 

check_number_ok() 
Number (with optional text): the cat is out 111 
Not what I want 
Смежные вопросы