#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没有消息出现。
答案 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是空字符串。(您需要"导入字符串"。) 显然,这可用于验证字符串是否只包含任何给定集合中的字符(或为空)。