检查所有单个数字是否均在范围内

时间:2018-10-10 16:14:26

标签: python python-3.x

问题陈述: 找到介于m和n之间的所有此类数字(包括两者),使数字的每个数字均为偶数。第一行包含值m和n,并用逗号分隔。获得的数字应以逗号分隔的顺序打印在一行。 限制条件: 1000 <= m <= 9000和 1000 <= n <= 9000

我的解决方案:

inp=input()
arr=inp.split(',')
m=int(arr[0])
n=int(arr[1])
num=[]
for i in range(m,n+1):
  t=i
  while t>0:
    j=t%10
    if j%2==0:
      t/=10
    else:
      break
  if t==0:
    num.append(i)
for i in range(len(num)):
  if i!=len(num)-1:
    print(num[i],end=',')
  else:
    print(num[i],end='')

例如,如果m = 2000,n = 2010,则输出应为2000,2002,2004,2006,2008

但是我没有得到任何输出。我的程序出了什么问题?

6 个答案:

答案 0 :(得分:2)

问题是在python 3 /中执行浮点除法,而不是地板除法。将t /= 10更改为t //= 10

在Python2中,3 / 4 => 0。在Python 3中,3 / 4 => 0.753 // 4 => 0。而且您的算法依赖于底数除法(或整数除法)来消除数字。

答案 1 :(得分:1)

def all_even(number):
    num_str = str(number)
    digit_bool = []
    for digit in num_str:
        if int(digit) % 2 == 0:
            digit_bool.append(True)
        else:
            digit_bool.append(False)
    return digit_bool

mylist = [i for i in range(2000, 2011) if all(all_even(i))]

返回

[2000, 2002, 2004, 2006, 2008]

如果要打印它:

print(','.join([str(i) for i in mylist]))

答案 2 :(得分:0)

您的起始号码和结束号码都有数字。有效数字为0、2、4、6、8。现在,您需要做的第一件事是找到大于或等于最小数字的第一个数字,并且所有数字都是成对的。如果初始号码有不成对的数字,则需要将其增加到下一个成对的号码。如果该数字不是最后一位,则其后的所有其他数字将变为0值。一旦有了第一个有效数字,就可以重复打印当前有效数字,并将最后一位数字增加两位,直到到达结尾数字或最后一位数字为0。如果到达最后一个数字,则例程结束。如果未达到最后一个数字,则最后一个数字为0,倒数第二个增加2。您处理倒数第二个数字时要处理最后一位数字。

答案 3 :(得分:0)

您可以稍微安静一下。首先输入您的输入,然后将 list comprehension 与split一起使用,将两个数字转换为ints。从这里开始,w可以使用 list comprehension 在两个数字的范围内建立一个列表,只需要取not i % 2即可,这就是我们的偶数。最后,我们可以使用分隔符解压缩并打印该列表。另外,我们可以添加一个while循环并将m,n继承为0,以符合约束条件。

m, n = 0, 0
z = range(1000, 9001)
while m  not in z or n not in z:
    x = input()
    m, n = [int(i) for i in x.split(',')]
lst = [i for i in range(m, n + 1) if not i % 2]
print(*lst, sep=', ')
# 2000, 2002, 2004, 2006, 2008, 2010

答案 4 :(得分:0)

使用列表推导python3.4 例如查找介于1000和9001之间的数字,并且每个数字都为偶数

1。检查数字本身是否为偶数
2。如果是,则遍历该数字的每个数字以检查其偶数是否是偶数
3。它的长度应等于数字的长度

def generator2iterator(generator, length=None):
    class Iterator(object):
        def __iter__(self):
            for i, e in enumerate(generator(), 1):
                self._len = i
                yield e
            #self.__len__ = types.MethodType(lambda self: i, self)

        def __len__(self):
            if not hasattr(self, '_len'):
                raise TypeError("object of type 'Iterator' has no defined len() yet.")
            return self._len
    return Iterator()

# examples:
## define a generator with 10 elements
def g():
    for i in range(10):
        yield i

# pass it to the iterator
it = generator2iterator(g)

# check len
len(it)
TypeError: object of type 'Iterator' has no defined len() yet.

# run the iterator
for _ in it:
    pass

# check the length
len(it)
# returns:
10
  

输出:
  [2000,2002,2004,2006,2008,2020,2022,....... 8880,8882,8884,8886,8888]

答案 5 :(得分:0)

我找到了一种更简单的方法! 通过了解其数学关系而不是编写复杂的程序来解决它!

$(function() {
$.contextMenu({
    selector: '.context-menu-one', 
    callback: function(key, options) {
        var m = "clicked: " + key;
        window.console && console.log(m) || alert(m); 
    },
    items: {
        "edit": {name: "Edit", icon: "edit"},
        "cut": {name: "Cut", icon: "cut"},
       copy: {name: "Copy", icon: "copy"},
        "paste": {name: "Paste", icon: "paste"},
        "delete": {name: "Delete", icon: "delete"},
        "sep1": "---------",
        "quit": {name: "Quit", icon: function(){
            return 'context-menu-icon context-menu-icon-quit';
        }}
    }
});

$('.context-menu-one').on('click', function(e){
    console.log('clicked', this);
})    

这是结果:

even_digits= []
for x in range(1000,9000):
        if int(x) % 2 == 0  and int(x) % 20 < 10 and int (x) % 200 < 100 and int (x) % 2000 < 1000:
            even_digits.append(str(x))
print (','.join(even_digits))