最新【维生素C语言】第二章 - 分支和循环_default后面有分号吗,Python面试2024

文末有福利领取哦~

👉一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。img

👉二、Python必备开发工具

img
👉三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
img

👉 四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。(文末领读者福利)
img

👉五、Python练习题

检查学习结果。
img

👉六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
img

img

👉因篇幅有限,仅展示部分资料,这份完整版的Python全套学习资料已经上传

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

; // 空语句;

}



#### 0x01 真与假


📚 定义: 0为假,非0即为真(比如:1是真,0是假)




### 二、分支语句


#### 0x00 if 语句


![](https://img-blog.csdnimg.cn/2021092416270872.png)



💬 单 if 语句演示:



int main(void) {
int age = 0;
scanf(“%d”, &age);

if ( age >= 18 )
    printf("成年\n");

return 0;

}



💬 if...else 演示:



int main(void) {
int age = 0;
scanf(“%d”, &age);

if ( age >= 18 )
    printf("成年\n");
else
    printf("未成年");

return 0;

}



💬 多分支演示:



int main(void) {
int age = 0;
scanf(“%d”, &age);

if(age<18) {
    printf("少年\n");
}   
else if(age>=18 && age<30) {
    printf("青年\n");
}
else if(age>=30 && age<50) {
    printf("中年\n");
} 
else if(age>=50 && age<120) {
    printf("老年\n");
} else {
    printf("请输入正确的年龄\n");
}

return 0;

}



💬 判断一个数是否为奇数:



int main(void) {
int n = 0;
scanf(“%d”, &n);

if(n % 2 == 0) {
    printf("不是奇数\n");
} else {
    printf("是奇数\n");
}

return 0;

}



#### 0x01 代码块


📚 如果条件成立,需要执行多条语句,应该使用代码块,一对大括号,就是一个代码块。


💭 建议:无论是一行语句还是多行语句,建议都加上大括号。


![](https://img-blog.csdnimg.cn/20210924163115393.png)



💬 不加大括号的隐患:悬空 else


❓ 下列代码会打印 abc 吗?



int main(void) {
int a = 0;
int b = 2;
if ( a == 1 )
if ( b == 2 )
printf(“123\n”);
else
printf(“abc\n”);

return 0;

}



> 
> 🚩 运行结果:(什么都没打印出来)
> 
> 
> 


🔑 解析:因为没有大括号,else 与离它最近的一个if相结合( 即内部 if ),所以即使 else 与外部 if 相对应,也没用。


💬 订正:加上大括号之后,可以使代码的逻辑更加清楚!



int main(void) {
int a = 0;
int b = 2;
if(a == 1) {
if(b == 2) {
printf(“hehe\n”);
}
} else {
printf(“haha\n”);
}

return 0;
}



> 
> 🚩 运行结果: abc
> 
> 
> 



#### 0x02 代码风格


代码一:可读性不好,但是节省空间


![](https://img-blog.csdnimg.cn/20210924164203768.png)



代码二:可读性强


![](https://img-blog.csdnimg.cn/20210924164242296.png)



代码三:我们希望 hello 不被打印出来,但是事实上他打印出来了;



int main()
{
int num = 0;
if ( num = 5 ) {
printf(“hello\n”); // = 赋值 == 判断相等;
}

return 0;

}


🔑 解析:为什么会这样呢?因为在 if 语句中 num = 5 相当于重新赋值了。


💬 为了防止把一个等号写成两个等号,发生这样的BUG,我们可以这么写:



int main()
{
int num = 0;
if (5 == num) {
printf(“hehe\n”);
}

return 0;

}


这样写,如果不小心写成了 "=",运行都运行不了,可以让自己很容易地发现问题。这是种好的代码风格!未来如果涉及到常量和变量相比较,比较相等与否,我们不妨把变量放在双等号的右边,常量放在左边,以防不小心少打一个 "=" ,导致程序出错。



📚 关于 return 0



int test() {
if (1) {
return 0; // 当return 0 执行了,下面的代码都不会执行了;
}
printf(“hehe\n”);
return 1;
}

int main(void) {
test();
return 0;
}



#### 0x04 switch 语句


📚 介绍:switch 语句是一种多分支语句,常常用于多分支的情况。一个标准 switch 语句的组成:


① case 语句项:后面接常量表达式(类型只能是整型和枚举类型)。


② break 语句:用来跳出 switch 语句,实际效果是把语句列表划分为不同的部分。


③ default 子句:默认执行的语句,当所有 case 都无法与 switch 的值相匹配时执行。


![](https://img-blog.csdnimg.cn/20210924165314649.png)



📌 注意事项:


1. case 和 default 后面记得加 :(冒号),而不是分号。


2. 在 switch 语句中可以出现if语句。


3. switch 后面必须是整型常量表达式。


4. 每个 switch 语句后面只能有一个 default。


5. 不一定非要加 default,也可以不加。



📜 建议:


1. 在最后一个 case 语句的后面也加上一条 break 语句,以防未来增添语句项时遗漏。


2. 建议在每个 switch 中都加入 default 子句,甚至在后边再加一个 break 都不过分。




💬 switch 用法演示:用户输入一个数字x,返回星期(eg. 1 >>> 星期一)



int main(void) {
int day = 0;
scanf(“%d”, &day);

switch (day) {
    case 1:
        printf("星期一\n");
        break; // 跳出switch
    case 2:
        printf("星期二\n");
        break;
    case 3:
        printf("星期三\n");
        break;
    case 4:
        printf("星期四\n");
        break;
    case 5:
        printf("星期五\n");
        break;
    case 6:
        printf("星期六\n");
        break;
    case 7:
        printf("星期日\n");
        break;
    default: // 默认执行的语句;
        break;
}

return 0;

}



💬 多 case 同一个结果情况演示:输入1-5,输出 工作日;输入6-7,输出休息日;其他数字返回error



int main(void) {
int day = 0;
scanf(“%d”, &day);

switch (day) {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        printf("工作日\n");
        break;
    case 6:
    case 7:
        printf("休息日\n");
        break; // 末尾加上break是个好习惯;
    default:
        printf("输入错误\n");
        break; // 这里可以不加break,但是加上是个好习惯;
}
return 0;

}



❓ 下列代码输出值是多少?



int main(void) {
int n = 1;
int m = 2;
switch(n) {
case 1:
m++;
case 2:
n++;
case 3:
switch(n) {
case 1:
n++;
case 2:
m++;
n++;
break;
}
case 4:
m++;
break;
default:
break;
}
printf(“m = %d, n = %d\n”, m, n);

return 0;

}


💡 答案:m = 5, n = 3


🔑 解析:因为n=1,所以进入switch后执行case1的语句m++,此时m=3,由于该语句项末尾没有break,继续向下流到case2的语句n++,此时n=2,又没有break,流向case3,case3中又嵌了一个switch(n),此时因n=2,执行内部switch的case2的语句m++和n++,此时m=4,n=3,后面有break,跳出内部switch,但是外部switch的case3后面依然没有break,所以流向case4,m++,此时m=5,后面终于有break了。运行下来后的结果为 m=5,n=3。




### 三、循环语句


#### 0x00 while 循环


📚 定义:当满足条件时进入循环,进入循环后,当条件不满足时,跳出循环。


📌 注意事项:while 循环条件将会比循环体多执行一次。


while 循环中,当条件表达式成立时,才会执行循环体中语句,每次执行期间,都会对循环因子进行修改(否则就成为死循环),修改完成后如果 while 条件表达式成立,继续循环,如果不成立,循环结束。


![](https://img-blog.csdnimg.cn/20210924165704811.png)



💬 while死循环:表达式结果如果为非0,为真,循环就执行



int main(void) {
while(1)
printf(“hehe\n”);

return 0;

}



> 
> 🚩 运行结果如下:
> 
> 
> 


![](https://img-blog.csdnimg.cn/20210924170921490.png)



💬 while 循环打印 1~10 的数字:



int main(void) {
int i = 1;
while(i<=10) {
printf("%d ", i);
i++;
}

return 0;

}



> 
> 🚩 运行结果: 1 2 3 4 5 6 7 8 9 10
> 
> 
> 



#### 0x01 break 语句


📚 break 语句在 while 循环中的效果:


在 while 循环中,break 用于永久地终止循环。



int main(void) {
int i = 1;
while(i <= 10) {
if(5 == i) // i=5时停止循环;
break;

    printf("%d ", i);
    i++;
}

return 0;

}



> 
> 🚩  运行结果:1 2 3 4
> 
> 
> 



#### 0x02 continue 语句


📚 continue 语句:



int main()
{
int i = 1;
while(i<=10) {
if(i==5) {
continue; // 跳至判断部分;
}
printf("%d ", i);
i++;
}

return 0;

}



> 
> 🚩 运行结果: 1 2 3 4(程序会一直判断)
> 
> 
> 



#### 0x03 getchar 和 putchar


📚 getchar:


从流(stream)或键盘上,读取一个字符。


返回值:如果正确,返回ASCII值;如果读取错误吗,返回 EOF(文件结束标志)。



📚 putchar:单纯的输出一个字符。


![](https://img-blog.csdnimg.cn/20210924172422827.png)



💬 getchar 使用方法演示: "输入什么就返回什么"



int main(void) {
int ch = getchar();
putchar(ch); // 输出一个字符;

return 0;

}



> 
> 🚩 运行结果:(假设输入a)  a
> 
> 
> 



💬 getchar 与 while 的结合: "一直从键盘上读取字符的程序"



int main(void) {
int ch = 0;
// ctrl+z - getchar 就读取结束;
while ( (ch = getchar()) != EOF ) {
putchar(ch);
}

return 0;

}


❓ 如果想停止输入,怎么办?


💡 解决方法: 输入 *ctrl + z* 可以使 getchar 结束读取。



💬 getchar 只打印数字:



int main(void) {
int ch = 0;
while( (ch=getchar()) != EOF ) {
if(ch<‘0’ || ch>‘9’) {
continue; // 发现不是数字,跳回判断部分,重新getchar;
}
putchar(ch);
}

return 0;

}



💬 清理缓冲区:用户输入密码后,让用户确认(Y/N)



int main(void) {
char password[20] = {0};
printf(“请输入密码:>”);
scanf(“%s”, password);
printf(“请确认密码(Y/N) :>”);
int ch = getchar();
if(ch == ‘Y’) {
printf(“确认成功\n”);
} else {
printf(“确认失败\n”);
}

return 0; 

}



> 
> 🚩 运行结果:(假设用户输入了123456;Y)确认失败
> 
> 
> 


❓  为什么还没有让用户确认(Y/N)就显示确认失败了?


🔑 解析:输入函数并不是从键盘上读取,而是从缓冲区中读取内容的;键盘输入123456时敲下回车键,此时为 “123456\n”,这时scanf将123456取走,getchar读取到的就是“\n”了,因为“\n”不是Y,执行了else的结果,所以显示确认失败。


💡 解决方案:在 scanf 后加上一个“读取 \n ”的 getchar()



int main(void) {
char password[20] = {0};
printf(“请输入密码:>”);
scanf(“%s”, password);
printf(“请确认密码(Y/N) :>”);
// 清刷缓冲区;
getchar()

int ch = getchar();
if(ch == 'Y') {
    printf("确认成功\n");
} else {
    printf("确认失败\n");
}

return 0; 

}



> 
> 🚩 (假设用户输入了123456;Y)确认成功
> 
> 
> 🚩 (假设用户输入了123 456;Y)确认失败
> 
> 
> 



❓“用户输入了空格,确认Y,为什么显示确认失败?”


🔑 解析:刚才加入的一个getchar()处理掉了空格,导致后面“\n”没人管了;


💡 解决方案:加入循环



int main(void) {
char password[20] = {0};
printf(“请输入密码:>”);
scanf(“%s”, password);
printf(“请确认密码(Y/N) :>”);
// 清理缓冲区的多个字符;
int tmp = 0;
while( (tmp = getchar()) != ‘\n’ ) {
;
}

int ch = getchar();
if(ch == 'Y') {
    printf("确认成功\n");
} else {
    printf("确认失败\n");
}

return 0; 

}



> 
> 🚩 (假设用户输入了123 456;Y)确认成功
> 
> 
> 



#### 0x04 for 循环


📚 定义:


① 表达式1:初始化部分,用于初始化循环变量。


② 表达式2:条件判断部分,用于判断循环终止。


③ 表达式3:调整部分,用于循环条件的调整。


![](https://img-blog.csdnimg.cn/20210924173528622.png)



📌 注意事项:


① 为了防止for循环失去控制,禁止在for循环体内修改循环变量。


② for循环内的表达式可以省略,但是得注意。



📜 建议:


① 建议使用“左闭区间,右开区间”的写法:



for( i=0; i<10; i++ ) 左闭,右开区间 ✅

for( i=0; i<=9; i++ ) 左右都是闭区间 ❎


② 不要在for循环体内修改循环变量,防止for循环失去控制。




💬 for 的使用方法演示


① 利用 while 循环打印1~10数字:



int main(void) {
int i = 1; // 初始化
while(i<=10) { //判断部分
printf("%d ", i);
i++; // 调整部分
}
return 0;
}



> 
> 🚩 运行结果:1 2 3 4 5 6 7 8 9 10
> 


**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这是一条使用 Python 脚本进行目标检测评估的命令。该命令使用了一个名为 eval_rcnn.py 的 Python 脚本,并传入了三个参数: 1. --cfg_file:表示使用的配置文件,默认为 cfgs/default.yaml; 2. --eval_mode:表示评估模式,此处为 rcnn,表示使用 RCNN 模型进行评估; 3. --eval_all:表示评估全部数据集,即对所有图像进行评估。 这个命令的具体作用是评估 RCNN 模型在指定数据集上的目标检测性能,并输出评估结果。 ### 回答2: 这条命令是用于在Python中执行一个名为eval_rcnn.py的脚本。它使用了三个指定参数: 1. --cfg_file:指定要使用的配置文件,默认为cfgs/default.yaml。配置文件通常包含了一些模型的设置,如网络结构、训练参数、数据集路径等。 2. --eval_mode:指定评估模式为rcnn,其中"rcnn"通常表示使用R-CNN(Region Proposal Network-Convolutional Neural Network)算法进行目标检测。 3. --eval_all:表示对所有样本进行评估,而不仅仅是某个子集。这是一种在测试阶段进行全面评估的常见做法,以评估模型在整个数据集上的性能。 综上所述,该条命令的目的是在Python环境中运行一个名为eval_rcnn.py的脚本,使用指定的配置文件(cfgs/default.yaml)对R-CNN算法进行目标检测,并对整个数据集进行评估。 ### 回答3: 这个命令是用于在 Python 中运行 eval_rcnn.py 脚本,它的参数含义如下: --cfg_file cfgs/default.yaml:指定配置文件为 cfgs/default.yaml。配置文件是用来设置模型的超参数和其他相关参数的文件,这里使用的是 default.yaml 文件。 --eval_mode rcnn:设置评估模式为 rcnn。这表示模型会根据预训练的 RCNN 算法进行评估。 --eval_all:这个参数用来进行全面评估。它会评估模型在数据集中的所有样本上的性能,而不仅仅是某个特定的子集。通常在训练完成后,使用该参数来对模型进行全面评估,以得到一个更全面的性能指标。 总之,这个命令会使用指定的模型配置文件和评估模式,在所有的数据样本上对模型进行评估,并输出评估结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值