根据近两年流行的春节集五福活动,编写一个模块,实现模拟春节集五福的过程。

根据近两年流行的春节集五福活动,编写一个模块,实现模拟春节集五福的过程。效果如图

img

来了来了,代码逻辑是:先定义了五种福卡,然后按下enter键后,随机获得一种福卡。当五种福卡都至少获得一张时,程序结束,并显示用户一共获得了多少张福卡。

import random

def start_collecting():
    fuku_dict = {"爱国福":0, "富强福":0, "和谐福":0, "友善福":0, "敬业福":0}
    fuku_list = list(fuku_dict.keys())
    total_count = 0
    print("开始集福了,")
    
    while min(fuku_dict.values()) == 0:
        input("按下<enter>键获取福卡:")
        acquired_fuku = random.choice(fuku_list)
        fuku_dict[acquired_fuku] += 1
        total_count += 1
        print(f"获取了:{acquired_fuku}")
        print("当前拥有的福:")
        for fuku, count in fuku_dict.items():
            print(f"{fuku}:{count}")
        print("\n")
    
    print("***五福已经集齐,真是有福之人***")
    print(f"一共集福{total_count}次")
    print("开始集福了")

start_collecting()

差不多这样了。


如果有帮助,请点击一下采纳该答案~谢谢

  解题思路,定义五福字符串列表、统计已集到的五福字典、计数抽取福卡的计数器,设定终止抽取福卡的循环条件。结束循环抽取福卡,输出结果。具体操作,已经详细注释在代码行末。
我的学习笔记:代码模拟春节“集五福”(根据近两年流行的春节集五福活动,编写一个模块,实现模拟春节集五福的过程)

  • 代码运行效果截屏图片

    img


    img


    img


    img


    img



      由于抽取福卡次数太多,前面的截屏图片省略了一些。每次抽取福卡都是随,五个福卡被抽中的机率一样,因而每轮运行代码抽取福卡的次数都会不尽相同。


    img


    img

  • Python 代码

#!sur/bin/nve python
# coding: utf-8
from random import choice # 加载 random.choice() 随机抽取方法。
from random import shuffle # 加载“洗牌” random.shuffle() 方法。


def collect_five_blessing() -> None:
    ''' 模拟春节“集五福” '''
    five_blessing_chars = ['爱国福', '富强福', '敬业福', '友善福', '和谐福']
    five_blessing = dict.fromkeys(five_blessing_chars, 0) # dict.fromkeys()方法生成集五福统计字典初值。
    #input(five_blessing) # 调试用语句。
    n = k = 0
    clear = '\033[2J' # 清屏字符串。

    while  n < 5:
        input(f"{clear}\n{' 开始集福了…… ':~^45}\n\n{'按下<enter>键获取福卡:':>16}")
        shuffle(five_blessing_chars) # 打乱五福字符。
        blessing = choice(five_blessing_chars) # 随机抽取一个五福。
        five_blessing[blessing] = five_blessing.get(blessing, 0) + 1 # 记录抽取的福卡。
        tip = f" 您获取了:{blessing} "
        local_five_blessing = [f"{key}:{value}" for key, value in five_blessing.items()]
        input(f"{clear}\n{tip:~^42}\n\n当前您拥有的福卡:\n\n{' '.join(local_five_blessing)}\n")
        k += 1 # 抽取福卡计数器自增 1 。
        n = sum([1 if five_blessing.get(key) else 0 for key in five_blessing.keys()]) # 计算集齐的福卡。

    print(f"{clear}\n{' 五福已集齐,您真是有福之人!':*^36}\n\n{f'您一共集福 {k} 次。':^43}\n\n{'':~^50}\n")


if __name__ == '__main__':
    collect_five_blessing() # 调用模块集五福。