首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使这个循环重复到某个点?

如何使这个循环重复到某个点?
EN

Stack Overflow用户
提问于 2020-10-22 01:31:16
回答 3查看 62关注 0票数 0

我是一个八年级的学生,几天前我得到了这个任务,如果有人需要解释为什么这么容易。

简介,正如英国广播公司的“代码与地球”中所描述的,定期蝉一次进入冬眠数年。当它们在数量上安全地喂养并开始新一代的蝉时,它们作为一个物种同时出现。但不同种类的蝉有不同的冬眠期。对于这一挑战,我们假设红蝉的冬眠期为17年,而黄蝉的冬眠期为13年。(你可能会注意到,这些是素数。它可以最大限度地减少红蝉和黄蝉在同一年出现的机会,因为它们必须争夺同样的食物。)现在,你面临的挑战是:我们知道红蝉上一次出现是在2005年,它的冬眠期是17年。我们也知道黄蝉最后一次出现是在2011年,它的冬眠期为13年。你的工作是为下一个1000年建模,找出哪一年会发生罕见的冲突。您的解决方案需要列出从现在到3020年这两个物种在同一年一起出现的具体年份。

我不想要我的问题的答案,我可以用手去做。我已经记下了一些代码,但是我需要重复到3020,并勾勒出所有的崩溃

到目前为止,我得到的是:

代码语言:javascript
复制
# Hibernation periods in years.
hibernation_red = 17
hibernation_yellow = 13

# Specific years when each cicada species last emerged.
last_emergence_red = 2005
last_emergence_yellow = 2011

# My code
new_emergence_red = last_emergence_red + hibernation_red

new_emergence_yellow = last_emergence_yellow + hibernation_yellow

if new_emergence_red ==  new_emergence_yellow:
    print("watch out! {} is a collision year".format(new_emergence_red))

在3020之前,我该怎么重复这件事?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-10-22 01:55:01

你已经很接近了,只有一次迭代。您只需要有一个while循环,它会使每个红色或黄色的值递增,直到其中一个超过3020年为止。

代码语言:javascript
复制
# Hibernation periods in years.
hibernation_red = 17
hibernation_yellow = 13

# Specific years when each cicada species last emerged.
last_emergence_red = 2005
last_emergence_yellow = 2011

# My code
while last_emergence_red <= 3020 and last_emergence_yellow <= 3020:
    # If they are equal, we have a collision
    if last_emergence_red == last_emergence_yellow:
        print("watch out! {} is a collision year".format(last_emergence_red))
        # Make sure to increment to avoid an infinite loop
        last_emergence_red += hibernation_red
        last_emergence_yellow += hibernation_yellow
    # If red's last emergence is less than yellow's, find red's next emergence year
    elif last_emergence_red < last_emergence_yellow:
        last_emergence_red += hibernation_red
    # If yellow's last emergence is less than red's, find yellow's next emergence year
    else:
        last_emergence_yellow += hibernation_yellow
票数 1
EN

Stack Overflow用户

发布于 2020-10-22 02:08:29

一种方法是使用两个单独的循环来创建两个列表。第一个包含黄蝉出现的所有年份,第二个包含所有红蝉出现的日期。然后,使用for循环检查它们是否重叠(如果每个值出现在第二个列表中,则检查每个值)。

这就是我得到的:

代码语言:javascript
复制
# Hibernation periods in years.
hibernation_red = 17
hibernation_yellow = 13

# Specific years when each cicada species last emerged.
last_emergence_red = 2005
last_emergence_yellow = 2011


# Create lists with all the dates that each species emerges
list_red = [x for x in range(last_emergence_red, 3021, hibernation_red)]
list_yellow = [x for x in range(last_emergence_yellow, 3021, hibernation_yellow)]

# Check if any dates overlap
for x in list_red:
    if x in list_yellow:
        print("watch out! {} is a collision year".format(x))
票数 0
EN

Stack Overflow用户

发布于 2020-10-22 02:30:11

我会做的比其他答案不同。我会使用python的一些内置特性。第一个是range,它可以采用startstopstep三个参数。

代码语言:javascript
复制
reds = range(2005,3021,17)

这些年来,红蝉被期望去冬眠,对黄色也是如此:

代码语言:javascript
复制
yellows = range(2011,3021,13)

将其中一个转换为一个集合,并使用intersection提供属于这两个组的项:

代码语言:javascript
复制
print(set(reds).intersection(yellows))

所有这些都可以合并成一条直线:

代码语言:javascript
复制
print(set(range(2005,3021,17)).intersection(range(2011,3021,13)))

结果:

代码语言:javascript
复制
{2362, 2804, 2141, 2583}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64473949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档