Как определить, является ли ввод пользователем допустимым шестнадцатеричным числом?

#Hex Check def Check(): while False: for char in UserInput: if char not in Valid: print ('That is an invalid hex value.') print('That is a valid hex value.') return Check UserInput=input('Enter a hex number: ') Valid='1''2''3''4''5''6''7''8''9''10''A''B''C''D''E''F' 

EDIT: Я пробовал это. Когда я вводим шестнадцатеричное значение, например B2, сообщение не появляется.

  • Преобразование списка кортежей в простой плоский список
  • что означает «decimal.getcontext (). copy ()» означает
  • Получение моих собственных данных через FaceBook API
  • Заказ строковых представлений целых чисел
  • App Engine: Является ли time.sleep () подсчетом к моим квотам?
  • множественный импорт python для общего модуля
  • Печать {и} с синтаксисом нового формата
  • Можно получить доступ к сайтам AppEngine SDK через локальный ip-адрес, когда localhost работает нормально и MacOSX
  • 6 Solutions collect form web for “Как определить, является ли ввод пользователем допустимым шестнадцатеричным числом?”

    Измените строку 6 на

     Hex=int(input('Enter a hex number: '), 16) 

    Эта строка успешно проанализировала бы любой шестнадцатеричный ввод (например, «0x123f») и выбросила значение ValueError на недопустимый вход (например, «привет»).

    ETA: основываясь на ваших комментариях, вам необходимо следующее:

     user_input = input('Enter a hex number: ') try: hexval = int(user_input, 16) print 'That is a valid hex value.' except: print 'That is an invalid hex value.' 

    ETA: Если вам действительно Check функция Check , эта структура будет лучшим способом сделать это:

     import re def Check(s): """Check if a string is a valid hexadecimal number""" # code for checking if it is a valid hex number here user_input = raw_input("Enter a hex number: ") if Check(user_input): print 'That is a valid hex value.' else: print 'That is an invalid hex value.' 

    Поскольку это вопрос домашней работы, я не собираюсь закончить ответ – просто знайте, что функция Check должна возвращать True, если строка является допустимым шестнадцатеричным выражением или False, если строка не указана.

    Есть много идей среди ответов каждого о том, как это сделать, и вы действительно можете использовать оператор try / except, как я делаю выше. Один из лучших способов сделать это – использовать регулярные выражения , которые являются очень мощным способом анализа строк.

    Исследуйте библиотеку регулярных выражений. Или сделайте явное приведение в int, затем поймайте любые ошибки и обработайте их соответственно.

    Единственными допустимыми значениями для шестнадцатеричных строк являются 0-9, AF . Должно быть возможно сохранить эти значения в списке / массиве, а затем сделать простой содержащий вызов. Что-то вроде этого:

      for char in userInput: if not char in validTokens: print 'invalid hex value' 

    Вот хороший способ Python проверить ваш ввод для действительного шестнадцатеричного номера.

     def Check(): while not Valid: try: Hex=int(raw_input('Enter a hex number: '), 16) print('That is valid.') return True except ValueError: print('That is an invalid entry.') return False 

    Я отвечаю на этот вопрос с точки зрения философии Python, потому что вы уже получили хорошие ответы, некоторые из которых связаны с try: .. except .

    Питоническая вещь об использовании обработки исключений try: .. except того, как программисты Python, по-видимому, поощряются к использованию, это, по крайней мере для меня, уход от обработки исключений на других языках.

    В Python вам предлагается создать исключение, явно используя рейз или более неявно внутри конструкции try .. except.

    Когда я задал вопрос о том, как обращаться с нулевыми целыми значениями в CSV-файле, мне было предложено продолжить назначение целочисленной переменной Python в try: .. за исключением того, что вместо тестирования сначала проверить см., если значение было null.

    Ответ продолжался, чтобы не утруждать себя проверкой, а затем принять меры, использовать обработку исключений, потому что это больше Pythonic. Использование try: .. кроме того, как оказалось, потребляет меньше инструкций.

    Это отношение заставило меня написать больше обработки исключений, чем я думал бы с помощью try: .. за исключением был зарезервирован только для тех случаев, когда происходят плохие вещи.

    Выражение string.translate (x, None, "0123456789abcdefABCDEF") == '' равно True, если x содержит допустимые шестнадцатеричные символы, или x – это нулевая строка. (Вам нужно «импортировать строку».) Очевидно, это можно использовать для подтвердите, что строка содержит только символы из любого заданного набора (или равна нулю).

    Python - лучший язык программирования в мире.