首页 > 编程语言 >Python练习案例_Pico Fermi Bagels猜数字游戏

Python练习案例_Pico Fermi Bagels猜数字游戏

时间:2024-02-21 22:56:58浏览次数:31  
标签:数字 Python Bagels secretNum 字符串 Pico numbers print 函数

案例介绍--《Python编程快速上手2》

在Pico Fermi Bagels这个逻辑推理游戏中,
你要根据线索猜出一个三位数。
游戏会根据你的猜测给出以下提示之一:如果你猜对一位数字但数字位置不对,则会提示“Pico”;
如果你同时猜对了一位数字及其位置,则会提示“Fermi”;
如果你猜测的数字及其位置都不对,则会提示“Bagels”。
你有10次猜数字机会。

案例完整代码

import random  

NUM_DIGITS = 3  #猜测位数
MAX_GUESSES = 10  #猜测的机会

def main():  
    print('一些文字')  
    # 主循环  
    while True:  
        # 玩家所要猜测的数字  
        secretNum = getSecretNum()   
        print('你的机会:{}'.format(MAX_GUESSES))  #Mark format函数可以将括号中的字符串传入到前面的{}里
        print('请猜一个数字') 

        numGuesses = 1  
        while numGuesses <= MAX_GUESSES:  
            guess = ''  
            # 在玩家输入正确数字前保持循环  
            while len(guess) != NUM_DIGITS or not guess.isdecimal():  #Mark isdecimal函数用于判断字符串是否只包含数字
                guess = input('Guess#{}: '.format(numGuesses))  

            clue = getClue(guess, secretNum)  
            print(clue)  
            numGuesses += 1  
            if guess == secretNum:  
                break  # 玩家猜对了数字,结束当前循环  

        print('想要再玩一次吗?<Y/N>') 

        if not input('>').lower().startswith('Y'):  
            break  
        
        print('感谢游玩')  

def getSecretNum():  
    # 返回唯一一个长度为NUM_DIGITS且由数字组成的字符串  
    numbers = list('0123456789')  # 创建数字0-9的列表  
    random.shuffle(numbers)  # 将它们随机排列  

    secretNum = '' 
    for i in range(NUM_DIGITS):  
        secretNum += str(numbers[i])  
    return secretNum  

def getClue(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)  
    
# 程序运行入口  
if __name__ == '__main__':  
    main()

知识点

format()函数

format函数可以将括号中的字符串传入到前面的{}里
print('你的机会:{}'.format(MAX_GUESSES))

isdecimal()函数

isdecimal函数用于判断字符串是否只包含数字,返回Bool值
while len(guess) != NUM_DIGITS or not guess.isdecimal():

函数链式调用

这段判断中连续调用了三个函数,

 if not input('>').lower().startswith('Y'):  
            break  
        print('感谢游玩')  

startswith()函数

这个函数保证了用户输入的字符串中只要有y就会返回Ture

list()函数

这个函数会拆分传入的字符串并拆分为列表,numbers = list('012')等同于number=['0','1','2']
numbers = list('0123456789')

shuffle()函数

shuffle()由random()调用,意为随机.重新排列
import random

# 创建一个包含数字的列表  
numbers = [1, 2, 3, 4, 5]  
# 输出原始列表  
print("Original list:", numbers)   
# 使用 shuffle() 函数打乱列表  
random.shuffle(numbers)  
# 输出打乱后的列表  
print("Shuffled list:", numbers)

join()函数

功能类似字符串拼接,只要是可迭代对象都可以

# 使用空字符串作为分隔符连接列表中的元素  
words = ['Hello', 'world']  
sentence = ''.join(words)  
print(sentence)  # 输出:'Helloworld'  
  
# 使用空格作为分隔符连接列表中的元素  
words = ['Hello', 'world']  
sentence = ' '.join(words)  
print(sentence)  # 输出:'Hello world'  
  
# 使用逗号作为分隔符连接列表中的元素  
fruits = ['apple', 'banana', 'cherry']  
fruit_list = ', '.join(fruits)  
print(fruit_list)  # 输出:'apple, banana, cherry'  
  
# 连接字符串列表  
characters = ['P', 'y', 't', 'h', 'o', 'n']  
word = ''.join(characters)  
print(word)  # 输出:'Python'  
  
# 尝试连接非字符串元素会抛出TypeError  
numbers = [1, 2, 3]  
# result = ''.join(numbers)  # 这会抛出 TypeError  
  
# 如果需要连接非字符串元素,可以首先将它们转换为字符串  
numbers = [1, 2, 3]  
result = ''.join(str(num) for num in numbers)  
print(result)  # 输出:'123'

标签:数字,Python,Bagels,secretNum,字符串,Pico,numbers,print,函数
From: https://www.cnblogs.com/shaoSaxon/p/18026334

相关文章

  • Python+Faker+Pandas数据库造数
    今日分享一些Python常用的东西,整理一些小笔记,比如Faker的使用,panda的使用1、使用faker造数据简介测试工作中,经常会遇到需要制造大量测试数据的时候,如果手动造数据必然会浪费大量时间Faker是一个制造数据的强大的python库,可以制造姓名、电话、身份证、地址、邮箱等等各种各样伪......
  • Python中logging模块
     在项目中我们常常需要打印日志,特别是在系统级项目上一般都会有自己日志模块,下面我们将介绍下Python中自带的logging模块(注意这是模块的名称并不是类)一、基本使用logging是一个包的名称,我们真正使用的是logging.Logger这个类。但是我们不能使用常规的方式进行初始化,......
  • python-transformers库
    python-transformers库目录python-transformers库安装测试功能和优势Transformers术语模型与分词器加载预训练模型保存模型分词器编码和解码填充Padpipelinepipeline简介pipeline原理参考资料transformers是一个用于自然语言处理(NLP)任务,如文本分类、命名实体识别,机器翻译等,提供......
  • Python:Short Circuiting -- “OR”
    ShortCircuitingOperatorChecksif:Evaluatesfromlefttorightupto:ExampleANDAllvaluesaretrueThefirstfalsevalueFalseand1/0evaluatestoFalseORAtleastonevalueistrueThefirsttruevalueTrueor1/0evaluatestoTrue......
  • python 数据库数据较验
    #-*-coding:utf-8-*-#@Time:2023-09-07#@Author:Carl_DJ"""实现功能:1、python直接链接SqlServer数据库可以MySQL数据库,进行数据对比2、对比mysql和SqlServer两个数据库的表名以及表内数据的差异:3、对比的差异分别输出到文件中---->数据......
  • 【Python&GIS】基于Python融合矢量数据(多面合一)
    ​    之前发过使用批量合并矢量数据的文章:【Python&GIS】基于Python批量合并矢量数据,正好前段时间有需求把矢量数据进行融合,然后就编了一段融合矢量数据的代码。今天就和大家分享一下如何使用Python对矢量数据实现融合的操作。1.定义    首先大家要明白矢量数......
  • python实现不同电脑之间视频传输功能
    python实现不同电脑之间视频传输功能   这篇文章主要介绍了python实现不同电脑之间视频传输,本文视频传输实现的前提是确保发送端和接收端接在同一个局域网下,分为发送端和接收端,通过实例代码给大家介绍的非常详细,需要的朋友参考下吧 1.imageZMQ库实现imageZMQ库链接:ht......
  • python 多进程交互
    frommultiprocessingimportProcess,QueueclassEngine:def__init__(self):self.info="EngineInfo"self.order_queue=Queue()#创建一个用于接收订单的队列self.orders=[]defget_info(self):returnself.info......
  • Python启动其他程序
    通过python脚本来启动其他的程序,一般使用subprocessimportsubprocess#启动Windows上的计算机程序subprocess.Popen('C:\\Windows\\System32\\calc.exe')#启动记事本,并打开text.txt文件,在该列表中第一个元素表示程序名称,后面的都是参数subprocess.Popen(['C:\\Windows......
  • python2 解决 unicode转中文问题
    importjson#避免\x0e问题importsysreload(sys)sys.setdefaultencoding('utf-8')#defbbb():#bbb={u"111":u"\u73bb\u7483"}printbbbprint(json.dumps(bbb).decode("unicode-escape"))de......