从元组中获取第一百个整数(python)

从元组中获取第一百个整数(python),python,tuples,Python,Tuples,我想从元组中得到第一百个整数。问题是: 实现一个函数get\u第一百(a,b,c) 它接受3个正整数作为参数,并在相应的第一百位返回一个数字元组 如果给定的整数小于100,则其第一百个位置可视为0。如果输入无效,则为该整数返回None get\u第一百(123450980633)应该返回(2,5,6) 而get\u第一百个(4024,812713)应该返回(0,0,7) 这就是我到目前为止所做的: def get_hundredth(a, b, c): a, b, c = str(a)

我想从元组中得到第一百个整数。问题是:

实现一个函数
get\u第一百(a,b,c)
它接受3个正整数作为参数,并在相应的第一百位返回一个数字元组

如果给定的整数小于100,则其第一百个位置可视为0。如果输入无效,则为该整数返回
None

get\u第一百(123450980633)
应该返回
(2,5,6)
get\u第一百个(4024,812713)
应该返回
(0,0,7)

这就是我到目前为止所做的:

def get_hundredth(a, b, c):

    a, b, c = str(a), str(b), str(c)

    return int(a[-3:-2]), int(b[-3:-2]), int(c[-3:-2])

如果小于100,如何将其设置为0?

这将返回一个整数的所需值:

def _get_hundreds(a):
    return (a % 1000) / 100
丢弃除最后3位以外的所有数字(
%1000
),然后获取HUDRED(
/100
)。 对于3个整数:

def get_hundreds(a, b, c):
    return map(_get_hundreds, (a, b, c))

如果需要数百,请使用
mod
%
)运算符,例如:

h = x // 100 % 10
因此,对于您的函数,它看起来像(为错误处理而更新):

Python 2解决方案:

def get_hundredth(a, b, c):
    return [i / 100 % 10 for i in [a, b, c]]

>>> get_hundredth(1234, 509, 80633)
[2, 5, 6]

>>> get_hundredth(4024, 81, 2713)
[0, 0, 7]

这不会纠正错误,但会使您更接近解决方案。由于您对所有参数都执行相同的操作,因此可以将它们作为列表(
k
)获取,然后将
map
应用于所有参数。

由于其他答案,请不要解决何时返回
None
的问题

def get_hundredth(a,b,c):
    def hundreds(x):
        try:
            return (x // 100) % 10 if (isinstance(x, int) and x > 0) else None
        except TypeError:
            return None
    return tuple(map(hundreds, (a,b,c)))

print(get_hundredth(1234, 509, 80633)) # (2, 5, 6)
print(get_hundredth(-89, 81.85, 'test')) # (None, None, None)

我认为你把“百分之一百”和“百分之一百”混淆了。如果a是“boo”,你将返回“b”。这真的可以吗?如果其中任何一个是无效的,例如不能被100整除呢?最后一个示例在值为81时返回0。你想到了什么值?这假设整数除法(实际上应该使用
/
强制除法,在python3中是正确的),如果i<100,x//100等于0,如果>100,则只删除任何小数部分。应该返回一个
元组
@Alexander例如:当a=“boo”时。啊。该问题已被编辑。它将引发异常
TypeError
@Alexander,尽管“无效”输入也可能是负数。我已经做了适当的编辑,谢谢(虽然它似乎暗示整数中的错误可能是负数)。那么所有其他非整数的数值类型呢?它们是有效的还是无效的(你假设有效)。好的,对我来说(并且也接受OP)。它仍然无误地接受浮点。@AChampion我是一个完成列表,所以我认为这是最后一次编辑:)
def get_hundredth(*k):
    return map(lambda x: x / 100 % 10, k)
def get_hundredth(a,b,c):
    def hundreds(x):
        try:
            return (x // 100) % 10 if (isinstance(x, int) and x > 0) else None
        except TypeError:
            return None
    return tuple(map(hundreds, (a,b,c)))

print(get_hundredth(1234, 509, 80633)) # (2, 5, 6)
print(get_hundredth(-89, 81.85, 'test')) # (None, None, None)