Go学习 Go学习笔记day3

Posted by YN Blog on June 10, 2020

day03基础知识

今日概要

  • swich else语句,条件判断。

  • for循环语句,循环。

  • goto语法,不太建议大家使用。

  • 字符串的格式化,”拼接“数据。

  • 运算符

1.switch语句

package main

import "fmt"

func main() {
	//表达式
	/*
	switch 1+1 {
		case 1 :
			fmt.Println("等于1")
		case 2 :
			fmt.Println("等于2")
		case 3 :
			fmt.Println("等于3")
		case 4 :
			fmt.Println("等于4")
	}

	 */


	//变量
	var age int
	fmt.Scanln(&age)
	switch age {
	case 1 :
		fmt.Println("等于1")
	case 2 :
		fmt.Println("等于2")
	case 3 :
		fmt.Println("等于3")
	case 4 :
		fmt.Println("等于4")
	default:
		fmt.Println("都不满足")
	}

	//注意事项:数据类型一致的情况。 正确:1>2 3+4  错误:1>"3"   5+"6"

}

2.for循环

2.1死循环
for {
	···
}
2.2布尔值
for 1>2{
	···
}
flag := true
for flag {
	···
}

示例

package main

func main() {
	//示例1:死循环
	/*
	fmt.Println("开始")
	for{
		fmt.Println("红鲤鱼与绿鲤鱼与驴")
		time.Sleep(time.Second*1)  //等一秒再继续执行
	}
	fmt.Println("结束")
	*/


	//示例2:
	/*
	for 2>1{
		fmt.Println("红鲤鱼与绿鲤鱼与驴")
		time.Sleep(time.Second*1)  //等一秒再继续执行
	}
	fmt.Println("结束")
	*/


	//示例:3
	/*
	number := 1
	for number < 5 {
		fmt.Println("钓鱼要钓刀鱼,刀鱼要到岛上钓")
		number = 10
	}
	fmt.Println("结束")
	*/

	//示例:4
	/*
	fmt.Println("开始")
	number := 1
	for number < 5 {
		fmt.Println("钓鱼要钓刀鱼,刀鱼要到岛上钓")
		time.Sleep(time.Second*1)
		number = number + 1
	}
	fmt.Println("结束")
	*/

	//示例:5
	/*
	fmt.Println("开始")
	flag := true
	for flag {
		fmt.Println("钓鱼要钓刀鱼,刀鱼要到岛上钓")
		time.Sleep(time.Second*1)
		flag = false
	}
	fmt.Println("结束")
	*/

	

}
2.3变量和条件
for i := 1;i<10;{
	fmt.Println("钓鱼要钓刀鱼,刀鱼要到岛上钓")
  i = i+1	
}
2.4变量&条件&变量赋值
for i := 1;i<10;i = i+1	;{
	fmt.Println("钓鱼要钓刀鱼,刀鱼要到岛上钓")
}

扩展:对于i=i+1简写–> i++

	num := 10
	fmt.Println(num)
	num++  //等价于 num = num + 1
	fmt.Println(num)

阶段练习

  1. 猜数字,设定一个理想的数字,比如66,一直提示让用户输入数字,如果比66大了,则显示猜测的结果大了;如果比66小,则显示猜测的结果小了,只有输入等于66,显示猜测结果正确,然后退出循环。

    var num int
    	for num != 66{
    		fmt.Println("请输入数字:")
    		fmt.Scanln(&num)
    		if num < 66{
    			fmt.Println("猜测的数字小了")
    		}else if num > 66{
    			fmt.Println("猜测的数字大了")
    		}else{
    			fmt.Println("猜测的结果正确")
    		}
    
  2. 使用循环输出1-100所有整数。

    for i :=1;i<=100 ;i++{
    		fmt.Println(i)
    	}
    
  3. 使用循环输出1 2 3 4 5 6 8 9 10,即:10以内除7以外的整数。

    for i:=1;i<=10;i++{
    		if i !=7{
    			fmt.Println(i)
    		}
    	}
    
  4. 输出 1-100 内所有的奇数。

    	for i := 1; i <= 100; i++{
    		if i%2 != 0 {
    			fmt.Println(i)
    		}
    	}
    
  5. 输出1-100内所有的偶数。

    for i := 1; i <= 100; i++{
    		if i%2 == 0 {
    			fmt.Println(i)
    		}
    	}
    
  6. 求1-100内所有整数的和。

    	sum := 0
    	for i := 1; i <= 100; i++ {
    		sum = sum + i
    	}
    	fmt.Println(sum)
    
  7. 输出10-1所有整数。

    	for i:=10;i>0;i--{
    		fmt.Println(i)
    	}
    
2.5 continue

在for循环中使用,循环遇到continue关键字时,会停止当前循环,开始下一次循环。

for {
	fmt.Println("alex今天不在家,xx你来陪我呀!!!")
	continue
	fmt,Println("让xx也一起来")
}

案例1:使用循环输出1 2 3 4 5 6 8 9 10,即:10以内除7以外的整数。

for i:=1;i<=10;i++{
	if i == 7{
			continue
	}
	fmt.Println(i)
}

案例2:for循环嵌套

for i:=1;i<3;i++{
	// i=1
	// i =2 
	for j:=1;j<5;j=={
			// j=1/2/3/4
			fmt.Println(i,j)
	}
}
>>>输出
1 1
1 2
1 3
1 4
2 1
2 2
2 3
2 4

案例3:for循环嵌套 + continue

for i:=1;i<3;i++{
	// i=1
	// i =2 
	for j:=1;j<5;j=={
			// j=1/2/3/4
			if j == 3 {
			continue
			}
			fmt.Println(i,j)
	}
}

>>>输出
1 1
1 2
1 4
2 1
2 2
2 4

2.6 break

在for循环中时,循环中一旦遇到break,跳出循环。

for{
	fmtPintln("hello")
	break
	fmt.Println("world")
	}

案例:猜数字,设定一个理想的数字,比如66,一直提示让用户输入数字,如果比66大了,则显示猜测的结果大了;如果比66小,则显示猜测的结果小了,只有输入等于66,显示猜测结果正确,然后退出循环。

var num int
	for num != 66{
		fmt.Println("请输入数字:")
		fmt.Scanln(&num)
		if num < 66{
			fmt.Println("猜测的数字小了")
		}else if num > 66{
			fmt.Println("猜测的数字大了")
		}else{
			fmt.Println("猜测的结果正确")
      break
		}

案例2:

for i:=1;i<3;i++{
	// i=1
	// i =2 
	for j:=1;j<5;j=={
			// j=1/2/3/4
			if j == 3 {
			break
			}
			fmt.Println(i,j)
	}
  break
}
>>> 输出
1 1
1 2

对for进行打标签,然后通过break和continue就可以实现多层循环的跳出和终止

f1:for i:=1;i<3;i++{ 
	for j:=1;j<5;j=={
			// j=1/2/3/4
			if j == 3 {
			continue f1
			}
			fmt.Println(i,j)
	}
}

>>> 输出
1 1 
1 2
2 1
2 2 
f1:for i:=1;i<3;i++{ 
	for j:=1;j<5;j=={
			// j=1/2/3/4
			if j == 3 {
			brea f1
			}
			fmt.Println(i,j)
	}
}

>>> 输出
1 1 
1 2

3.goto语句

跳跃到指定的行,然后向下执行代码。

package main

import "fmt"

func main() {
	var name string
	fmt.Println("请输入姓名:")
	fmt.Scanln(&name)

	if name == "yannian"{
		//svip
		goto SVIP
	}else if name == "xxx"{
		//vip
		goto VIP
	}
	fmt.Println("预约")
VIP:
	fmt.Println("等号")

SVIP:
	fmt.Println("进入")
	
}

4.字符串格式化

package main

import "fmt"

func main() {
	var name,address,action string

	fmt.Println("请输入姓名:")
	fmt.Scanln(&name)

	fmt.Println("请输入位置:")
	fmt.Scanln(&address)

	fmt.Println("请输入行为:")
	fmt.Scanln(&action)

	result := fmt.Sprintf("我叫%s,在%s正在干%s",name,address,action)
	fmt.Println(result)
}

5.运算符

5.1算数运算符

image-20200611163413364

5.2关系运算符

image-20200611163509803

5.3逻辑运算符

image-20200611163600918

if !true{
  fmt.Println("你是风儿我是沙")
}
5.4位运算

image-20200611163750752

必知必会概念:

  • 计算机中的存储、运算、网络传输等任何的行为,本质上都是二进制的操作。例如:01010101
A																	B
hello  ---> 010101100110101 --->	hello
  • 信息的表现形式
二进制表示0101010101011   -->  hello
十进制表示1921            ---> hello
  • 十进制和二进制的转换关系
十进制 二进制
0 0
1 1
2 10
3 11
4 100
5 101
  • 二进制转换为十进制
10101   -> 2**4+2**2+2**0  => 21
  • 十进制转换成二进制
99   -> 64 + 32 + 2 + 1 => 2**6 + 2**5 + 2**1 + 2**0 => 1100011

位运算指的是二进制之间的运算:

//1.按位进行与运算(全为1,才得1)
r1 := 5 & 99
5  -> 0000101
99 -> 1100011
		  0000001  -> 1 
//2.按位进行或运算(只要有1,就得1)
r1 := 5 | 99
5  -> 0000101
99 -> 1100011
			1100111  -> 103

//3.按位进行异或运算
r1 := 5 ^ 99
5  -> 0000101
99 -> 1100011
			1100110	->102
//4.按位向左移动
r1 := 5 << 2
5  -> 101
向左移动2位  --> 10100  ->2**4+2**2 = 16+4 =20

//5.按位向右移动
r1 := 5 >> 1
5  -> 101
向右移动一位  ->10 = 2

//6.比较清除   //以前面的值为基准,让前面的与和后面的值进行二进制位进行比较,如果两个位置都是1则将前面的值得那个位置置0
r1 := 5 &^ 99
5  -> 0000101
99 -> 1100011
			0000100  -> 2**2 =4

5.5 赋值运算

image-20200611183450261

age := 19
age = 99

age = age + 9 //age+=9
age = age - 9 //age-=9
age = age * 9 //age*=9
...
运算符的优先级
precedence		Operator
5							* / % << >> & &^
4							+ - | ^
3							== != < <= >=
2							&&
1							||

注意:不要想办法去记住他,使用括号。

叮嘱:不要太过于用心去背,去记,主要认识即可。优先级记不住就用括号。

今日作业

  1. 猜年龄游戏,要求:允许用户最多尝试3次,3次都没猜对的话,就直接退出,如果猜对了,打印恭喜信息并退出。

    package main
       
    import "fmt"
       
    func main() {
    	 num := 66
    	var usernum int
    	 times := 3
    	for times > 0 {
    		fmt.Println("请输入数字:")
    		fmt.Scanln(&usernum)
    		if usernum == num{
    			fmt.Println("恭喜你猜对了")
    			break
    		}
    		times-=1
    	}
    }
       
    
  2. 实现用户登录系统,并要求支持连续3次输入错误后直接退出,并且在每次输出错误时显示剩余错我的次数(提示:使用字符串格式化)。

    package main
       
    import "fmt"
       
    func main() {
    	var user, password string
    	times := 3
       
    	for times > 0 {
    		times -= 1
    		fmt.Println("请输入用户名:")
    		fmt.Scanln(&user)
       
    		fmt.Println("请输入密码:")
    		fmt.Scanln(&password)
    		if user == "alex" && password == "123" {
    			fmt.Println("登录成功")
    			break
    		} else {
    			p1 := fmt.Sprintf("你还有%d次输入机会", times)
    			fmt.Println(p1)
    		}
    	 }
    }