繁体   English   中英

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

[英]How can I determine if user input is a valid hexadecimal number?

#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行更改为

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

该行将成功解析任何十六进制输入(例如,“ 0x123f”),并对无效输入(例如,“ hello”)抛出ValueError。

预计到达时间:根据您的评论,以下是您所需要的:

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语句。 最好的方法之一是使用正则表达式 ,这是解析字符串的非常有效的方法。

我正在从Python哲学的角度回答这个问题,因为您已经收到了不错的答案,其中一些涉及try: .. except

关于使用异常处理的Pythonic try: .. except是,似乎鼓励Python程序员使用它的方式,至少对我而言,这与其他语言的异常处理有所不同。

在Python中,建议您引发一个异常,可以显式地使用raise或更隐式地在try ..except的构造中。

不久前,我提出了一个有关如何处理.csv文件中的空整数值的问题时,我被鼓励继续尝试在try:..中分配给Python整数变量,除了,首先测试而不是测试查看该值是否为空。

答案接着说,不要费心测试,然后采取行动,使用异常处理,因为它更像Python。 使用try:..似乎也消耗更少的指令。

这种态度使我编写了比使用try:..我想的要多的异常处理程序,.except只保留给坏事发生的时间。

表达式string.translate(x,None,“ 0123456789abcdefABCDEF”)==''为真,如果x包含有效的十六进制字符,或者x为空字符串。(您需要“导入字符串”。)显然,这可以用于验证字符串仅包含来自任何给定集合的字符(或为null)。

研究正则表达式库。 或执行显式强制转换为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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM