为什么“继续”和“中断”给出相同的结果?

时间:2019-04-24 19:24:44

标签: python continue

在我的代码中,关键字“ continue”和“ break”给出相同的输出。是什么原因?

第一个代码:

library(tidyverse)

input_df <- read_csv("ARM_PERMIT_COMB.csv") %>%
  magrittr::set_colnames(
    c('Year', 'Wetland Loss','Restoration/Enhancement - Permit',
      'Conservation - Permit', 'Conservation - ARM', 'Restoration - ARM',
      'Enhancement - ARM', 'Con - Total', 'EnRes - Total')
    ) %>% 
  select(-contains("Total")) %>%
  gather(Variable, Value, -Year) %>%
  mutate(Category = case_when(
    Variable == "Wetland Loss" ~ "Loss",
    str_detect(Variable, "Restoration|Enhancement") ~ "Enhancement / Restoration",
    str_detect(Variable, "Con") ~ "Conservation",
    TRUE ~ "Enhancement / Restoration"
  ))

ggplot(input_df, aes(x = Category, y = Value, fill = Variable)) +
  geom_bar(stat = "identity", position = "stack") + 
  facet_grid(~Year) +
  labs(title = 'Wetlands Loss, Conservation, Enhancement, Restoration, ', 
       y = 'Acres', x = '', subtitle = 'Years 2008 - 2018') +
  theme(plot.title = element_text(hjust = 0.5), 
        plot.subtitle = element_text(hjust = 0.5),
        axis.text.x = element_text(angle = 90, vjust = 0.3, hjust = 1)) +
  scale_fill_manual(values = c("chartreuse2","green4", "steelblue3", 
                               "yellow3","orangered2", "grey33"), 
                    name = "Impacts and\nMitigation") + 
  geom_text(data = input_df %>% 
              group_by(Year, Category) %>% 
              summarise(Value = sum(Value, na.rm = TRUE)),
            aes(label = Value, x = Category, y = Value), inherit.aes = FALSE,
            vjust = -1, size = 2)

输出: 0 1

第二个代码:

x = 0
while x < 5:
    if x == 2:
        break
    print(x)
    x += 1

输出: 0 1

在第一个代码中,我希望得到相同的输出。在第二个中,我期望输出是这样的: 输出: 0 1个 3 4

4 个答案:

答案 0 :(得分:4)

continue停止循环的当前迭代,并立即跳到循环的下一个迭代,跳过循环主体的其余部分。

在您的while循环中,正文的其余部分包括语句x += 1。因此x永远不会成为3,而是停留在2。从此以后,if x == 2:测试始终会成功,并且会不断跳过增量,并且一遍又一遍地重复该循环而陷入困境。

for循环中,它跳过循环主体的其余部分,然后从要循环的迭代器中获取下一项。如果您将循环更改为:

for x in range(5):
    if x == 2:
        continue
    print(x)

您将获得期望的输出。 x的递增不是在循环主体中完成的,它是由for语句本身完成的。它在每次迭代开始时自动发生。因此continue仅跳过print语句。

答案 1 :(得分:1)

python中的continue关键字告诉程序跳过循环的其余内容,并跳转到下一个迭代。

在第二个代码中,您会注意到该程序永不停止执行。这是因为一旦x == 2True,程序将按continue命中,然后跳至下一个迭代...在此程序再次检查x是否等于2,然后将点击continue。这是一个无限循环。

答案 2 :(得分:0)

break立即退出循环,continue停止当前迭代以直接开始下一次迭代(它不会退出循环)。

答案 3 :(得分:0)

第二个代码示例将永远不会终止,因为continue会重新启动while循环而不会递增x