Go练习题(1)

1.99乘法口诀
2.猜数字
3.猜数字(加强版)

package main

import (
	"fmt"
	"math/rand"
	"time"
)

func main() {
	//1.乘法口诀

	for i := 1; i <= 9; i++ {
		for j := 1; j <= 9; j++ {
			if j > i {
				break
			}
			fmt.Printf("%v*%v=%v\t", i, j, i*j)
		}
		fmt.Println()
	}

	for i := 1; i <= 9; i++ {
		for j := 1; j <= i; j++ {
			fmt.Printf("%v*%v=%v\t", i, j, i*j)
		}
		fmt.Println()
	}
	//2.猜数字
	/*随机生成一个数字让用户猜
	用户猜的比生成的大 提是菜大了 并且提是还有几次机会
	用户猜的比生成的小 提是菜小了 并且提是还有几次机会
	用户猜对了  提是very goot
	最多5次机会  都错了提是太笨了
	*/
	//设置随机数种子

	//goto解法
	rand.Seed(time.Now().Unix())
	var num int
	num = rand.Intn(100)
END:
	for i := 1; i <= 6; i++ {
		if i == 6 {
			fmt.Println("5次都猜不对真笨")
			break
		}
		var user int
		fmt.Printf("请输入数字:")
		fmt.Scan(&user)
		switch {
		case user < num:
			fmt.Printf("太小了,还有%d次机会\n", 5-i)
		case user > num:
			fmt.Printf("太大了,还有%d次机会\n", 5-i)
		default:
			fmt.Println("猜对了,猜了%d次就猜对了\n", i)
			break END
		}
	}

	//第二种解法
	rand.Seed(time.Now().Unix())
	var (
		num  int
		user int
	)
	num = rand.Intn(100)
	var max int = 5
	for i := 1; i <= max; i++ {
		fmt.Print("请输入数字")
		fmt.Scan(&user)
		if user == num {
			fmt.Printf("太聪明了,第%d就猜对了\n", i)
			break
		} else if user < num {
			fmt.Printf("小了,还有%d次机会\n", max-i)
		} else {
			fmt.Printf("大了了,还有%d次机会\n", max-i)
		}
		if i == max {
			fmt.Println("太笨了")
			break
		}
	}

	//第三种解法
	rand.Seed(time.Now().Unix())
	var (
		num  int
		user int
		isOk bool = false
	)
	num = rand.Intn(100)
	var max int = 5
	for i := 1; i <= max; i++ {
		fmt.Print("请输入数字:")
		fmt.Scan(&user)
		if user == num {
			fmt.Printf("太聪明了,第%d就猜对了\n", i)
			isOk = true
			break
		} else if user < num {
			fmt.Printf("小了,还有%d次机会\n", max-i)
		} else {
			fmt.Printf("大了了,还有%d次机会\n", max-i)
		}
	}
	if !isOk {
		fmt.Println("太笨了")
	}

	//3.如果5次都没有猜中,提是太笨了 ,重新开始猜数字游戏  重新生成随机数 重新开始5次计数
	//第一种解法
START:
	rand.Seed(time.Now().Unix())
	var (
		num  int
		user int
	)
	num = rand.Intn(100)
END:
	for i := 1; i <= 5; i++ {
		fmt.Printf("请输入数字:")
		fmt.Scan(&user)
		switch {
		case user < num:
			fmt.Printf("太小了,还有%d次机会\n", 5-i)
		case user > num:
			fmt.Printf("太大了,还有%d次机会\n", 5-i)
		default:
			fmt.Println("猜对了,猜了%d次就猜对了\n", i)
			break END
		}
		if i == 5 {
			var restart string
			fmt.Printf("是否重新开始猜数Y/N:")
			fmt.Scan(&restart)
			if restart == "Y" || restart == "y" {
				goto START
			}
		}
	}

	//第二种解法
	rand.Seed(time.Now().Unix())
	var (
		num     int
		user    int
		restart string
	)
	num = rand.Intn(100)
	var max int = 5
	for {
		for i := 1; i <= max; i++ {
			fmt.Print("请输入数字")
			fmt.Scan(&user)
			if user == num {
				fmt.Printf("太聪明了,第%d就猜对了\n", i)
				break
			} else if user < num {
				fmt.Printf("小了,还有%d次机会\n", max-i)
			} else {
				fmt.Printf("大了了,还有%d次机会\n", max-i)
			}
			if i == max {
				fmt.Println("太笨了")
			}
		}
		fmt.Printf("是否继续Y/N:")
		fmt.Scan(&restart)
		if restart == "n" || restart == "N" {
			break
		}
	}

	//第三种解法
	rand.Seed(time.Now().Unix())
	var (
		num     int
		user    int
		isOk    bool = false
		restart string
	)
	num = rand.Intn(100)
	var max int = 5
	for {
		for i := 1; i <= max; i++ {
			fmt.Print("请输入数字:")
			fmt.Scan(&user)
			if user == num {
				fmt.Printf("太聪明了,第%d就猜对了\n", i)
				isOk = true
				break
			} else if user < num {
				fmt.Printf("小了,还有%d次机会\n", max-i)
			} else {
				fmt.Printf("大了了,还有%d次机会\n", max-i)
			}
		}
		if !isOk {
			fmt.Println("太笨了")
		}
		fmt.Printf("是否继续Y/N:")
		fmt.Scan(&restart)
		if restart == "n" || restart == "N" {
			break
		}
	}
}

//总结
/*
	1.随机数种子 在程序初始化只用初始化一次
	2.清楚了解代码执行逻辑,删除荣誉
	3.注意变量定义位置
	4.注意代码格式(缩进与对其)
	5.注意对不同分支中的相同逻辑代码进行合并
	6.尝试fmt.Printlb(),fmt.Print(""),fmt.Print(" "),fmt.Println("\n"),fmt.Print("\n")的区别
	7.掌握fmt.Printf()对齐方式
	8.代码要做减法,用最清晰的逻辑实现代码功能

*/
发布了92 篇原创文章 · 获赞 12 · 访问量 5697

猜你喜欢

转载自blog.csdn.net/weixin_45413603/article/details/104640029