4.2.用python解決經典問題:猜數字, Bagels

1.問題規則

Bagels是一个簡單的邏輯推理遊戲. 目的是根據提示猜一个三位數(位數可調整).

遊戲規則:

當有正確的數碼出現在錯誤的位置時, 反饋'Pico';

當有正確的數碼出現在正確的位置時, 反饋'Fermi';

當無正確的數碼出現時, 反饋'Bagels';

反饋可以累加, 如Pico Pico

共十次機會, 猜對贏得遊戲, 猜不出失敗.

結合規則, 解題思路就是檢查每个位上的數碼與目標數的關係.


2.實現代碼

import random
import sys

num_target = random.randint(100, 999)
list_tar = [num_target % 10, num_target//10 % 10, num_target // 100]  # 獲取三位數碼


def feedback(list_in):
    """檢查數碼並反饋"""
    times_F, times_P = 0, 0

    if list_in == list_tar:
        sys.exit(f'Nice, you get it! {num_target}')
    else:
        for i in range(3):
            if list_in[i] == list_tar[i]:
                times_F += 1
            elif list_in[i] in list_tar:
                times_P += 1
        if times_F == 0 and times_P == 0:
            print('Bagels ')
        else:
            print('Fermi '*times_F+'Pico '*times_P)


for i in range(10):
    try:
        num_input = int(input('Guess a number(100~999):'))
        if num_input > 999 or num_input < 100:  # 檢查輸入值域
            raise ValueError  # 在輸入無效時主動拋出異常
        list_in = [num_input % 10, num_input//10 % 10, num_input // 100]
    except ValueError:
        print('Three digits number, please!!!')
        continue
    feedback(list_in)
print(f'The number is {num_target}, you fool!\n')

比對數碼時, 需要拆出每一位的數碼, 就使用整除//和求模%運算, 此外, 沒啥難點. 


3.運行

Guess a number(100~999):456
Bagels
Guess a number(100~999):789
Fermi
Guess a number(100~999):449
Fermi
Guess a number(100~999):119
Fermi
Guess a number(100~999):229
Fermi Fermi Pico
Guess a number(100~999):299
Nice, you get it! 299

正常, 無誤.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值