Q) 鄰居 m 和 n 在新年訂購外賣。在此之后,他們以固定的時間間隔訂購。撰寫一個python程式來找出一月同一天訂購的天數。
例如:如果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)
uj5u.com熱心網友回復:
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 開始數
uj5u.com熱心網友回復:
注意。下面的解決方案是有效的,您的代碼中不應需要超過 31 次迭代(實際上不超過 31//3)。測驗所有天陣列合是無用的,并且會導致您的代碼不可擴展。
這很容易使用理解/生成器解決。
他們一起訂購的天數都是步數的倍數(從 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回傳,所以當同時是和的倍數時為真。0dayxnot (day%2 or day%6)day26
但是,您很快意識到您不需要整天測驗,只需測驗最大乘數的那些:
[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
uj5u.com熱心網友回復:
首先,要更正您的代碼,您應該知道=不會向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)
但我認為有更好的方法來解決這個問題。你看,天,他們都為了是LCM的m,并n和它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)
uj5u.com熱心網友回復:
創建兩個集合。一個具有開始日期和附加值,增加 2 直到并包括該月的最后一天。第二個與第一個類似,但以 3 為增量。然后您可以對兩個集合執行按位和并計算結果集的長度。雖然相當遲鈍,但您可以在一行代碼中完成,因此:
print(len({i for i in range(0, 31, 3)} & {i for i in range(0, 31, 2)}))
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/324843.html
