[英]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.