java 如何弄个简单的随机点名,不用名字,直接数字就可以
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 如何弄个简单的随机点名,不用名字,直接数字就可以相关的知识,希望对你有一定的参考价值。
老师给我提的第1个小问题,想不明白,求高手指导
import java.util.Random;public class RandomD
public static void main(String[] args)
System.out.println("随机点名开始!我将要在5个同学中点名!");
String[] student="张三","李四","王五","麻子","小猪";
Random rand=new Random();
System.out.println("点名开始:");
try
Thread.sleep(1000);
catch (InterruptedException e)
e.printStackTrace();
System.out.println(student[Math.abs(rand.nextInt()%5)]);
参考技术A Math.random()
返回double值,大于或等于0.0,小于1.0。
(int)(Math.random() * N )+ 1
得到一个小于等于N的随机数 参考技术B 一楼正解!
python制作的点名神器(代码简单,适合初学者),老师再也不用发愁点名了
python制作的点名神器(代码简单,适合初学者),老师再也不用发愁点名了
python利用tkinter制作的点名神器,今天一个老师说让我帮他制作一个可以用来点名的小程序,由于和这个老师的关系比较好,还有就是教师这个岗位也是比较辛苦了,自己也就答应了下来,刚开始的时候,自己和这个老师在交接需求的时候,老师这边也是没有明确啥需求,再者就是这个也是自己义务奉献的,自己写的点名程序也是比较复杂的,当时交给老师的时候,老师半天来了一句,能整个简单的吗,就可以点名就行了。有点伤心,好吧,那就来个最简单的吧。
这个真的是非常简单了哈,文末附有下载地址
先看下效果图吧
python点名神器
头秃,话不多,直接上源码
#!/usr/bin/env python
# coding:gbk
import pyttsx3
import openpyxl
import random
import tkinter as tk
import tkinter.messagebox
#### 利用python第三方库pyttsx3来将文字用语音发送出来
def voice(a):
## pytttsx初始化
engine = pyttsx3.init()
## a代表着需要转成音频的文字
engine.say(a)
# 注意,没有本句话是没有声音的
engine.runAndWait()
### 创建一个list来保存已经被抽到名字的同学
ed_name= []
root = tk.Tk() # 创建窗口对象
root.title("花名册 -----点名辅助程序 v1.10 ")
root.geometry("500x300")
# 创建抽取到的同学姓名展示部分
labelx=tk.Label(root,text="紫薇",fg="red",font=("宋体",80),width=9,height=2)
labelx.grid(row=0)
name_data = [] # 创建存储所有学生姓名的列表
def execl(filename, sheetname):
wb = openpyxl.load_workbook(filename) # 打开Excel
sheet = wb[sheetname] # 定位表单
# 创建一个空列表
column = 1
for row in range(2, sheet.max_row + 1):
if sheet.cell(row, column).value == "":
continue
name_data.append(sheet.cell(row, column).value) # 将第一列的每一行数值遍历添加到name_data列表中;
return name_data
execl("config\\\\name.xlsx","Sheet1") # 调用一下execl函数,在没有开始点名之前先将姓名添加到name_data列表之中
def ceshi():
while 2>1:
a = random.randint(0,len(name_data)-1)## 产生随机数,作为list的下标index
b = "下面请"+name_data[a]+"同学来回答问题"## 拼接成字符串
## 判断ed_name元素个数是不是与name_data列表中相同,如果相同,那么代表着所有的同学名字都被抽点过了
if len(ed_name) == len(name_data):
tk.messagebox.askokcancel("提示", '所有的学生都已经抽取了一边,如需要继续,请关闭该程序重新打开')
break
## 判断被抽点到的同学是不是已经被抽点过,如果被抽点过,则跳过该同学
if name_data[a] in ed_name:
continue
ed_name.append(name_data[a]) # 将被抽点到的学生添加到ed_name例表中,标记已经被抽点
labelx = tk.Label(root, text=name_data[a], fg="red", font=("宋体", 80), width=9, height=2)# 在姓名框里面展示姓名
labelx.grid(row=0)
voice(b) ## 语音读取
break
tk.Button(root, text="开始点名", width=15, command=ceshi).grid(row=1,padx=10, pady=10,sticky='s') # s南边也就是下边
root.mainloop() # 进入消息循环
思路介绍
相信大家看了上面源码,也是知道了大概思路
- 第一步,该程序会读取当前目录下的name.xlsx文件,并将学生姓名app到name_data列表中
- 第二步,产生一个随机数,来作为name_data的下标,来获取名称,并展示出来
- 第三步,判断该学生是不是被第二次抽到,避免重复抽到同一个人
- 第四步,判断当前是不是所有人都抽到了
- 第五步,利用tk将GUI界面展示出来
name.xlsx文件填写格式
看到图片相信大家也就懂了
结束语
源码下载地址,不建议大家下载,还是希望大家可以靠技术吃饭,香香
以上是关于java 如何弄个简单的随机点名,不用名字,直接数字就可以的主要内容,如果未能解决你的问题,请参考以下文章