python魔术师算法

本文介绍了使用Python编程实现一个基于条件语句的扑克魔术算法。该魔术涉及从15张扑克牌中抽牌,经过特定步骤的排序后,目标牌会出现在第八个位置。文章详细阐述了实现过程,包括随机生成牌组、按顺序分组、用户输入判断及排序逻辑,并提到待优化的函数封装方法。

python魔术师算法

最近刚开学,专业课新开了一门《python程序设计基础》,不得不说python真是火,我们终于赶上潮流了,python非常优雅,也非常严格,刚学了条件语句,我就突发奇想,想到了初中时一个同学,跟我炫技过的一个扑克魔术,虽然这个魔术我非常熟悉,但是它背后的数学原理我一直搞不懂(我猜测是某种排序算法),我决定用python的条件语句实现它。

首先,我先说一下这个魔术的实现步骤,从扑克牌中随机找15张牌,抽出一张牌知道结果后放回,然后15张牌平均分成三份,经提示后反复洗牌进行排序,三次排序后,目标牌一定会在八号牌的位置上。

实现过程

1、15张随机的牌,我们可以用python内置的random模块实现

2,15张牌随机组成一个数字列表,切片读取分成三组,注意是顺序分组

切片的步长为3

3、输入:用户输入大,小判断位置

4、一个if语句嵌套包含三个条件判断,三个语句判断为一轮,三轮以后输出结果并进行验证
在这里插入图片描述

代码片段
random_list=[2,34,5,7,64,9,87,53,77,81,100,110,44,55,28]
print(random_list)
print("请随意选取上面一组随机数组中的任意一个数,请你记下来无需输入!")
print("现在计算机把数组平均分成三组数,请你按照指令进行操作")
#列表读取,第一次排序重组
print("现在让我们进行第一轮游戏")
random_list1=list(random_list[0:13:3])
random_list2=list(random_list[1:14:3])
random_list3=list(random_list[2:15:3])
print(random_list1)
user=input('你心里的那个数字是不是在这组数中,是的话输入\'y\',不是的话输入\'n\':')
if user=='n':
    print(random_list2)
    user = input('你心里的那个数字是不是在这组数中,是的话输入\'y\',不是的话输入\'n\':')
    if user=='n':
        print(random_list3)
        user = input('你心里的那个数字是不是在这组数中,是的话输入\'y\',不是的话输入\'n\':')
        if user=='y':
            random_list=random_list1+random_list3+random_list2
            print("现在我们要进行第二轮游戏,请依然按照指令进行")
            random_list1 = list(random_list[0:13:3])
            random_list2 = list(random_list[1:14:3])
            random_list3 = list(random_list[2:15:3])
            print(random_list1)
            user = input('你心里的那个数字是不是在这组数中,是的话输入\'y\',不是的话输入\'n\':')
            if user == 'n':
                print(random_list2)
                user = input('你心里的那个数字是不是在这组数中,是的话输入\'y\',不是的话输入\'n\':')
                if user == 'n':
                    print(random_list3)
                    user = input('你心里的那个数字是不是在这组数中,是的话输入\'y\',不是的话输入\'n\':')
                    if user == 'y':
                        random_list = random_list1 + random_list3 + random_list2
                        print("现在我们要进行第三轮游戏,请依然按照指令进行")
                        random_list1 = list(random_list[0:13:3])
                        random_list2 = list(random_list[1:14:3])
                        random_list3 = list(random_list[2:15:3])
                        print(random_list1)
                        user = input('你心里的那个数字是不是在这组数中,是的话输入\'y\',不是的话输入\'n\':')
                        if user == 'n':
                            print(random_list2)
                            user = input('你心里的那个数字是不是在这组数中,是的话输入\'y\',不是的话输入\'n\':')
                            if user == 'n':
                                print(random_list3)
                                user = input('你心里的那个数字是不是在这组数中,是的话输入\'y\',不是的话输入\'n\':')
                                if user == 'y':
                                    print("你心中的数字是不是:",random_list3[2],"?")
                            else:
                                print("你心中的数字是不是:",random_list2[2],"?")
                        else:
                            print("你心中的数字是不是:",random_list1[2],"?")

这个算法的实现主要是通过不断的重复和排序,三次列表的切片和列表的重排实现,其实只是在第一轮游戏中实现语句,后面的两轮都是对上一轮的调用。现在对python的函数封装还有点陌生,等过段时间再用函数封装实现这个算法估计代码量减少40%。主要是这个算法非常有意思,加上交互式的输入输出,感觉就像是魔术,当然纯属娱乐,练习之用,供大家打发时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值