首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Python中显示包含2个奇数的数字,这些数字还包含4和5,最多10000

在Python中显示包含2个奇数的数字,这些数字还包含4和5,最多10000
EN

Stack Overflow用户
提问于 2018-07-01 07:19:46
回答 3查看 57关注 0票数 2

我正在尝试做一个程序,它将只显示两个奇数的数字,也包含4和5,直到10000。

我做了这个,但我不能让它检查奇数,它只显示包含4和5的数字。

代码语言:javascript
复制
n = 9999
def countNumbersWith4(n) : 
    result = 0
    for x in range(1, n + 1) : 
        if((has4(x) == True) & (has5(x) == True)) :
            def countEvenOdd(x):
                odd_count = 0
                while (x > 0):
                    rem = x % 10
                    if (rem % 2 != 0):
                        odd_count += 1             
                    x = int(x / 10)
            t = countEvenOdd(x);
            result = result + 1 
            print(x)
    return result 
def has4(x) : 
    while (x != 0) : 
        if (x%10 == 4) : 
            return True 
        x = x //10
def has5(x) :
    while (x != 0) :
        if (x%10 == 5) :
            return True
        x = x //10 

    return False
print ("0 to ", n," is ",countNumbersWith4(n))
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-07-01 07:47:32

也许不是最好的风格,但很管用,希望也能为你服务;-)

代码语言:javascript
复制
def two_odd_numbers(n):
    cnt = 0

    for i in n:
        if int(i) % 2 == 0:
            cnt += 1

    return cnt == 2

def containing_two_odd_numbers_4_and_5(n):
    l = []
    for i in range(1000, n):
        number = str(i)
        if '4' in number and '5' in number and two_odd_numbers(number):
            l.append(i)
    return l


if __name__ == '__main__':
    n = 9999
    l = containing_two_odd_numbers_4_and_5(n)
    print('0 to {} is {}'.format(n, len(l)))
    print(l)
票数 1
EN

Stack Overflow用户

发布于 2018-07-01 08:27:48

此函数可以传递您喜欢的任意范围的数字,我将最小值设置为455,因为这是最小的有效数字,以节省一些计算时间,因为我将其打包到一个集合中,输出顺序混乱,所以我对其进行了排序

代码语言:javascript
复制
def findnumber(n):
    result = set()
    for x in range(455, n):
        odds = 0
        fours = 0
        fives = 0
        i = x
        j = x % 10
        while i:
            if j == 4:   fours += 1
            if j == 5:   fives += 1
            if j % 2:    odds += 1
            j = i % 10
            i //= 10

        if odds == 2 and fours == 1 and fives == 1:
            result.add(x)
    return result

N = 99999
print("0 to ", N, " is ", sorted(findnumber(N))
票数 0
EN

Stack Overflow用户

发布于 2018-07-02 03:57:18

下面是一个使用正则表达式和re模块的脏解决方案,该模块返回一个bool

代码语言:javascript
复制
import re

def has2Odd4and5(x):
    return re.match(r'(((4.*5)|(5.*4)).*[13579])|(((4.*[13579])|([13579].*4)).*5)|((([13579].*5)|(5.*[13579])).*4)', str(x)) is not None

示例用法:

代码语言:javascript
复制
>>> print(filter(has2Odd4and5,range(1000,10000))
[1045, 1054, 1145, 1154, 1245, 1254, 1345, 1354, 1405, ...

我确信这个正则表达式可以进一步简化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51119253

复制
相关文章

相似问题

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