在我的代码中,关键字“ 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
答案 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 == 2
为True
,程序将按continue
命中,然后跳至下一个迭代...在此程序再次检查x
是否等于2,然后将点击continue
。这是一个无限循环。
答案 2 :(得分:0)
break
立即退出循环,continue
停止当前迭代以直接开始下一次迭代(它不会退出循环)。
答案 3 :(得分:0)
第二个代码示例将永远不会终止,因为continue
会重新启动while循环而不会递增x
。