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

本文介绍了如何修订Python代码实现一个逻辑推理猜数字游戏,玩家需根据提示猜测三位数,提供线索包括正确数字位置、正确但位置错误以及全错的情况。
摘要由CSDN通过智能技术生成

修订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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值