我正在尝试做一个程序,它将只显示两个奇数的数字,也包含4和5,直到10000。
我做了这个,但我不能让它检查奇数,它只显示包含4和5的数字。
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))
发布于 2018-07-01 07:47:32
也许不是最好的风格,但很管用,希望也能为你服务;-)
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)
发布于 2018-07-01 08:27:48
此函数可以传递您喜欢的任意范围的数字,我将最小值设置为455,因为这是最小的有效数字,以节省一些计算时间,因为我将其打包到一个集合中,输出顺序混乱,所以我对其进行了排序
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))
发布于 2018-07-02 03:57:18
下面是一个使用正则表达式和re
模块的脏解决方案,该模块返回一个bool
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
示例用法:
>>> print(filter(has2Odd4and5,range(1000,10000))
[1045, 1054, 1145, 1154, 1245, 1254, 1345, 1354, 1405, ...
我确信这个正则表达式可以进一步简化。
https://stackoverflow.com/questions/51119253
复制相似问题