2014-11-18 2 views
-2

Я делаю небольшую интерактивную текстовую игру на питоне.
мне нужно проверить, если строка, от пользователя, является 1234 (число в строку, которая будет работать с int()) или foo (только строки, питон бы TraceBack, если я назвал int() на нем)Проверьте, является ли переменная строкой чисел типа «1234»

while(True): 
    IN = input("[Number] >> ") 
    if(isNumber(IN)): 
     break 
    else: 
     print("Please enter a number.") 
     continue 
IN = int(IN) #guaranteed to work at this point 
someFunction(IN) 

благодарим заранее!

+1

Вы пробовали что-нибудь или вы просто ищете людей, чтобы сделать это за вас? –

+1

Это действительно не хороший пример кода. Во-первых, это не легальный код (отсутствует двоеточие после 'def', отсутствует отступ после' def'). И это путано использовать '/ if' для' else', даже в комментарии. И 'standardin' не является встроенной функцией, так как мы знаем, что она запускает (это' str' или 'bytes'? Включает ли она завершающую новую строку? И так далее.) И большая часть кода кажется неуместной к проблеме. Кроме того, странное сочетание стилей заглавных букв, ненужных круглых скобок и т. Д. Не помогает. Пожалуйста, прочитайте [MCVE] (http://stackoverflow.com/help/mcve) в справке. – abarnert

ответ

2

Если вы хотите знать, если что-то «число в строку, один, который будет работать с Int()», вы делаете это просто вызывая int:

try: 
    i = int(myvar) 
    # It's an int, and we have the value if you want it 
except ValueError: 
    # It's not an int 

Это общий случай принцип EAFP: проще просить прощения, чем разрешения. Вместо того, чтобы пытаться угадать, не получится ли что-то, обычно проще просто попробовать его и посмотреть, не сработает ли он.

Это особенно рекомендуется в тех случаях, когда попытка угадать сложнее, чем кажется. Например, люди всегда предлагают использовать метод isdigit, но это не удается в ряде случаев. Например:

  • isdigit ложно отрицательных чисел, так как '-' символ не цифра.
  • isdigit неверно для чисел с завершающим пробелом (например, потому что вы не rstrip пинг-строки из вашего ввода).
  • isdigit подходит для сотен незападных цифр и цифр специальной формы, которые нельзя использовать с int.
  • int изменил свои правила, по крайней мере, дважды между Python 2.0 и 3.4 и всегда может измениться.

Вы, наверное, мог придумать сложное правило, которое было точно так же, как и «будет работать с межд()», как интерпретировать в какой-то конкретной версии Python, но почему, когда int, очевидно, гарантировано всегда делать то же самое, что и int?

+0

Отличное объяснение и +1 для упоминания EAFP. – ffledgling

+0

спасибо @abarnert также непреднамеренно объяснил «попробуй» для меня: D – Blacksilver

Смежные вопросы