我想写一个检查语法是否正确的函数。我所纠结的语法部分是这样的:
< number >: := 2 | 3 | ... 我将其定义为:
def number(q):
letter = q.dequeue()
if int(letter) >= 2:
return
raise error("Number must be greater than 2") 其中输入是包含字符的Q(链接队列)。此函数的作用是检查输入中的整数是否大于2。整数可以是"2“、"100”、"12“等等。然而,我认为我的函数所做的是,它只查找输入中出现的第一个整数,这就是为什么它不能以它应该的方式工作。
它的工作方式:如果函数在输入的开头发现一个"0“(例如:H010),它应该会给出错误”数字必须大于2“。但对于其他情况,如果数字以不是"0“的任何数字开头,函数应该在决定数字是大于还是小于2之前读取输入的每个数字。
如果我写输入"H122",函数应该能够读取整数"122“,而不仅仅是第一个是"1”。我的问题是,我如何才能做到这一点?
发布于 2021-11-01 20:17:19
假设你得到了整个字符串,你可以这样做:
def validate(q):
word = q.dequeue()
if word[0] != 'H':
raise error("Does not start with H.")
if not word[1:].isdigit():
raise error("Value is not numeric.")
val = int(word[1:])
if val < 2:
raise error("Number must be greater than or equal to 2.")
return val发布于 2021-11-01 20:23:54
例如,我不能完全确定q是什么类型,或者字符串中的H代表什么,但这应该适用于问题中概述的情况:
def number(q):
nums = filter(str.isdigit, q)
try:
first_num = next(nums)
except StopIteration:
raise error('Enter a string with numbers')
if first_num == '0':
raise error("Number must be greater than 2")
return int(''.join([first_num, *nums]))
# raises errors
# number('abc')
# number('H012')
assert number('abc123') == 123
assert number('aaaaah123heeeellllpp45') == 12345
assert number('H122') == 122
assert number('2') == 2
assert number('100') == 100https://stackoverflow.com/questions/69802311
复制相似问题