60行python代码带你了解刘谦春晚魔术的奥秘

2024-02-19 20:28

本文主要是介绍60行python代码带你了解刘谦春晚魔术的奥秘,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

大家新年好,我是海鸽。

除夕夜,尼格买提在春晚现场与刘谦搭档变魔术时出现失误,他慌张的表情瞬间引发热议,意外成为今年春晚最引人瞩目的画面。

有网友表示,第二个魔术纯粹是数学原理,只要按照固定的顺序筛选,就一定能拼成完成的牌。

如果你还没观看过,我强烈建议你花一点时间观看一下。下面是“春晚”视频号的官方重播链接。愿好运常伴你左右,烦恼随风飘散。

这个魔术,理解起来,确实有点"困难"。我们先看下整个魔术流程:

接下来是见证奇迹的时刻

1、4张牌对折后撕开,就是8张,4对

2、(无关步骤)根据名字字数,把顶上的牌放到下面,但怎么放都不会改变循环序列

以名字字数3个字为例,多少字数其实没有任何影响

3、(核心步骤)把顶上3张(这里必须是3张)插到中间任意位置。

这一步也是保证第1张和最后1张是一样的!

4、(关键步骤)单放第1张牌K到一边

5、(无关步骤)南方人/北方人/不确定,分别拿顶上的1/2/3张牌插到中间,只要最后一张不变就无所谓

6、(关键步骤)男生拿掉1张,女生拿掉2张。也就是男生剩下6张,女生剩下5张。

7.“见证奇迹的时刻”从上往后轮放7次

Bingo!这一步就是确保拿到这张K牌。

8.1留2丢,3留四丢,循环直至手上只剩1张卡片

而前面一系列花里胡哨的操作就为拿到这个牌。

我们先来用Python模拟一下这个流程,先看列表版:

#!usr/bin/env python
# -*- coding:utf-8 _*-
# __author__:lianhaifeng
# __time__:2024/2/14 13:32import random
from loguru import loggerdef generate_cards():# 名字长度:1~7name_len = random.randint(2, 7)# 南方:1,北方:2,不确定:3location = random.randint(1, 3)# 男生:1,女生:2gender = random.randint(1, 2)# 初始卡片cards = ["J", "Q", "K", "王", "J", "Q", "K", "王"]# 按名字字数name_len,将队头卡片放在队尾for i in range(name_len):cards.append(cards[0])cards.pop(0)# 将前三张卡片插入到任意位置first_three_card = cards[:3]del cards[:3]pos = random.randint(1, 3)cards[pos:pos] = first_three_card# 最上面一张卡放在屁股下butt_card = cards.pop(0)# 南方/北方/不确定,拿出对应卡片,插入中间任意位置first_cards = cards[:location]del cards[:location]pos = random.randint(1, 5 - location)cards[pos:pos] = first_cards# 男生/女生,拿出卡片丢掉for _ in range(gender):del cards[0]# 见证奇迹的时刻for _ in range(7):cards.append(cards[0])cards.pop(0)logger.info(f"生成卡片:{cards}")# 好运留下来,烦恼丢出去while len(cards) > 1:cards.append(cards[0])del cards[0]del cards[0]logger.info(f"好运留下来,烦恼丢出去:{cards}")return cards[0], butt_carddef main():last_card, butt_card = generate_cards()logger.info(f"最后留下的卡片为:{last_card}")logger.info(f"屁股下的卡片为:{butt_card}")if __name__ == "__main__":main()

输出结果:

2024-02-14 18:38:56.470 | INFO     | __main__:generate_cards:54 - 生成卡片:['Q', 'K', '王', 'Q', 'J']
2024-02-14 18:38:56.470 | INFO     | __main__:generate_cards:61 - 好运留下来,烦恼丢出去:['王', 'Q', 'J', 'Q']
2024-02-14 18:38:56.471 | INFO     | __main__:generate_cards:61 - 好运留下来,烦恼丢出去:['J', 'Q', '王']
2024-02-14 18:38:56.471 | INFO     | __main__:generate_cards:61 - 好运留下来,烦恼丢出去:['王', 'J']
2024-02-14 18:38:56.471 | INFO     | __main__:generate_cards:61 - 好运留下来,烦恼丢出去:['王']
2024-02-14 18:38:56.471 | INFO     | __main__:main:68 - 最后留下的卡片为:王
2024-02-14 18:38:56.471 | INFO     | __main__:main:69 - 屁股下的卡片为:王

使用队列模拟(来源于许啸天):

#!usr/bin/env python
# -*- coding:utf-8 _*-
# __author__:lianhaifeng
# __time__:2024/2/14 13:32from collections import deque
from random import randintfrom loguru import loggerdef move_card_back(n, arr):for _ in range(n):move_card = arr.popleft()arr.append(move_card)return arrdef move_card_middle_random(n, arr):idx = randint(n + 1, len(arr) - 1)return deque(list(arr)[n:idx] + list(arr)[:n] + list(arr)[idx:])def main():arr = deque(["J", "Q", "K", "王", "J", "Q", "K", "王"])logger.info(f"步骤1:拿出4张牌,对折撕成8张,按顺序叠放。\n此时序列为:{''.join(arr)}\n---")name_len = randint(2, 5)arr = move_card_back(name_len, arr)logger.info(f"步骤2:随机选取名字长度为{name_len},把第1张牌放到末尾,操作{name_len}次。\n此时序列为:{''.join(arr)}\n---")arr = move_card_middle_random(3, arr)logger.info(f"步骤3:把牌堆顶3张放到中间的随机位置。\n此时序列为:{''.join(arr)}\n---")rest_card = arr.popleft()logger.info(f"步骤4:把最顶上的牌拿走,放在一边。\n拿走的牌为:{rest_card}\n此时序列为:{''.join(arr)}\n---")move_num = randint(1, 3)arr = move_card_middle_random(move_num, arr)logger.info(f"步骤5:我{'是南方人' if move_num == 1 else '是北方人' if move_num == 2 else '不确定自己是哪里人'},"f"把{move_num}张牌插入到中间的随机位置。\n此时序列为:{''.join(arr)}\n---")male_num = randint(1, 2)for _ in range(male_num):arr.popleft()logger.info(f"步骤6:我是{'男' if male_num == 1 else '女'}生,移除牌堆顶的{male_num}张牌。"f"\n此时序列为:{''.join(arr)}\n---")arr = move_card_back(7, arr)logger.info(f"步骤7:把顶部的牌移动到末尾,执行7次\n此时序列为:{''.join(arr)}\n---")logger.info(f"步骤8:把牌堆顶一张牌放到末尾,再移除一张牌,直到只剩下一张牌。")while len(arr) > 1:luck = arr.popleft()arr.append(luck)logger.info(f"好运留下来:{luck}\t\t此时序列为:{''.join(arr)}", )sadness = arr.popleft()logger.info(f"烦恼都丢掉:{sadness}\t\t此时序列为:{''.join(arr)}", )logger.info(f"---\n最终结果:剩下的牌为{arr[0]},步骤4中留下来的牌也是{rest_card}")if __name__ == "__main__":main()

输出结果:

2024-02-14 18:30:48.153 | INFO     | __main__:main:27 - 步骤1:拿出4张牌,对折撕成8张,按顺序叠放。
此时序列为:JQK王JQK王
---
2024-02-14 18:30:48.153 | INFO     | __main__:main:31 - 步骤2:随机选取名字长度为4,把第1张牌放到末尾,操作4次。
此时序列为:JQK王JQK王
---
2024-02-14 18:30:48.153 | INFO     | __main__:main:34 - 步骤3:把牌堆顶3张放到中间的随机位置。
此时序列为:王JQKJQK王
---
2024-02-14 18:30:48.153 | INFO     | __main__:main:37 - 步骤4:把最顶上的牌拿走,放在一边。
拿走的牌为:王
此时序列为:JQKJQK王
---
2024-02-14 18:30:48.153 | INFO     | __main__:main:41 - 步骤5:我是南方人,把1张牌插入到中间的随机位置。
此时序列为:QKJQKJ王
---
2024-02-14 18:30:48.154 | INFO     | __main__:main:48 - 步骤6:我是女生,移除牌堆顶的2张牌。
此时序列为:JQKJ王
---
2024-02-14 18:30:48.154 | INFO     | __main__:main:52 - 步骤7:把顶部的牌移动到末尾,执行7次
此时序列为:KJ王JQ
---
2024-02-14 18:30:48.154 | INFO     | __main__:main:54 - 步骤8:把牌堆顶一张牌放到末尾,再移除一张牌,直到只剩下一张牌。
2024-02-14 18:30:48.154 | INFO     | __main__:main:58 - 好运留下来:K		此时序列为:J王JQK
2024-02-14 18:30:48.154 | INFO     | __main__:main:60 - 烦恼都丢掉:J		此时序列为:王JQK
2024-02-14 18:30:48.154 | INFO     | __main__:main:58 - 好运留下来:王		此时序列为:JQK王
2024-02-14 18:30:48.154 | INFO     | __main__:main:60 - 烦恼都丢掉:J		此时序列为:QK王
2024-02-14 18:30:48.154 | INFO     | __main__:main:58 - 好运留下来:Q		此时序列为:K王Q
2024-02-14 18:30:48.154 | INFO     | __main__:main:60 - 烦恼都丢掉:K		此时序列为:王Q
2024-02-14 18:30:48.154 | INFO     | __main__:main:58 - 好运留下来:王		此时序列为:Q王
2024-02-14 18:30:48.155 | INFO     | __main__:main:60 - 烦恼都丢掉:Q		此时序列为:王
2024-02-14 18:30:48.155 | INFO     | __main__:main:62 - ---
最终结果:剩下的牌为王,步骤4中留下来的牌也是王

而这魔术背后的核心其实是约瑟夫问题


约舍夫环问题

据说著名犹太历史学家Josephus有过以下的故事:

在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。首先从一个人开始,越过k-2个人(因为第一个人已经被越过),并杀掉第k个人。接着,再越过k-1个人,并杀掉第k个人。这个过程沿着圆圈一直进行,直到最终只剩下一个人留下,这个人就可以继续活着。问题是,给定了和,一开始要站在什么地方才能避免被处决。Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。

#!usr/bin/env python
# -*- coding:utf-8 _*-
# __author__:lianhaifeng
# __time__:2024/2/14 18:51# -*- coding: utf-8 -*-
"""
Created on Thu Sep 27 12:04:57 2018
Description:约瑟夫问题的列表实现,基于python
Version:1.0
@author: HJY
"""
from loguru import loggerdef josephus(n, k):if n == 1:return 0else:return (josephus(n - 1, k) + k) % ndef find_survivors(n, k):ring_list = [i + 1 for i in range(n)]  # 创建一个包含1到n的整数列表index = 0  # 初始索引while len(ring_list) > 2:pop_index = (index + k - 1) % len(ring_list)  # 计算要删除的人的索引ring_list.pop(pop_index)  # 删除对应索引的人index = pop_index  # 更新索引logger.info(ring_list)return ring_listdef main():n = 41  # 总共有41个人k = 3  # 每报数到第3人就必须退出survivors = find_survivors(n, k)logger.info(f"最后剩下的两个人是编号为 {survivors[0]}{survivors[1]} 的人")if __name__ == "__main__":main()

输出结果是:

2024-02-14 19:13:17.744 | INFO     | __main__:find_survivors:30 - [1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41]
2024-02-14 19:13:17.745 | INFO     | __main__:find_survivors:30 - [1, 2, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41]
2024-02-14 19:13:17.745 | INFO     | __main__:find_survivors:30 - [1, 2, 4, 5, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41]
2024-02-14 19:13:17.745 | INFO     | __main__:find_survivors:30 - [1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41]
2024-02-14 19:13:17.745 | INFO     | __main__:find_survivors:30 - [1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41]
2024-02-14 19:13:17.746 | INFO     | __main__:find_survivors:30 - [1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41]
2024-02-14 19:13:17.746 | INFO     | __main__:find_survivors:30 - [1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41]
2024-02-14 19:13:17.746 | INFO     | __main__:find_survivors:30 - [1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19, 20, 22, 23, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41]
2024-02-14 19:13:17.746 | INFO     | __main__:find_survivors:30 - [1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19, 20, 22, 23, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41]
2024-02-14 19:13:17.746 | INFO     | __main__:find_survivors:30 - [1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19, 20, 22, 23, 25, 26, 28, 29, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41]
2024-02-14 19:13:17.746 | INFO     | __main__:find_survivors:30 - [1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19, 20, 22, 23, 25, 26, 28, 29, 31, 32, 34, 35, 36, 37, 38, 39, 40, 41]
2024-02-14 19:13:17.746 | INFO     | __main__:find_survivors:30 - [1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19, 20, 22, 23, 25, 26, 28, 29, 31, 32, 34, 35, 37, 38, 39, 40, 41]
2024-02-14 19:13:17.746 | INFO     | __main__:find_survivors:30 - [1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19, 20, 22, 23, 25, 26, 28, 29, 31, 32, 34, 35, 37, 38, 40, 41]
2024-02-14 19:13:17.747 | INFO     | __main__:find_survivors:30 - [2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19, 20, 22, 23, 25, 26, 28, 29, 31, 32, 34, 35, 37, 38, 40, 41]
2024-02-14 19:13:17.747 | INFO     | __main__:find_survivors:30 - [2, 4, 7, 8, 10, 11, 13, 14, 16, 17, 19, 20, 22, 23, 25, 26, 28, 29, 31, 32, 34, 35, 37, 38, 40, 41]
2024-02-14 19:13:17.747 | INFO     | __main__:find_survivors:30 - [2, 4, 7, 8, 11, 13, 14, 16, 17, 19, 20, 22, 23, 25, 26, 28, 29, 31, 32, 34, 35, 37, 38, 40, 41]
2024-02-14 19:13:17.747 | INFO     | __main__:find_survivors:30 - [2, 4, 7, 8, 11, 13, 16, 17, 19, 20, 22, 23, 25, 26, 28, 29, 31, 32, 34, 35, 37, 38, 40, 41]
2024-02-14 19:13:17.747 | INFO     | __main__:find_survivors:30 - [2, 4, 7, 8, 11, 13, 16, 17, 20, 22, 23, 25, 26, 28, 29, 31, 32, 34, 35, 37, 38, 40, 41]
2024-02-14 19:13:17.758 | INFO     | __main__:find_survivors:30 - [2, 4, 7, 8, 11, 13, 16, 17, 20, 22, 25, 26, 28, 29, 31, 32, 34, 35, 37, 38, 40, 41]
2024-02-14 19:13:17.759 | INFO     | __main__:find_survivors:30 - [2, 4, 7, 8, 11, 13, 16, 17, 20, 22, 25, 26, 29, 31, 32, 34, 35, 37, 38, 40, 41]
2024-02-14 19:13:17.759 | INFO     | __main__:find_survivors:30 - [2, 4, 7, 8, 11, 13, 16, 17, 20, 22, 25, 26, 29, 31, 34, 35, 37, 38, 40, 41]
2024-02-14 19:13:17.759 | INFO     | __main__:find_survivors:30 - [2, 4, 7, 8, 11, 13, 16, 17, 20, 22, 25, 26, 29, 31, 34, 35, 38, 40, 41]
2024-02-14 19:13:17.760 | INFO     | __main__:find_survivors:30 - [2, 4, 7, 8, 11, 13, 16, 17, 20, 22, 25, 26, 29, 31, 34, 35, 38, 40]
2024-02-14 19:13:17.760 | INFO     | __main__:find_survivors:30 - [2, 4, 8, 11, 13, 16, 17, 20, 22, 25, 26, 29, 31, 34, 35, 38, 40]
2024-02-14 19:13:17.760 | INFO     | __main__:find_survivors:30 - [2, 4, 8, 11, 16, 17, 20, 22, 25, 26, 29, 31, 34, 35, 38, 40]
2024-02-14 19:13:17.760 | INFO     | __main__:find_survivors:30 - [2, 4, 8, 11, 16, 17, 22, 25, 26, 29, 31, 34, 35, 38, 40]
2024-02-14 19:13:17.760 | INFO     | __main__:find_survivors:30 - [2, 4, 8, 11, 16, 17, 22, 25, 29, 31, 34, 35, 38, 40]
2024-02-14 19:13:17.761 | INFO     | __main__:find_survivors:30 - [2, 4, 8, 11, 16, 17, 22, 25, 29, 31, 35, 38, 40]
2024-02-14 19:13:17.761 | INFO     | __main__:find_survivors:30 - [2, 4, 8, 11, 16, 17, 22, 25, 29, 31, 35, 38]
2024-02-14 19:13:17.761 | INFO     | __main__:find_survivors:30 - [2, 4, 11, 16, 17, 22, 25, 29, 31, 35, 38]
2024-02-14 19:13:17.761 | INFO     | __main__:find_survivors:30 - [2, 4, 11, 16, 22, 25, 29, 31, 35, 38]
2024-02-14 19:13:17.762 | INFO     | __main__:find_survivors:30 - [2, 4, 11, 16, 22, 25, 31, 35, 38]
2024-02-14 19:13:17.762 | INFO     | __main__:find_survivors:30 - [2, 4, 11, 16, 22, 25, 31, 35]
2024-02-14 19:13:17.762 | INFO     | __main__:find_survivors:30 - [2, 4, 16, 22, 25, 31, 35]
2024-02-14 19:13:17.762 | INFO     | __main__:find_survivors:30 - [2, 4, 16, 22, 31, 35]
2024-02-14 19:13:17.763 | INFO     | __main__:find_survivors:30 - [4, 16, 22, 31, 35]
2024-02-14 19:13:17.763 | INFO     | __main__:find_survivors:30 - [4, 16, 31, 35]
2024-02-14 19:13:17.763 | INFO     | __main__:find_survivors:30 - [16, 31, 35]
2024-02-14 19:13:17.763 | INFO     | __main__:find_survivors:30 - [16, 31]
2024-02-14 19:13:17.763 | INFO     | __main__:main:38 - 最后剩下的两个人是编号为 1631 的人

我们思考的是「约瑟夫问题」的一个变种(留1个丢1个):在一个环形队列中,每次将队列中第一张牌放到末尾,然后移除第一张牌,重复此操作直到只剩下一张牌时停止。我们要确定最后一张留在队列中的牌的位置。

首先考虑特殊情况:当队列中的牌数 n 为 2 的幂次时,比如1, 2, 4…,无论开始时第一张牌是什么,最后一张牌一定是第1张牌。

当 n 不是 2 的幂次时,巧妙的部分来了:考虑比 n 小的最大的 2 的 m 幂次,然后在第一个大循环中,留一张、丢一张,直到剩下 2 的 m 幂次张牌,此时我们就回到了问题的特殊情况:目前留下的第 1 张牌会留到最后。

在一个环中,哪张牌都可以看成第一张牌,比如19张牌的话,可以看成 2 ^ 4 + 3,留一张丢一张,三次后恰好构成2 ^ 4,此时将要留的那张牌即可看成是新环中的第一张,其索引位置即为2 * 3 + 1,也就是根据特殊情况:第7张牌会留到最后。

我们很容易推导出第k个牌可以留到最后:

现在考虑牌数为2 ^ n + a的情况。

因此:

因此,这个魔术中要想最后获得K,计算好的K的位置为:

  • 男生:2 * (6 - 2 ^ 2) + 1 = 5
  • 女生:2 * (5 - 2 ^ 2) + 1 = 3

这也就是7字真言的在这个魔术中作用。

小结

到这里,刘谦的第二个扑克牌魔术,我们已经揭秘了。毫无疑问,它本质上是一个数学魔术。

扑克牌魔术作为魔术的一个重要类型,其背后的原理大多与数学密切相关。通过深入学习数学,我们每个人都有可能成为一位出色的魔术师!不妨在家人和朋友面前展示一下你的技艺吧!

2024年,希望大家“烦恼丢出去,幸福(好运)留下来!”

最后

今天的分享就到这里。如果觉得不错,点赞,关注安排起来吧。

这篇关于60行python代码带你了解刘谦春晚魔术的奥秘的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/725853

相关文章

uniapp接入微信小程序原生代码配置方案(优化版)

uniapp项目需要把微信小程序原生语法的功能代码嵌套过来,无需把原生代码转换为uniapp,可以配置拷贝的方式集成过来 1、拷贝代码包到src目录 2、vue.config.js中配置原生代码包直接拷贝到编译目录中 3、pages.json中配置分包目录,原生入口组件的路径 4、manifest.json中配置分包,使用原生组件 5、需要把原生代码包里的页面修改成组件的方

公共筛选组件(二次封装antd)支持代码提示

如果项目是基于antd组件库为基础搭建,可使用此公共筛选组件 使用到的库 npm i antdnpm i lodash-esnpm i @types/lodash-es -D /components/CommonSearch index.tsx import React from 'react';import { Button, Card, Form } from 'antd'

17.用300行代码手写初体验Spring V1.0版本

1.1.课程目标 1、了解看源码最有效的方式,先猜测后验证,不要一开始就去调试代码。 2、浓缩就是精华,用 300行最简洁的代码 提炼Spring的基本设计思想。 3、掌握Spring框架的基本脉络。 1.2.内容定位 1、 具有1年以上的SpringMVC使用经验。 2、 希望深入了解Spring源码的人群,对 Spring有一个整体的宏观感受。 3、 全程手写实现SpringM

Python 字符串占位

在Python中,可以使用字符串的格式化方法来实现字符串的占位。常见的方法有百分号操作符 % 以及 str.format() 方法 百分号操作符 % name = "张三"age = 20message = "我叫%s,今年%d岁。" % (name, age)print(message) # 我叫张三,今年20岁。 str.format() 方法 name = "张三"age

代码随想录算法训练营:12/60

非科班学习算法day12 | LeetCode150:逆波兰表达式 ,Leetcode239: 滑动窗口最大值  目录 介绍 一、基础概念补充: 1.c++字符串转为数字 1. std::stoi, std::stol, std::stoll, std::stoul, std::stoull(最常用) 2. std::stringstream 3. std::atoi, std

记录AS混淆代码模板

开启混淆得先在build.gradle文件中把 minifyEnabled false改成true,以及shrinkResources true//去除无用的resource文件 这些是写在proguard-rules.pro文件内的 指定代码的压缩级别 -optimizationpasses 5 包明不混合大小写 -dontusemixedcaseclassnames 不去忽略非公共

探索蓝牙协议的奥秘:用ESP32实现高质量蓝牙音频传输

蓝牙(Bluetooth)是一种短距离无线通信技术,广泛应用于各种电子设备之间的数据传输。自1994年由爱立信公司首次提出以来,蓝牙技术已经经历了多个版本的更新和改进。本文将详细介绍蓝牙协议,并通过一个具体的项目——使用ESP32实现蓝牙音频传输,来展示蓝牙协议的实际应用及其优点。 蓝牙协议概述 蓝牙协议栈 蓝牙协议栈是蓝牙技术的核心,定义了蓝牙设备之间如何进行通信。蓝牙协议

一道经典Python程序样例带你飞速掌握Python的字典和列表

Python中的列表(list)和字典(dict)是两种常用的数据结构,它们在数据组织和存储方面有很大的不同。 列表(List) 列表是Python中的一种有序集合,可以随时添加和删除其中的元素。列表中的元素可以是任何数据类型,包括数字、字符串、其他列表等。列表使用方括号[]表示,元素之间用逗号,分隔。 定义和使用 # 定义一个列表 fruits = ['apple', 'banana

Python应用开发——30天学习Streamlit Python包进行APP的构建(9)

st.area_chart 显示区域图。 这是围绕 st.altair_chart 的语法糖。主要区别在于该命令使用数据自身的列和指数来计算图表的 Altair 规格。因此,在许多 "只需绘制此图 "的情况下,该命令更易于使用,但可定制性较差。 如果 st.area_chart 无法正确猜测数据规格,请尝试使用 st.altair_chart 指定所需的图表。 Function signa

Linux系统稳定性的奥秘:探究其背后的机制与哲学

在计算机操作系统的世界里,Linux以其卓越的稳定性和可靠性著称,成为服务器、嵌入式系统乃至个人电脑用户的首选。那么,是什么造就了Linux如此之高的稳定性呢?本文将深入解析Linux系统稳定性的几个关键因素,揭示其背后的技术哲学与实践。 1. 开源协作的力量Linux是一个开源项目,意味着任何人都可以查看、修改和贡献其源代码。这种开放性吸引了全球成千上万的开发者参与到内核的维护与优化中,形成了