死循环与break、continue

通过前面循环的学习,我们已经知道了什么叫死循环,例如:

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的倍数的数

上一篇:css3-background clip 和background origin


下一篇:[CSS3] CSS Background Images