如何确定用户输入是否为有效的十六进制数?

时间:2012-03-12 18:23:06

标签: python

#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'
编辑:我试过这个。当我输入十六进制值时,例如B2没有消息出现。

6 个答案:

答案 0 :(得分:7)

将第6行更改为

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

这一行会成功解析任何十六进制输入(例如,'0x123f')并在无效输入上抛出ValueError(例如'hello')。

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函数,这个结构将是最好的方法:

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语句。最好的方法之一是使用regular expressions,这是一种非常强大的解析字符串的方法。

答案 1 :(得分:0)

调查正则表达式库。或者显式转换为int然后捕获任何错误并相应地处理它们。

答案 2 :(得分:0)

十六进制字符串的唯一有效值为0-9, A-F。应该可以将这些值存储在列表/数组中,然后执行简单的包含调用。有点像这样:

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

答案 3 :(得分:0)

这是一种很好的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

答案 4 :(得分:0)

我从Python哲学的角度来回答这个问题,因为你已经收到了很好的答案,其中一些涉及try: .. except

关于使用异常处理try: .. except的Pythonic事情是Python程序员似乎被鼓励使用它的方式,至少对我来说,是偏离其他语言的异常处理。

在Python中,我们鼓励你提出一个异常,或者在try ...的结构中隐式使用raise或者更多。

当我在一段时间内提出一个关于如何处理.csv文件中的空整数值的问题时,我被鼓励在try:..中继续分配Python整数变量,而不是先测试测试以查看该值是否为空。

答案继续说不要费心去测试然后采取行动,使用异常处理,因为它更像是Pythonic。使用try:..除了似乎消耗更少的指令。

这种态度让我写了更多的异常处理,而不是我想用的尝试:..除了仅在坏事发生时保留。

答案 5 :(得分:0)

表达方式    string.translate(x,None," 0123456789abcdefABCDEF")=='' 是if如果x包含有效的十六进制字符,或者x是空字符串。(您需要"导入字符串"。)    显然,这可用于验证字符串是否只包含任何给定集合中的字符(或为空)。