什么是吉普赛人读心术
吉普赛人读心术是一个数学游戏
先想一个数,然后减去个位数再减十位数,得到一个新的数
例如37-3-7=27
然后给一个表,找到这个新的数所对应的符号或图片
原理
假设一个数 个位是b 十位是a
这个数 = 10a+b
那么新的数 = 10a-a-b=9a
9a是9的倍数
只要每次的表的9都是同一个符号或图片,那么就可以实现读心术的效果
策略
用print函数提示玩家想一个数字,然后减去个位和十位(把“37-3-7”打印出来提示玩家)
之后就打印一个表,让玩家找
表
表的内容每次要不一样,否则玩家就看出破绽了
实现
可以用random将9个符号打乱
代码
import random
import time
def main():
symbol = ['!','@','#','$','%','^','&','*','=']
random_number = [0,1,2,3,4,5,6,7,8]
# 提示玩家
print('首先想一个数字,然后减去个位和十位')
print('例:37-3-7=10')
print("然后对照这个下面的表找到新的数字所对的符号")
input("读完就按下回车键")
# 将符号打乱
for i in range(len(symbol) - 1, 0, -1):
# 随机选择一个索引
j = random.randint(0, i)
# 交换元素
symbol[i], symbol[j] = symbol[j], symbol[i]
n = 10 # 次数
for i in range(n):
for j in range(9):
print(symbol[j%9],end = ' ')
print()
for j in range(9):
print(9*i+(j+1),end = ' ')
print()
input('对照完就按下回车键')
print('是不是',symbol[-1])
input("按下回车键关闭程序")
main()
但是他的效果是
没对齐
对齐
再Python里,对齐的方法有format
内容:对齐方式总字符串数
对齐方式:
居中 ^
左 <
右 >
比如
width = 10
print(f"hello:^{width}")
修改后的代码
import random
def main():
symbol = ['!','@','#','$','%','^','&','*','=']
random_number = [0,1,2,3,4,5,6,7,8]
# 提示玩家
print('首先想一个数字,然后减去个位和十位')
print('例:37-3-7=10')
print("然后对照这个下面的表找到新的数字所对的符号")
input("读完就按下回车键")
# 将符号打乱
for i in range(len(symbol) - 1, 0, -1):
# 随机选择一个索引
j = random.randint(0, i)
# 交换元素
symbol[i], symbol[j] = symbol[j], symbol[i]
n = 10 # 次数
width = 4 # 每列宽度
for i in range(n):
# 打印符号行
for j in range(9):
print(f'{symbol[j % 9]:^{width}}', end=' ')
print()
# 打印数字行
for j in range(9):
print(f'{9 * i + (j + 1):^{width}}', end=' ')
print()
input('对照完就按下回车键')
print('是不是', symbol[-1])
input("按下回车键关闭程序")
if __name__ == "__main__":
main()
挑战
用tkinter制作
input就用button
print就用text
*本挑战不提供标准答案
更新提示
由于这几年有事,更新速度慢,请谅解,谢谢!