找出一个数字在两种情况下出现的次数
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)
为真2
和 6
.
然而,您很快意识到您不需要整天测试,只需要测试那些最大乘数的天数:
[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 我认为有更好的方法来解决这个问题。如您所见,他们都订购的天数是 m
和 n
的 LCM
并且 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)}))
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)
为真2
和 6
.
然而,您很快意识到您不需要整天测试,只需要测试那些最大乘数的天数:
[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 我认为有更好的方法来解决这个问题。如您所见,他们都订购的天数是 m
和 n
的 LCM
并且 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)}))