首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Python中处理多位数字?

如何在Python中处理多位数字?
EN

Stack Overflow用户
提问于 2021-11-01 20:12:42
回答 2查看 66关注 0票数 0

我想写一个检查语法是否正确的函数。我所纠结的语法部分是这样的:

代码语言:javascript
复制
< number >: := 2 | 3 | ... 

我将其定义为:

代码语言:javascript
复制
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”。我的问题是,我如何才能做到这一点?

EN

回答 2

Stack Overflow用户

发布于 2021-11-01 20:17:19

假设你得到了整个字符串,你可以这样做:

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2021-11-01 20:23:54

例如,我不能完全确定q是什么类型,或者字符串中的H代表什么,但这应该适用于问题中概述的情况:

代码语言:javascript
复制
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') == 100
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69802311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档