Python学习--一个逻辑推理的猜数字的游戏

修订Pico Fermi Bagels猜数字游戏代码,仅用于学习Python。

运行界面如下:

修订的代码如下:

# //
# 提升逻辑思维猜数字小游戏
# BY:Al Sweigart al@inventwithpython.com
# 翻译:诚外无物
# 说明:一个逻辑推理游戏,根据线索猜三位数。游戏根据输入
# 给出提示:
# 猜对一位数字且数字位置正确,提示语:苹果
# 猜对一位数字但数字位置不对,提示语:香蕉
# 如果猜测数字和位置都不正确,提示语:桃子
# //

import random
import sys

NUM_DIGITS = 3            # (!) 数字位数
MAX_GUESSES = 10          # (!) 猜测次数

def main():
    # 打印游戏说明
    print('''***提升逻辑推理的一个猜数字小游戏***
*
*游戏程序会产生一个{}位的没有重复的数字,请玩家尝试猜一下它是什么。
*根据玩家输入,此游戏提供线索,当你看到如下的提示语,分别意味的是:
*    苹果              一个数字是正确的,且位置正确。
*    香蕉              一个数字是正确的,但位置不正确。
*    桃子              没有正确的数字。
*          
*举个例子,正确数字是248 但是你猜测的是 843
*给你提示的线索是: 苹果 香蕉。
'''.format(NUM_DIGITS))
        
    while True:
        # secretNum存储了玩家所要猜测的秘密数字
        secretNum = getSecretNum()
        #print(secretNum)
        print('***神秘的数字已经产生了,祝你好运。***')
        print('***您最多有 {} 次机会来猜测哦,开始吧。***\n'.format(MAX_GUESSES))
        
        numGuesses = 1
        while numGuesses <= MAX_GUESSES:
            guess = ''

            # 保持循环,直到玩家输入正确的猜测数字:1)位数,2)均为十进制数字字符,即0-9字符
            while len(guess) != NUM_DIGITS or not guess.isdecimal():
                print('\n猜测次数:< {} >'.format(numGuesses))
                guess = input('>>> ')

                # 输入quit退出游戏
                if guess.lower().startswith('quit'):
                    sys.exit()
                       
            # 获取线索
            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('谢谢你再玩一次。')

def getSecretNum():
    """返回唯一一个长度为NUM_DIGITS位数字:类型为包含3位数字的字符串"""
    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列表按字符顺序排序,使其不会泄露数字信息
        #clues.sort()
        # 返回一个由clues列表中所有元素组成的字符串
        return ' '.join(clues)


if __name__ == '__main__':
    main()

相关推荐

  1. 数字游戏Python实现

    2024-02-02 08:26:03       55 阅读
  2. 学习 Rust 第三天:如何编写一个数字游戏

    2024-02-02 08:26:03       28 阅读
  3. Python搭建一个数字游戏

    2024-02-02 08:26:03       40 阅读
  4. 对于数字游戏改进心得

    2024-02-02 08:26:03       58 阅读
  5. 用MATLAB编写一个数字游戏

    2024-02-02 08:26:03       42 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-02 08:26:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-02 08:26:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-02 08:26:03       82 阅读
  4. Python语言-面向对象

    2024-02-02 08:26:03       91 阅读

热门阅读

  1. Elasticsearch向量数据存储与搜索

    2024-02-02 08:26:03       55 阅读
  2. 【基础】STM32中如何使用printf()函数

    2024-02-02 08:26:03       53 阅读
  3. NLP任务之Named Entity Recognition

    2024-02-02 08:26:03       46 阅读
  4. 2024年美赛数学建模A题思路模型代码

    2024-02-02 08:26:03       37 阅读
  5. 将应用的log4j换成logback

    2024-02-02 08:26:03       50 阅读
  6. qt通过http调用创建docker容器

    2024-02-02 08:26:03       56 阅读
  7. freertos 源码分析一 list链表数据结构

    2024-02-02 08:26:03       48 阅读
  8. Reducer 和 Context实现简单的Redux

    2024-02-02 08:26:03       62 阅读
  9. DAY37:贪心算法738

    2024-02-02 08:26:03       57 阅读
  10. golang网络编程day4

    2024-02-02 08:26:03       37 阅读
  11. 静态HTML引入vue封装组件

    2024-02-02 08:26:03       52 阅读
  12. 2024.2.1 寒假训练记录(15)

    2024-02-02 08:26:03       56 阅读