找出一个数字在两种情况下出现的次数

to find how many times a number occurs in two situations

Q) 邻居 m 和 n 在新年订了外卖。在此之后,他们以固定的时间间隔订购。编写一个 python 程序来找出双方将在 1 月的同一天订购的天数。

例如:如果1月1日后每2天下单m次,1月1日后每3天下单n次,则当天下单次数为6次(包括1月1日)

我试过了。

while 循环中的 c1 和 c2 将给出他们点外卖的日期。我打算将 c1 和 c2 的所有值添加到两个单独的列表中并进行比较??我不确定这是否可能,如果是,这是错误的代码。我不知道该怎么做。请有人帮忙

m=int(input())
n=int(input())
c1=1
c2=1
count=0
while c1 in range(1,31):
    c1=c1+m
    l1=[1,c1]
while c2 in range(1,31):
    c2=c2+n
    l2=[1,c2]
for x in l1:
    for y in l2:
        if x==y:
            count=count+1
        print(count)

注意。下面的解决方案是 高效,您的代码中的迭代次数不应超过 31 次(实际上不超过 31//3)。测试天的所有组合是没有用的,并且会导致您的代码不可扩展。

这很容易使用 comprehensions/generators 解决。

一起点单的天数都是步数的倍数(从0开始算)。

您可以通过以下方式获得那些日子:

[day+1 for day in range(31+1) if not (day%2 or day%6)]

# output: [1, 7, 13, 19, 25, 31]

注意。 day%x returns 0 if day 如果 x 的倍数,那么当 day 同时是 day 的倍数时 not (day%2 or day%6) 为真26.

然而,您很快意识到您不需要整天测试,只需要测试那些最大乘数的天数:

[day+1 for day in range(0, 31+1, 6) if not (day%2 or day%6)]

# output: [1, 7, 13, 19, 25, 31]

如果您只想计算天数:

sum(1 for day in range(0, 31+1, 6) if not (day%2 or day%6))

# output: 6
m=int(input())
n=int(input())
c1=1
c2=1
l1=[]
l2=[]
count=1
while c1< 32:
    
    c1=c1+m
    l1.append(c1)
    
while c2< 32:
    c2=c2+n
    if c2 in l1:
        l2.append(c2)
count+=len(l2)
print(count)

因为 1 月 1 日在任何时候都很常见,所以我从 1 开始数

首先,要更正您的代码,您应该知道 = 不会向 list 添加项目。它只是重写它。所以,这是你的代码的正确方式:

m=int(input())
n=int(input())
c1=1
c2=1
count=0
l1 = []
l2 = []
while c1 in range(1,32):
    c1=c1+m
    l1.append(c1)
while c2 in range(1,32):
    c2=c2+n
    l2.append(c2)
for x in l1:
    if x in l2:
        count=count+1
print(count)

BUT 我认为有更好的方法来解决这个问题。如您所见,他们都订购的天数是 mnLCM 并且 multiples 小于 31。所以代码应该是这样的:

import math
count = 0
i = 2
lcm = math.lcm(m, n)
while lcm <= 31:
    counter = counter + 1
    lcm = lcm * i
    i = i + 1
print(counter)

创建两组。一个开始日期和附加值递增 2,直到并包括该月的最后一天。第二个与第一个类似,但增加了 3。然后您可以对两个集合执行按位 并计算结果集的长度。虽然相当笨拙,但您可以在一行代码中完成:

print(len({i for i in range(0, 31, 3)} & {i for i in range(0, 31, 2)}))