用python写猜数字游戏

猜数字游戏

从名单中随机抽取5位同学,参加猜数字

目的:练习文件操作、循环、判断、构造函数、列表和集合的操作

主要思路:

  • 随机抽取从文件中抽取5个人员参加游戏
    • 判断名单名字的行数
    • 随机生成数,并在文件中获取名单
  • 判断数字的大小
    名字单:name
张三
李四
王五
狗四
李好
张四
王麻子
胡八一
李敏
朱三
周二
曹三
曹达
小鬼子

版本一:

"""
从名单中随机抽取5位同学,参加猜数字
"""
import random
def main():
    # 2、随机抽取5个人员
    peopleNum = 5  #抽取5人
    people(peopleNum)
    # 3、随机生成数字1~100的数
    number = random.randint(1,100)
    # 4、判断正确
    referee(number)
#2、随机抽取5个人员
def people(peoplNum):
    peopleList = set()
    line = fileLine()

    while  len(peopleList) < peoplNum :   #避免了猜数字人员名字的重复问题
        # 生成随机数
        randNum = random.randint(1, line)
        with open("name", 'r', encoding="utf-8") as  f:   #可以不用close()文件
            for i in range(1, randNum + 1):    #目的:一次遍历文件的内容,找到指定的行(randNum就是行号)
                name = f.readline().strip('\n')  #去掉名字中的\n
                if randNum == i:
                    peopleList.add(name)   #将名字添加到人员名字中peopleList
    print("恭喜",peopleList,"进行猜数比赛")

#2.1 、获取名单的行数
def fileLine():
    with open("name","r",encoding="utf-8") as f:
        linecount = 0
        for line in f:
            linecount +=1
    return linecount

#4、判断正确
def referee(number):
    max = 100
    min = 1
    print(number)
    while True:
        inputNum = int(input("请输入%d~%d整数:\n"%(min,max)))
        if inputNum == number:
            print("恭喜你猜中了",number)
            break
        elif inputNum >= min and inputNum < number:
            min = inputNum
        elif inputNum <= max and inputNum > number:
            max = inputNum


if __name__ == '__main__':
    main()

版本二:

"""
从名单中随机抽取5位同学,参加猜数字
"""
import random
def main():
    # 2、随机抽取5个人员
    peopleNum = 5  #抽取5人
    people(peopleNum)
    # 3、随机生成数字1~100的数
    number = random.randint(1,100)
    # 4、判断正确
    referee(number)
#2、随机抽取5个人员
def people(peoplNum):
    peopleList = []  #人员的名字
    radNum = []     #保存随机数,为避免随机数产生相同
    line = fileLine()
    for x in range(peoplNum):
        # 生成随机数
        randNum = random.randint(1, line)
        radNum.append(randNum)  
        if radNum.count(randNum) > 1:   #统计数随机数产生的的个数
            continue
        with open("name", 'r', encoding="utf-8") as  f:
            for i in range(1, randNum + 1):   
                name = f.readline().strip('\n')
                if randNum == i:
                    peopleList.append(name)
    print(peopleList)
#2.1 、获取名单的行数
def fileLine():
    with open("name","r",encoding="utf-8") as f:
        linecount = 0
        for line in f:
            linecount +=1
    return linecount

#4、判断正确
def referee(number):
    max = 100
    min = 1
    print(number)
    while True:
        inputNum = int(input("请输入%d~%d整数:\n"%(min,max)))
        if inputNum == number:
            print("恭喜你猜中了",number)
            break
        elif inputNum >= min and inputNum < number:
            min = inputNum
        elif inputNum <= max and inputNum > number:
            max = inputNum


if __name__ == '__main__':
    main()

版本三:

"""
从名单中随机抽取5位同学,参加猜数字
"""
import random
import linecache
def main():
    # 2、随机抽取5个人员
    peopleNum = 5  #抽取5人
    people(peopleNum)
    # 3、随机生成数字1~100的数
    number = random.randint(1,100)
    # 4、判断正确
    referee(number)
#2、随机抽取5个人员
def people(peoplNum):
    peopleList = []  #人员的名字
    line = fileLine()
    radNum = []  # 保存随机数,为避免随机数产生相同
    while len(peopleList) < peoplNum:
        index = random.randint(1,line)   
        radNum.append(index)
        if radNum.count(index) > 1:  # 统计数随机数产生的的个数,避免名单人员名字重复
            continue
        peopleList.append(linecache.getline("name",index).strip("\n"))
    print(peopleList)
#2.1 、获取名单的行数
def fileLine():
    with open("name","r",encoding="utf-8") as f:
        linecount = 0
        for line in f:
            linecount +=1
    return linecount

#4、判断正确
def referee(number):
    max = 100
    min = 1
    while True:
        inputNum = int(input("请输入%d~%d整数:\n"%(min,max)))
        if inputNum == number:
            print("恭喜你猜中了",number)
            break
        elif inputNum >= min and inputNum < number:
            min = inputNum
        elif inputNum <= max and inputNum > number:
            max = inputNum


if __name__ == '__main__':
    main()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值