【GO语言卵细胞级别教程】03.条件与循环语句

news2024/11/19 6:23:08

注意:以下演示所用的项目,在第一章节已经介绍了,这里不做赘述

目录:

  • 【GO语言卵细胞级别教程】03.条件与循环语句
  • 1.条件语句
    • 1.1 if语句
      • 1.1.1 单层if语句
      • 1.1.2 if-else语句
      • 1.1.3 if-else-if 语句
      • 1.1.4 if 嵌套
    • 1.2 switch 语句
      • 1.1.1 switch-case
      • 1.1.2 总结
    • 1.3 常见错误
  • 2.循环语句
    • 2.1 循环语句for
    • 2.2 For循环功能
    • 2.3 for range遍历函数
  • 3.关键词
    • 3.1 关键词break
    • 3.2 continue关键字
    • 3.3 goto关键字
    • 3.4 return关键词
  • 4.题目
    • 4.1 99乘法表

【GO语言卵细胞级别教程】03.条件与循环语句

1.条件语句

1.1 if语句

1.1.1 单层if语句

  1. 语法
if 布尔表达式 {
   /* 在布尔表达式为 true 时执行 */
}
  1. 案例
package tiaojian

// if单层
import "fmt"

func OneIf(){
	var num int
	fmt.Print("请输入一个数字:")
	fmt.Scan(&num)
	if num == 100{
		fmt.Println("满分100!")
	}
	fmt.Println("程序执行完!")
	
}
// 输出结果
开始运行:
当前机器状态: 正常
请输入一个数字:100
满分100!
程序执行完!

1.1.2 if-else语句

  1. 语法
if 布尔表达式 {
   /* 在布尔表达式为 true 时执行 */
} else {
  /* 在布尔表达式为 false 时执行 */
}
  1. 案例
package tiaojian
// if-else 语句
import "fmt"

func IfElse(){
	var num int
	fmt.Println("请输入一个数字:")
	fmt.Scan(&num)
	if num > 2023 {
		fmt.Println("恭喜您!2024新年好")
	}else{
		fmt.Println("2023辞旧迎新!")
	}
}

1.1.3 if-else-if 语句

  1. 语法
if 布尔表达式1 {

}else if 布尔表达式{

}
  1. 实战
package tiaojian
// if-else 语句
import "fmt"

func IfElse(){
	var num int
	fmt.Println("请输入一个数字:")
	fmt.Scan(&num)
	if num > 2023 {
		fmt.Println("恭喜您!2024新年好")
	}else if num == 2024{
		fmt.Println("2023辞旧迎新!")
	}else {
		fmt.Println("读懂《遥远的救世主》:不去讨好生活,生活有时候会反")
	}
}

1.1.4 if 嵌套

  1. 语法: 用户输入值有两个方法
    (1)使用fmt.Scanf(“%d”, &age)
    (2)使用fmt.Scan(&age)
if 布尔表达式1 {
   /* 在布尔表达式 1 为 true 时执行 */
   if 布尔表达式2 {
      /* 在布尔表达式 2 为 true 时执行 */
   }
}
  1. 实战
package tiaojian
// if-else 语句
import "fmt"

func IfElse(){
	var num int
	fmt.Println("请输入一个数字:")
	fmt.Scan(&num)
	if num > 2023 {
		fmt.Println("恭喜您!2024新年好")
	}else if num == 2024{
		fmt.Println("2023辞旧迎新!")
	}else {
		if num == 1{
			fmt.Println("袈裟本无清静,红尘不染性空,幽幽古刹千年钟,都是痴人说梦")
		}
		fmt.Println("读懂《遥远的救世主》:不去讨好生活,生活有时候会反")
	}
}
// 运行结果
开始运行:
当前机器状态: 正常
请输入一个数字:1
程序执行完!
请输入一个数字:
1
袈裟本无清静,红尘不染性空,幽幽古刹千年钟,都是痴人说梦
读懂《遥远的救世主》:不去讨好生活,生活有时候会反
  1. 实战
package tiaojian

// 条件语句

import "fmt"

func Tiaojian(){
	var a1 int = 1
	var a2 int = 2
	fmt.Printf("a1=%v, a2=%v\n", a1, a2)
	if a1 < a2 {
		fmt.Println("a1 < a2")
	}else{
		fmt.Println("a1 > a2")	
	}
	// 使用scanf 输入一个值
	var pwd string = ""
	fmt.Print("请输入密码:")
	fmt.Scanf("%v", &pwd)
	fmt.Println(a1)
	if pwd == "001"{
		fmt.Println("密码输入正确!!")
		fmt.Println("获取新的技能:重锤火花")
		fmt.Println("经验提升:88")
		fmt.Println("获取金钱:88888888")
	}else{
		fmt.Println("密码输入错误!!")
		fmt.Println("金钱扣除:80")
	}
	// 使用
	fmt.Print("请再输入一个:")
	fmt.Scan(&a1)
	fmt.Println(a1)
}
// 执行结果
运行结果:
当前状态: 19
a1=1, a2=2
a1 < a2
请输入密码:001
1
密码输入正确!!
获取新的技能:重锤火花
经验提升:88
获取金钱:88888888
请再输入一个:20
20

1.2 switch 语句

  1. switch 后是一个表达式(变量、常量、一个有返回值的函数等都可以)
  2. case后面的表达式如果是常量值(字面量)则要求不能重复
  3. case后面的各个值得数据类型必须和switch一致
  4. case后面可以多个值使用逗号分割,比如case 值1,值2……
  5. case后面不需要带break go语言不需要,想要无条件执行下一句需要使用fallthrough
  6. default 语句不是必须的,位置也是可以在任何地方
  7. switch后也可以不带表达式,当作if分支来使用
  8. switch后也可以直接声明/定义一个变量,分号结束,需要使用num:=xxx得方式声明;
  9. switch 穿透利用fallthrough 关键字,如果在case 语句块后增加fallthrough,则会继续执行下一个case

1.1.1 switch-case

  1. 语法
    其中表达式可以是:一个常量值、变量或者有返回值的函数都可以
switch 表达式 {
    case1,2:
		语句1
    case1,2:
		语句2
    case1,2:
		语句3
	 default:
	    语句4
}
  1. 实战:switch后面直接大括号
package tiaojian
// switch 语句
import "fmt"

func DemoSwitch(){
	var num int
	fmt.Print("请输入一个num:")
	fmt.Scan(&num)
	switch {
		case num >= 0 && num < 60:
			fmt.Println("还得继续加油!:", num)
			fallthrough
		case num >= 60 && num < 70:
			fmt.Println("恭喜您,及格了!:", num)
		case num >= 70 && num < 80:
			fmt.Println("恭喜您,良好了!:", num)
		case num >= 80 && num < 90:
			fmt.Println("恭喜您,优秀了!:", num)
		default:
			fmt.Println("满分?", num)
	}
}
// 输出结果
开始运行:
当前机器状态: 正常
请输入一个num:12
还得继续加油!: 12
恭喜您,及格了!: 12

注意,其中fallthrough 表示无条件执行下一个case,也就是无论下一条语句执行的是true还是false都会执行。
2. 实战:switch 后面跟变量

package tiaiojian
import "fmt"
func SwitchVar{
	var num int 
    fmt.Scan(&num)
     switch num{
         case 60:
           fmt.Println("及格了", num)
         case 80:
           fmt.Println("良好了", num)
	     default:
	       fmt.Println("还能满分么!", num)
     }
}

// 直接固定一个值也是也可以,直接固定60比如
package tiaojian

import "fmt"

func SwitchVar(){
	var num int
	fmt.Scan(&num)
	switch 60{
		case 60:
			fmt.Println("恭喜您,及格了!")
		case 80:
			fmt.Println("恭喜您,良好了!")
		default:
			fmt.Println("恭喜您,满分了?")
	}
}
  1. 实战:switch 后是一个表达式(变量、常量、一个有返回值的函数等都可以)
package tiaojian

import "fmt"

func SwitchVar(){
	var num int
	fmt.Scan(&num)
	fmt.Println("测试固定得值")
	switch 60{
		case 60:
			fmt.Println("固定的值60")
		default:
			fmt.Println("没有值")
	}
	const STATUS int = 100
	switch STATUS{
		case 100:
			fmt.Println("满分100!")
		default:
			fmt.Println("没有值")
	}
}
// 结果
测试固定得值
固定的值60

// 定义一个带有返回值的函数
package tiaojian

import "fmt"

func returnInt() int {
	return 70
}

func SwitchVar(){
	var num int
	fmt.Scan(&num)
	switch returnInt(){
		case 70:
			fmt.Println("函数返回值70")
		default:
			fmt.Println("没有值")
	}
}
  1. 实战: case后面的表达式如果是常量值(字面量)则要求不能重复
    在这里插入图片描述

  2. 实战: case后面的表达式如果是常量值(字面量)则要求不能重复
    在这里插入图片描述

  3. 实战:case后面可以多个值使用逗号分割,比如case 值1,值2……

switch 70 {
	case 60, 70, 8:
		fmt.Println("固定的值60")
	default:
		fmt.Println("没有值")
	}
  1. 实战:switch后也可以不带表达式,当作if分支来使用
switch {
	case num ==1:
		fmt.Println("这是可以当作if语句使用")
}
  1. 实战:switch后也可以直接声明/定义一个变量,分号结束,需要使用num:=xxx得方式声明;
switch test :=12; {
	case test == 12:
		fmt.Println("这是一个变量值等于12")
	case test > 12:
		fmt.Println("这个变量大于12")
}

1.1.2 总结

  1. switch {} 括号里需要是布尔类型
  2. switch test {}case后面需要是常量
  3. 无条件执行下一步使用fallthrough即可
package tiaojian

import "fmt"

func SwitchVar(){
	fmt.Println("------总结------")
	var num1 int =12
	// switch后面不跟值
	switch {
		case num1 == 12:
			fmt.Println("这是12")
		case num1 == 13:
			fmt.Println("这是13")
		default:
			fmt.Println("这是default")
	}
	// switch后面跟变量
	switch num1{
		case 12:
			fmt.Println("这是12")
		case 13:
			fmt.Println("这是13")
		default:
			fmt.Println("这是default")
	}
	// switch后面跟声明变量 相当于 var num2 int 13; switch {}
	switch num2:=13; {
		case num1 == 12:
			fmt.Println("这是12")
		case num2 == 12:
			fmt.Println("这是13")
		default:
			fmt.Println("这是default")
	}
}

1.3 常见错误

  1. else必须要和中括号的反括号在一行
    在这里插入图片描述

2.循环语句

2.1 循环语句for

  1. 解决的问题
    如果有重复的值不断累加计算的话,比如 从1+100 那么我要么写100个变量,相加。所以对这种循环可以使用for解决
var a1 int 1
var a2 int 2 
……
var a100 int 100
var sum int = a1+a2+……+a100
  1. for语法
    for 循环是一个循环控制结构,可以执行指定次数的循环。
// Like a C for
for init; condition; post { }

// Like a C while
for condition { }

// Like a C for(;;)
for { }
---------
翻译成中文就是
for 初始化语句;循环条件;后置语句{}


  1. 实战测试
package tiaojian
// for循环语句
import "fmt"

func DemoFor(){
	for i:=0; i < 10 ;i++{
		fmt.Println(i)
	}
}
输出结果:0 1 2 3 4 5 6 7 8 9
或者

package tiaojian
// for循环语句
import "fmt"

func DemoFor(){
    for i:=0; i < 10 ;i+=2{
        fmt.Println(i)
    }

}
输出结果:0 2 4 6 8

2.2 For循环功能

  1. for 在Go语言中可以当作while使用,因为Go语言中没有while关键词
for {
	fmt.Println("无限循环")
}
或者
for ;;{
	xxx
}
  1. 实战测试
package tiaojian
// for循环语句
import (
	"fmt"
	"time"
)

func DemoFor(){
	var count int = 0
	for i:=0; i < 10 ;i+=2{
		fmt.Println(i)
	}
	// 无限循环方法1
	fmt.Println("无限循环方法!")
	for {
		time.Sleep(1 * time.Second)
		fmt.Println("无限循环!1")
		count ++
		if count >=3 {
			break
		}
	}
	// 无限循环方法2
	for ;; {
		time.Sleep(1 * time.Second)
		fmt.Println("无限循环!2")
	}
}

2.3 for range遍历函数

  1. 简介
    range关键字用于迭代数组(Array)、切片(Slice)、字符串(String)、映射(Map)、通道(Channel)等数据结构。它提供了一种简洁的方式来遍历这些数据结构的元素。如果不使用range for就是按照那个字节输出,如果遇到中文就会有问题,因为中英文字节不一样。所以会乱码,使用range就是可以遍历完成的。
    可以直接理解为
    range xxx 返回值是一个下标和值
    index,value = range xxx
  2. 实战
package tiaojian

import "fmt"

func DemoForRange(){
	var str string = "hello golang 你好"
	// 这里是按照字节遍历输出的
	for i :=0; i < len(str) ; i++{
		fmt.Printf("%c\n", str[i])
	}
	// 使用range函数
	for index, value := range str{
		fmt.Printf("index:%v, value=%c\n ", index, value)
	}
}
//输出结果
h
e
l
l
o

g
o
l
a
n
g

ä
½
 
å
¥
½
index:0, value=h
 index:1, value=e
 index:2, value=l
 index:3, value=l
 index:4, value=o
 index:5, value=
 index:6, value=g
 index:7, value=o
 index:8, value=l
 index:9, value=a
 index:10, value=n
 index:11, value=g
 index:12, value=
 index:13, value=你
 index:16, value=

3.关键词

3.1 关键词break

  1. 简介
    break的作用就是跳过循环
  2. 实战:实现一个累加,大于等于100就跳出循环
package tiaojian

import "fmt"

func DemoBreak(){
	sum := 0
	for i :=0; i < 100; i++{
		sum += i 
		if sum >= 100{
			fmt.Println("i=", i, "sum=", sum)
			break
		}else{
			fmt.Println("sum=", sum)
		}
	}
}

3.2 continue关键字

  1. 简介跳出本次循环,不影响下一次循环
  2. 实战
package tiaojian
// continue作用
import "fmt"

func DemoContinue(){
	for i:=0; i < 5; i ++{
		if i == 3 {
			fmt.Println("跳出本次循环:", i)
			continue
		}
		fmt.Println("i=",i)
	}
}
// 输出结果
开始运行:
当前机器状态: 正常
i= 0
i= 1
i= 2
跳出本次循环: 3
i= 4

3.3 goto关键字

  1. 可以转到程序中的指定的行
  2. 通常与条件语句搭配使用,可以来实现条件转移
  3. 在Go或者c语言程序设计中一般其实是不建议使用goto语句,以免造成程序流程的混乱,曾经在C中出现过goto危机
package tiaojian

// goto语句

import "fmt"

func DemoGoto(){
	fmt.Println("goto01")
	goto title1
	fmt.Println("goto02")
	fmt.Println("goto03")
	title1:
	fmt.Println("goto04")
	fmt.Println("goto05")
	fmt.Println("goto06")
}

3.4 return关键词

  1. 用于提前结束函数
func divide(a, b float64) (float64, error) {
    if b == 0 {
        return 0, fmt.Errorf("division by zero")
    }
    return a / b, nil
}
  1. 返回结果,可以将函数的返回值给调用者
func add(a, b int) int {
    return a + b
}

4.题目

4.1 99乘法表

  1. 实现99乘法表
package tiaojian
// 99乘法表
import "fmt"

func Demo99(){
	for i := 1; i <=9; i++{
		for j:=1; j <=i; j++{
			fmt.Printf("%dx%d=%d ", j, i, i*j)
			if i == j{
				println()				
			}
		}
	}
}

// 输出结果
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
1x4=4 2x4=8 3x4=12 4x4=16
1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1442955.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[论文精读]Community-Aware Transformer for Autism Prediction in fMRI Connectome

论文网址&#xff1a;[2307.10181] Community-Aware Transformer for Autism Prediction in fMRI Connectome (arxiv.org) 论文代码&#xff1a;GitHub - ubc-tea/Com-BrainTF: The official Pytorch implementation of paper "Community-Aware Transformer for Autism P…

Python解决SSL不可用问题

参考&#xff1a;https://blog.csdn.net/weixin_44894162/article/details/126342591 一、问题描述&#xff1a; 报错概述&#xff1a; WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available. ## 警告:pip配…

空气质量预测 | Matlab实现基于BP神经网络回归的空气质量预测模型

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 政府机构使用空气质量指数 (AQI) 向公众传达当前空气污染程度或预测空气污染程度。 随着 AQI 的上升,公共卫生风险也会增加。 不同国家有自己的空气质量指数,对应不同国家的空气质量标准。 基于BP(Backpropag…

微服务学习 | Spring Cloud 中使用 Sentinel 实现服务限流

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站https://www.captainbed.cn/kitie。 目录 前言 通过代码实现限流 定义资源 通过代码定义资源 通过注解方式定义资源 定义限流规则 通过…

反序列化漏洞——PHP原生类

Error类 PHP>7.0&#xff0c;因为存在__toString&#xff0c;可以进行XSS Exception类 因为存在__toString&#xff0c;可以进行XSS DirectoryIterator类 因为存在__toString&#xff0c;可以获取符合要求的第一个文件名 SplFileObject类 因为存在__toString&#xff0c…

深入浅出:Golang的Crypto/SHA256库实战指南

深入浅出&#xff1a;Golang的Crypto/SHA256库实战指南 介绍crypto/sha256库概览主要功能应用场景库结构和接口实例 基础使用教程字符串哈希化文件哈希化处理大型数据 进阶使用方法增量哈希计算使用Salt增强安全性多线程哈希计算 实际案例分析案例一&#xff1a;安全用户认证系…

缺省参数(c++)

void fun(int a0) { cout<<a<<endl; } 当我们调用函数时: fun(10) 输出10; fun&#xff08;&#xff09; 未传参时&#xff1a; 输出0; 未传参时a就会接受0&#xff0c;相当于这个0就是“备胎” 传参了0就没有用 全缺省 void fun2(int a10,int b3,int…

力扣刷题之旅:进阶篇(六)—— 图论与最短路径问题

力扣&#xff08;LeetCode&#xff09;是一个在线编程平台&#xff0c;主要用于帮助程序员提升算法和数据结构方面的能力。以下是一些力扣上的入门题目&#xff0c;以及它们的解题代码。 --点击进入刷题地址 引言 在算法的广阔天地中&#xff0c;图论是一个非常重要的领域。…

【开源】JAVA+Vue+SpringBoot实现实验室耗材管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 耗材档案模块2.2 耗材入库模块2.3 耗材出库模块2.4 耗材申请模块2.5 耗材审核模块 三、系统展示四、核心代码4.1 查询耗材品类4.2 查询资产出库清单4.3 资产出库4.4 查询入库单4.5 资产入库 五、免责说明 一、摘要 1.1…

《软件方法》强化自测题-总纲(8)

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 按照业务建模、需求、分析、设计工作流考察&#xff0c;答案不直接给出&#xff0c;可访问自测链接或扫二维码自测&#xff0c;做到全对才能知道答案。 知识点见《软件方法》、“软件…

低代码市场的未来展望:趋势、机遇与挑战

根据 Zoho 的一项新研究&#xff0c;低代码市场正处于成为主流的风口浪尖。该报告对全球 800 多名 IT 和业务领导者进行了调查&#xff0c;确定了推动其采用的几个因素。其中最重要的是提高应用程序的开发速度。 这一发现对企业领导者来说应该不足为奇。 客户、合作伙伴和员工…

[职场] 如何通过运营面试_1 #笔记#媒体#经验分享

如何通过运营面试 盈利是公司的事情&#xff0c;而用户就是你运营的事情。你需要彻底建立一个庞大而有效的用户群&#xff0c;这样才能让你们的公司想盈利就盈利&#xff0c;想战略就战略&#xff0c;想融资就融资。 一般从事运营的人有着强大的自信心&#xff0c;后台数据分析…

STM32的ADC电压采集

时间记录&#xff1a;2024/2/9 一、ADC相关知识点 &#xff08;1&#xff09;STM32的ADC时钟不要超过14MHz&#xff0c;不然结果的准确率将下降 &#xff08;2&#xff09;ADC分为规则组和注入组&#xff0c;规则组相当于正常运行的程序&#xff0c;注入组相当于中断可以打断…

刘谦春晚纸牌魔术背后的数学—海明码原理简介

在昨天2024年的春晚舞台上&#xff0c;魔术大师刘谦以一场令人拍案叫绝的纸牌魔术再度震撼全场。他巧妙地利用了数学原理&#xff0c;精准无误地让观众“随机”选择的纸牌完成了配对&#xff0c;尤其是令人忍俊不禁的是主持人尼格买提的纸牌却没有如愿配对&#xff0c;小尼碎了…

Java实现快乐贩卖馆管理系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 搞笑视频模块2.3 视频收藏模块2.4 视频评分模块2.5 视频交易模块2.6 视频好友模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 搞笑视频表3.2.2 视频收藏表3.2.3 视频评分表3.2.4 视频交易表 四、系…

python从入门到精通(十):python爬虫的BeautifulSoup4

python爬虫的BeautifulSoup4 BeautifulSoup4导入模块解析文件创建对象python解析器beautifulsoup对象的种类Tag获取整个标签获取标签里的属性和属性值Navigablestring 获取标签里的内容BeautifulSoup获取整个文档Comment输出的内容不包含注释符号BeautifulSoup文档遍历Beautifu…

多线程JUC:等待唤醒机制(生产者消费者模式)

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;多线程&JUC&#xff1a;解决线程安全问题——synchronized同步代码块、Lock锁 &#x1f4da;订阅专栏&#xff1a;多线程&am…

卫星通讯领域FPGA关注技术:算法和图像方面(2)

最近关注的公众号提到了从事移动通信、卫星通讯等领域的FPGA、ASIC、信号处理算法等工程师可能需要关注的技术&#xff0c;有MVDR算法、高速基带芯片、RF芯片、毫米波有源相控阵天线、无线AI&#xff0c;以下做了一些基础的调研&#xff1a; 1 MVDR算法 声源定位是一个阵列信…

【数据结构与算法】【约瑟夫问题】还在用递归?教你用链表秒杀约瑟夫

&#x1f389;&#x1f389;欢迎光临&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;特别推荐给大家我的最新专栏《数据结构与算法&#xff1a;初学者入门指南》&#x1f4d8;&am…

【Kubernetes】在k8s1.24及以上版本基于containerd容器运行时测试pod从harbor拉取镜像

基于containerd容器运行时测试pod从harbor拉取镜像 1、安装高版本containerd2、安装docker3、登录harbor上传镜像4、从harbor拉取镜像 1、安装高版本containerd 集群中各个节点都要操作 yum remove containerd.io -y yum install containerd.io-1.6.22* -y cd /etc/containe…