python全项目实战系列(十一)有趣的猜数字游戏
本系列旨在通过一系列由浅入深的python实战代码或项目,使普通人也能感受到编程的乐趣,编程能够在平时的工作生活上有所帮助。欢迎查看系列的开篇词和前面文章。概述
设计一个基于python的猜数字游戏。
首先你设置一下要猜测数字的位数和最多猜测多少轮NUM_DIGITS = 2 # 要猜测的数字的位数. MAX_GUESSES = 5 # 最大猜测次数.
当你没有完全猜对时,根据你的猜测结果,有三种不同的结果反馈:没有猜测到其中任意一位数字:没有正确的数字有正确的数字但位置不对:正确的数字在不正确的地方猜到的正确数字有位于正确的位置:正确的数字在正确的位置
根据这三种反馈,你可以不断调整,争取完全猜准确,如果在最大轮数之前你猜出来,则会显示猜对了,并结束游戏。代码实现过程
代码中主要定义了3个函数来实现这个过程def getSecretNum(): 根据前面设置的位数,生成一个随机数用作谜底。def getClues(guess, secretNum): 把你的猜测数字和谜底进行比较,给出相应的反馈结果。def main(): 在你设置的猜测轮数中,进行比较,如果都没猜到,最终也会打印出正确结果,并询问你是否再来一次。
需要注意的是:你猜测数字的位数要和谜底相等,否则会一直循环重新输入。
详细代码注释""" Bagels, by Al Sweigart al@inventwithpython.com A deductive logic game where you must guess a number based on clues. This code is available at https://nostarch.com/big-book-small-python-programming A version of this game is featured in the book, "Invent Your Own Computer Games with Python" https://nostarch.com/inventwithpython Tags: short, game, puzzle """ import random NUM_DIGITS = 2 # 要猜测的数字的位数. MAX_GUESSES = 5 # 最大猜测次数. def getSecretNum(): "返回由 NUM_DIGITS 个唯一随机数字组成的字符串." numbers = list("0123456789") # 创建一个 0 到 9 的数字列表. random.shuffle(numbers) # 将它们随机排列. # 获取密码列表中的前 NUM_DIGITS 位数字: secretNum = "" for i in range(NUM_DIGITS): secretNum += str(numbers[i]) return secretNum def getClues(guess, secretNum): """ 返回一个带有 pico, fermi, bagels 线索的字符串以供猜测 和密码对. """ if guess == secretNum: return "你猜对了!" clues = [] for i in range(len(guess)): if guess[i] == secretNum[i]: # 正确的数字在正确的位置. clues.append("正确的数字在正确的位置") elif guess[i] in secretNum: # 一个正确的数字在不正确的地方. clues.append("正确的数字在不正确的地方") if len(clues) == 0: return "没有正确的数字" # 根本没有正确的数字. else: # 将线索按字母顺序排序,使其原始顺序不泄露信息 clues.sort() # 从字符串线索列表中创建一个字符串. return " ".join(clues) def main(): while True: # Main game loop. # 这存储了玩家需要猜测的秘密数字: secretNum = getSecretNum() #生成无重复数字的随机数 print("我想出了一个数字。") print(" 你有 {} 次机会猜出它.".format(MAX_GUESSES)) numGuesses = 1 while numGuesses <= MAX_GUESSES: guess = "" # 继续循环,猜测字符的长度不是NUM_DIGITS的长度,或者字符不是10进制字符: while len(guess) != NUM_DIGITS or not guess.isdecimal(): print("Guess #{}: ".format(numGuesses)) guess = input("请输入猜测的数字,如果位数不对,则会在此一直循环: ") clues = getClues(guess, secretNum) print(clues) numGuesses += 1 if guess == secretNum: break # 结果正确的,跳出这个循环. if numGuesses > MAX_GUESSES: print("你没有猜到.") print("答案是 {}.".format(secretNum)) # 询问玩家是否想再玩一次. print("你想再玩一次吗? (yes or no)") if not input("> ").lower().startswith("y"): break print("感谢您的参与!") # 从主程序运行游戏: if __name__ == "__main__": main()
一轮游戏结果如下,猜测5次,可惜差一点猜出来了。你可以调整数字位数和猜测轮数来体验一下。我想出了一个数字。 你有 5 次机会猜出它. Guess #1: 请输入猜测的数字,如果位数不对,则会在此一直循环: 13 没有正确的数字 Guess #2: 请输入猜测的数字,如果位数不对,则会在此一直循环: 25 没有正确的数字 Guess #3: 请输入猜测的数字,如果位数不对,则会在此一直循环: 47 正确的数字在正确的位置 Guess #4: 请输入猜测的数字,如果位数不对,则会在此一直循环: 46 正确的数字在正确的位置 Guess #5: 请输入猜测的数字,如果位数不对,则会在此一直循环: 48 正确的数字在正确的位置 你没有猜到. 答案是 49. 你想再玩一次吗? (yes or no) > n 感谢您的参与!
故乡的山哟故乡的山哟作者邴文科主播柳眉故乡的山,故乡的水,故乡有我童年的足印,几度山花开,几度雪飞春,以往的幻境依然在梦中。他乡山也绿,他乡水也清,我却常在我梦里故(呀)乡行。多少年来,程琳
当一个人想要跟你分手,就会这样对你这世界上,能跟天气一样捉摸不透的就是感情了,有着太多的变数与世事难料。我们以为说过不离不弃不分开,只喜欢你,就真的能长长久久,却总是被突如其来的说不爱,说分开就狠心地分开。殊不知,
中文到底有多美山不叫山,叫翠微。海不叫海,叫苍渊。云,是纤凝风,是扶摇。太阳有个摇曳生姿的叫法,是扶光。而月亮,也有个特别写意的名字叫望舒。那狂风吹起来的沙砾,是才子佳人眼里的惊砂。云依着山,阳
未来的人类会朝着哪个方向进化?或许会彻底消失完全被他们取代几十亿年来,地球上的生物进化进程从来没有停止过,人类也一直在进化。只不过进化的过程通常都很漫长,在有限的生命里我们很难察觉到人类的进化。那么,未来的人类会朝着哪个方向进化呢?科学家
黄海Smile将于12月上市,5门4座,又一款买菜代步小车来了在微型新能源车如火如荼的今天,越来越多汽车品牌驻足该细分领域,就拿今天要说的黄海Smile为例,其由曙光黄海汽车打造,将于12月正式上市。下面来看详细情况。外观方面,黄海Smile
生活中值得坚持的8件事1hr葆有爱心有人说,爱心绽放的地方,生命便能欣欣向荣。公交车上的一次让座,出行中的一次帮扶,处事时的一个小提醒当我们用真诚的爱去守护他人,那种帮助别人的快乐也会滋润我们自己的心田
秋深了,叶黄了,年长了,味浓了秋日生活打卡季夕阳西下,漫步湖边,榉树喜树杏树枫香树的叶子渐渐黄了。时光里,季节在悄然辗转。秋深了,叶黄了,夜长了,深秋在万象天地中,有了不一样的风景。人生中,总有些最美的风景,隐
阳光灿烂又一天,你值得拥有好心情心情像向日葵一样阳光灿烂心情就像花儿一样美丽,向阳而生,向日葵真的好美,愿我们的心像它一样,随时向阳不要生气,生气没有意义,做人不要期望人人理解,你做得最好最多,也不可能人人说你好
秋色,是一笺不动声色的情深前两日上课,随口问了一下学生喜欢什么季节,孩子们各自诉说着自己对于不同季节的欢喜,但多是吃喝玩乐的,不过却也与小孩纯真澄澈的心灵相得益彰吧但对于我这样的成年人来讲,可能对于季节的理
男人要想保持持久,牢记这4个忠告,快看看生活中很多人对歌词有误解,歌词不是放纵自己欲望的一种方法,而是适当释放夫妻感情的调节剂之一。但是,性也很在意,如果性生活时不注意健康,往往会对男性产生较大的健康影响,这种影响通常会
中成药归脾丸!有什么功效及作用?气血两亏的朋友了解下古人认为,人之气血的来源是脾胃,脾胃营卫气血生化之源,在我们身边有很多人身体不舒服的时候去看中医,中医通过望闻问切的手法来为患者诊治,有时会告诉患者脾胃虚弱,需要拿一些中药来进行治