Golang之随机点名程序

前言

之前接触了一会儿go,现在又有一会儿没写了,拿个题目练练顺便回顾一下,一起来看看吧


程序要求

读取记录有人员名字的文件(一个名字占一行),进行交互式随机点名,被点过的人不会再次被点,当输入q或者全部人员都被点过后退出程序。

实现代码

package main

import (
	"fmt"
	"io/ioutil"
	"math/rand"
	"strings"
	"time"
)

func main() {
	// 读取文件的所有内容
	data, err := ioutil.ReadFile("C:/Users/admin/Desktop/go/点名名单.txt")
	if err != nil {
		fmt.Println("读取文件失败:", err)
		return
	}

	// 将字符串按行拆分为一个字符串数组,windows中以\r\n为换行
	lines := strings.Split(string(data), "\r\n")

	// 人员个数
	num := len(lines)
	opt:=""
	for {
		if num<1 {
			fmt.Println("全部人员已点过,程序退出")
			break
		}
		fmt.Print("输入回车进行随机点名,按q退出:")
		//接收用户输入赋值给opt,返回参数个数和错误信息
		_,err=fmt.Scanln(&opt)
		if opt=="q" {
			break
		}
		// 初始化随机种子
		rand.Seed(time.Now().Unix())

		// 生成一个 0 到 16 之间的随机整数
		random := rand.Intn(num)
		fmt.Println("恭喜",lines[random])
		lines=append(lines, lines[random])
		//截取指定下标前面的元素再追加指定下标之后的元素。“...”切片操作符
		lines = append(lines[:random], lines[random+1:]...)
		num--
	}

	// 打印每一行的内容
	for _, line := range lines {
		fmt.Println(line)
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

只何

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值