如何创建一个由5个不被3除的数字组成的列表

bfhwhh0e  于 2021-07-13  发布在  Java
关注(0)|答案(3)|浏览(353)

亲爱的社区,我开始学习python,并希望创建一个由5个下一个(给定数字之后)数字组成的列表,这些数字不被3(模)除。这是我的密码:

def main(N):

# print a list of 5 next numbers that are not divided by 3

    l = list()
    for i in range(int(N), 150):
        if len(l) < 5:
            if i%3==0:
                l.append(i+1)
    return [l]

最后我拿到了f.e print(main(99)) : >>> [100, 103, 106, 109, 112] 我还试图在if语句后面加上i+=1,但最后得到了更奇怪的结果: [101, 101, 102, 104, 104] 我做错了什么?我怎样才能纠正它?谢谢!

zzlelutf

zzlelutf1#

我会编写一个生成器,生成不可被3整除的数字和一个基数,并作为参数计算:

def three_no_factor(n, cnt):
    x = 1
    while x <= cnt:
        if n % 3 != 0:
            yield n
            x += 1
        n += 1

然后用它得到5个不能被3整除的数字:

>>> [x for x in three_no_factor(100,5)]
[100, 101, 103, 104, 106]
tjjdgumg

tjjdgumg2#

def main(N):

# print a list of 5 next numbers that are not divided by 3

    l = list()
    i = N + 1
    while len(l)<5:
        if i%3!=0:
            l.append(i)
        i += 1
    return [l]
5uzkadbs

5uzkadbs3#

除非有特定的理由将值限制为150,否则可以让循环运行直到列表已满。

def next_nontriples(N):

# return a list of 5 next numbers that are not divisible by 3

    ls = list()
    nx = N + 1
    while len(ls) < 5:
        if nx%3 != 0:
            ls.append(nx)
        nx += 1
    return ls

使用 != 操作员是关键。请注意,我返回的是结果列表,而您返回的列表仅包含必需的列表元素,这是因为您的 return 项目。
每个循环可以填写一次列表,也可以填写5次:

def next_nontriples(N):

# return a list of 5 next numbers that are not divisible by 3

    ls = list()
    nx = N + 1
    for ix in range(5):
        if nx%3 == 0:
            nx += 1 # skip this one 
        ls.append(nx)
        nx += 1
    return ls

在这里,如果候选值没有通过测试(可以被3整除),我们只需向其添加一个增量。我们知道下一个号码是合格的。
最后你可以把这三个案子分开处理。这里不特别推荐,但硬编码有时是您的朋友:

def next_nontriples(N):

# return a list of 5 next numbers that are not divisible by 3

    if N%3 == 0:
        return [N+1, N+2, N+4, N+5, N+7]
    if N%3 == 1:
        return [N+1, N+3, N+4, N+6, N+7]
    if N%3 == 2:
        return [N+2, N+3, N+5, N+6, N+8]

相关问题