通过前面循环的学习,我们已经知道了什么叫死循环,例如:
python代码:
while True:
print(1)
C++代码:
#include <iostream>
using namespace std;
int main() {
while (true) {
cout << 1 << endl;
}
return 0;
}
以上代码会一直打印1,不会停下来。今天要讲的break就是循环杀手,它可以杀死离他最近的一个循环,看一下程序
python代码:
while True:
print(1)
break
C++代码:
#include <iostream>
using namespace std;
int main() {
while (true) {
cout << 1 << endl;
break;
}
return 0;
}
break
上面的程序运行了一次以后就遇到了杀手break,break杀死了这个死循环,所以程序只运行了一次。正常情况下我们请杀手并不是无缘无故请的,一般都会有一些条件,所以break基本上就是和条件语句(if 语句)共用。
例题:小明写了一个管理系统,但是他忘了自己的密码是多少,他可以尝试无数次,直到他输入正确的密码他才可以进入系统,请你写一个程序,模仿小明输入密码的过程。
分析:小明可以尝试无数次,输入正确的密码就停下来。
python代码:
while True:
password = input("请输入密码:")
if password == '123456':
print("进入系统")
break
else:
print('密码错误,请重新输入\n')
C++代码:
#include <iostream>
using namespace std;
int main() {
int password = 123456, input;
while (true) {
cout << "请输入密码:";
cin >> input;
if (password == input) {
cout << "进入系统" << endl;
break;
} else {
cout << "密码错误请重新输入\n"
<< endl;
}
}
return 0;
}
练习题1:算金币
【题目描述】
国王讲金币作为工资,发放给忠诚的骑士,第1天,骑土收到一枚金币,之后两天(第2天和第3天)里,每天收到两枚金币;之后三天(第4、5.天)里,每天收到三枚金市;之后四关(第7、8、9、10天)里,每天收到四枚金币.…这种工资发放模式会一直这样延续下去:当连续n天每天收到n枚金币后,骑士会在之后的连续n+1天里,每天收到n+1枚金币(n为任意正整数)。
请你编写一个程序,确定从第一天开始到给定天数n,骑士一共获得了多少金币。
continue
骑士因为身上的钱太多,被杀手盯上了,这天,骑士被国王派去地下城,骑士带领他的骑士团,只有在下地下城的时候是他一个人,地下城一共有10层,但是骑士不需要一层一层地下去,地下城在双数层会存在前往下一层地传送门(continue),在第10层有传回第一层的单向传送门,杀手得知消息以后决定先消耗一下骑士的体力,杀手的体力为8,骑士的体力为15,每走一层消耗2点体力,杀手准备在某一层等他,请你写出一个程序,帮助杀手击杀骑士,骑士是(死循环)。
python代码:
floor = 1 # 当前位于地下城的第 floor 层
qi_shi_ti_li = 15 # 骑士的初始体力为 15
killer = 8 # 杀手的体力为 8
while True:
if floor % 2 == 0: # 如果是双数层
floor += 1 # 层数 +1, 体力没消耗
continue # 传送
elif qi_shi_ti_li > killer: # 否则如果骑士的体力比杀手的体力要多
qi_shi_ti_li -= 2 # 安全通过这一层,并且体力 -2
floor += 1 # 进入下一层
else: # 否则
print(floor) # break杀手在这一层等他,打印出这一层
break # 击杀骑士
C++代码:
#include <iostream>
using namespace std;
int main() {
// 当前位于地下城的第 floor 层, 骑士体力为 15,杀手体力为 8
int qiShiTiLi = 15, killer = 8, floor = 1;
while (true) {
if (floor % 2 == 0) { // 如果是双数层,体力没有消耗
floor += 1; // 层数 +1
continue; // 前往下一层的传送门
} else if (qiShiTiLi > killer) { // 骑士体力大于杀手
qiShiTiLi -= 2; // 骑士体力 -2
floor++; // 往下一层
} else {
cout << "杀手在第 " << floor << " 层" << endl;
break; // 遇到杀手break
}
}
return 0;
}
接下来我们通过练习题来领略continue的用法
练习题1:输入一个数n(n <= 1000),打印出1到n中所有不包含3与3的倍数的数