检查整数/浮点是否包含特定的numb

2024-06-23 19:36:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图找到一种方法来检查数字是否包含“2”“3”“4”“5”; 所以1234的意思是“假”,0110的意思是真。你知道吗

我尝试将float转换为string并使用.find()进行检查,但它太长,无法正确转换。你知道吗

a = Decimal(1) / Decimal(123456789)
print a

8.100000073710000670761006104E-9

a = str(a)
print a

8.100000073710000670761006104E-9

所以请帮帮我(:

编辑:

我有一个计算公式,想完善的结果。所以我可以使用结果作为输入并计算原始数字。你知道吗

这是一种加密算法,需要特殊的数字集。你知道吗

例如

99989001209866914639389667136615E-8

是我的事业

1/99989001209866914639389667136615E-8=10001100

1/10001100=99989001209866914639389667136615E-8

另外,数字源是单独生成的。我试着阅读源代码,只提炼出公认的数字。你知道吗


Tags: 方法编辑string源代码数字findfloatdecimal
3条回答

我不明白你最初的问题描述。如果你的意思是一个数字的倒数是否包含这些数字,一个问题是大多数这样的结果有无限多的数字。编写0110这样的数字会使事情更加复杂,因为在python2中是八进制(在python3中无效);它的值是72。你知道吗

但有一件事我很容易回答,“太长”的部分。您可以从十进制请求任意(但仍然有限)精度:

>>> f='{:f}'.format(decimal.Context(prec=200).divide(1,1234))
>>> f[:40]
'0.00081037277147487844408427876823338735'
>>> f.index('00810372')
3
>>> f.index('00810372', 3+1)
91

因此,当它发生时,1/1234的数字流在88个十进制数字之后重复。所有的有理数都有这样的循环长度(6855006位之后的1/123456789循环)。但是默认的十进制上下文没有生成足够的数字来观察这个数字的整个循环。你知道吗

解决这个问题的正确方法可能包括显式执行长除法,并跟踪沿途遇到的分数。当你发现一个重复时,你就可以很容易地发现。类似于(可能是缓慢的):

fractions=set()
digits=[]
while fraction not in fractions:
    digit = math.floor(fraction)
    fractions.add(fraction)
    digits.append(digit)
    fraction = (fraction-digit)*10

为了划分这些数字并摆脱科学记数法,我使用了以下代码:

from decimal import *
a = '{0:f}'.format(Decimal(1)/Decimal(123456789))
print a.find('1234')
print a.find('810')

我不确定你在字符串中搜索的条件。但我希望这会有帮助。你知道吗

如果我理解你的问题,你可以尝试使用正则表达式。这里有一个交互式的方法来解决您的问题:https://regex101.com/r/i2mZmK/2/

python中的一个潜在解决方案:

import re
from decimal import * 

regex = re.compile(r"(2|3|4|5)")

a = Decimal(1) / Decimal(123456789)


def check_number():
    result = regex.search(str(a))

    if result is None:
        check = True

    else:
        check = False

    return check

print(check_number())

相关问题 更多 >

    热门问题