// 定义一个数据,存放班上所有同学姓名 按任意键,随机抽取一个同学,如果被抽到了,删除这个同学姓名,如果输入了q或数据为空,退出程序
func drawName(names []string) {
rand.Seed(time.Now().UnixNano())
for len(names) > 0 {
fmt.Println("请输入任意键,随机抽取一个同学并删除,输入q或数据为空,退出程序")
var input string
fmt.Scan(&input)
if input == "q" {
fmt.Println("退出程序成功")
return
}
nameIndex := rand.Intn(len(names))
name := names[nameIndex]
names = append(names[:nameIndex], names[nameIndex+1:]...)
//...将第二个切片作为整体传递给append函数,不加...会报错,不是int类型
//当你使用 append 函数时,如果想要将一个切片作为单独的参数传递给 append 函数,而不是将其元素逐一传递,就需要使用省略号 ...。这是因为 append 函数接受一个或多个切片作为参数,并且这些切片会被展开为单个元素。当你想要将整个切片作为一个整体传递时,就需要使用省略号 ...。
fmt.Println("随机抽取的姓名是:", name)
fmt.Println(name, "已被移除")
fmt.Println("剩余的姓名是:", names)
}
fmt.Println("所有姓名已抽取完毕")
}
func main() {
names := []string{}
file, err := os.OpenFile("E:\\三创\\hrsy-go\\test.txt", os.O_RDONLY, 0777) // 使用八进制表示权限
if err != nil {
fmt.Println("打开文件失败", err)
return
}
reader := bufio.NewReader(file)
for {
arr1, _, err := reader.ReadLine()
if err == io.EOF {
break
}
b := string(arr1)
names = append(names, b)
}
drawName(names)
}
//rand.Seed(time.Now().UnixNano()) 初始化随机数种子 这是一个很大的数从初始到现在的时间 确保每次生成的随机数不一样
//UnixNano() 方法是 time.Time 类型的一个方法,用于返回自 Unix 纪元 (1970-01-01T00:00:00Z UTC) 开始以来的纳秒数,时间会变化
//nameIndex := rand.Intn(len(names)) Intn之前要先初始化,返回【0,n)的随机数
//使用固定的种子值 rand.Seed(12345) 方便测试和发现问题 每次运行程序生成的随机数序列相同
//定义全局变量不能用:=赋值,只能用:=初始化
//stu := [...]string{"张三", "李四", "王五", "赵六", "孙七", "周八"} ...代表数组
//[]string{"张三", "李四", "王五", "赵六", "孙七", "周八"} []表示切片
//func main() {
// var input string
// stu := []string{"张三", "李四", "王五", "赵六", "孙七", "周八"}
// for len(stu)>0 && input != "q" && input != "Q"{
// fmt.Println("请输入任意键,随机抽取一个同学并删除,输入q或数据为空,退出程序")
// fmt.Scan(&input)
// if input == "q" {
// fmt.Println("退出程序成功")
// return
// }
// nameIndex := rand.Intn(len(stu))
// name := stu[nameIndex]
// stu = append(stu[:nameIndex], stu[nameIndex+1:]...)
// fmt.Println("随机抽取的姓名是:", name)
// }
//}
数组和切片练习
最新推荐文章于 2024-09-28 22:05:59 发布