2016-10-10 3 views
-2

Я пишу код для индекса холода ветра для задания для колледжа. Профессор хочет, чтобы мы предотвращали сбой кода при вводе пользователем пробелов или букв без использования Try/Except Blocks. (Он ссылается только на строковые методы).С помощью String вместо Try/Except, чтобы предотвратить сбой - как?

Вместо сбоя должно быть указано сообщение об ошибке, например. («недопустимый ввод, только цифры»)

Я попытался использовать string.isdigit и string.isnumeric, но он не примет отрицательные градусы как целые числа.

Любые предложения? (код ниже) Будет ли другое заявление «если» работать?

This is the code so far.

+0

Может удалить '-' перед' .isdigit' ... 'userstr.replace ('-', '') isdigit()' – beroe

+0

. Вы не должны действительно редактировать вопрос, как этот знак, как он ответил, если он будет решен, а затем задать новый вопрос. Если вы продолжаете редактировать и меняете то, что задается, это забивает сайт. Кроме того, людям не нравится «живое ведение блога» в вашей домашней работе, и они склонны к голосу. – beroe

+0

Что сказал @beroe. Функция редактирования должна использоваться для уточнения вашего вопроса и добавления дополнительных сведений. Пожалуйста, не злоупотребляйте им, чтобы задать другой вопрос. На данный момент я отменил редактирование. – Kos

ответ

0

Заменить знаки препинания:

if temperature.replace('-','').replace('.','').isnumeric(): 
+0

Кто-то проголосовал за мой пост, поэтому я не мог задать отдельный вопрос ... как вы думаете, вы могли бы ответить на него? –

0

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

import re 
import sys 
while True: 
    print("Temperature") 
    s = sys.stdin.readline().rstrip('\n') 
    if re.match("^-?[0-9]+(\\.[0-9]+)?$", s) is None: 
     print("Doesn't look like a number") 
     continue 
    if '.' in s: 
     print("Number will be truncated to integer.") 
    temp = int(float(s)) 
    if not (-50 <= temp <= 5): 
     print("Out of range") 
     continue 
    break 
+0

Спасибо за быстрый ответ, но мой вопрос задается без использования блоков Try/Except. –

+0

Угадайте, что это было слишком быстро. Вы можете использовать регулярные выражения вместо string.isnumeric(). "^ -? [0-9] + (\\. [0-9] +)? $" Должен делать трюк, он также позволяет десятичную точку. –

+0

Я обновил свой вопрос, чтобы быть более конкретным. Он не должен принимать нецифровые символы, вместо этого выводит сообщение об ошибке. Другое утверждение «если» должно быть правильно использовано? –