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)
阶段练习
-
猜数字,设定一个理想的数字,比如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("猜测的结果正确") }
-
使用循环输出1-100所有整数。
for i :=1;i<=100 ;i++{ fmt.Println(i) }
-
使用循环输出1 2 3 4 5 6 8 9 10,即:10以内除7以外的整数。
for i:=1;i<=10;i++{ if i !=7{ fmt.Println(i) } }
-
输出 1-100 内所有的奇数。
for i := 1; i <= 100; i++{ if i%2 != 0 { fmt.Println(i) } }
-
输出1-100内所有的偶数。
for i := 1; i <= 100; i++{ if i%2 == 0 { fmt.Println(i) } }
-
求1-100内所有整数的和。
sum := 0 for i := 1; i <= 100; i++ { sum = sum + i } fmt.Println(sum)
-
输出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算数运算符
5.2关系运算符
5.3逻辑运算符
if !true{
fmt.Println("你是风儿我是沙")
}
5.4位运算
必知必会概念:
- 计算机中的存储、运算、网络传输等任何的行为,本质上都是二进制的操作。例如: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 赋值运算
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 ||
注意:不要想办法去记住他,使用括号。
叮嘱:不要太过于用心去背,去记,主要认识即可。优先级记不住就用括号。
今日作业
-
猜年龄游戏,要求:允许用户最多尝试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 } }
-
实现用户登录系统,并要求支持连续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) } } }