[流程控制]:循环语句案例1


python 和 golang 中的 循环语句案例1。

> 需求

首先生成一个1-100之间的随机数,然后构造一个死循环,用户可以选择进行猜数游戏,也可以选择退出,如果用户猜得不对,对应返回 “猜大了” “猜小了” ,如果用户猜对了,则退出循环,结束程序。

> 实现

  • python
import random

targets = random.randint(1,100)

while True:

    msg = input("猜数游戏,输入(q/Q)可退出: ")
    msg = msg.strip()

    if msg.upper() == "Q":
        print("游戏退出...")
        break

    if not msg.isdecimal():
        print("应输入数字!")
        continue

    guess = int(msg)

    if guess > targets:
        print("猜大了")
    elif guess < targets:
        print("猜小了")
    else:
        print("猜对了")
        break

print("游戏结束,答案为:",targets)

代码执行结果如下:

  • golang
package main

import (
	"bufio"
	"fmt"
	"log"
	"math/rand" // 这个地方是包的导入路径,而非包的名称
	"os"
	"strconv"
	"strings"
	"time"
)

func main() {

	// 生成随机数
	seconds := time.Now().Unix()  // Unix时间戳
	rand.Seed(seconds)            // 不同的种子才能生成不同的随机数
	targets := rand.Intn(100) + 1 // 根据种子的情况,对应返回一个 1-100 之间的数

	// 构造死循环
	for {
		// 打印信息
		fmt.Print("猜数游戏,输入(q/Q)可退出: ")

		// 获取键盘输入
		reader := bufio.NewReader(os.Stdin)
		msg, err := reader.ReadString('\n')
		if err != nil {
			fmt.Println("输入错误")
			log.Fatal(err)
		}

		// 删除换行
		msg = strings.TrimSpace(msg)

		// 处理用户退出请求
		if strings.ToUpper(msg) == "Q" {
			fmt.Println("游戏退出...")
			break
		}

		// 转换为整数
		guess, err := strconv.Atoi(msg)
		if err != nil {
			fmt.Println("转换错误")
			log.Fatal(err)
		}

		// 判断
		if guess > targets {
			fmt.Println("猜大了")
		} else if guess < targets {
			fmt.Println("猜小了")
		} else {
			fmt.Println("猜对了")
			break
		}
	}

	fmt.Println("游戏结束,答案为:", targets)
}

代码执行结果如下: