敲七 小程序

敲七小程序

设计实现一个程序,帮助提高自己在玩 “敲七” 游戏时的水平

题目概述

  • 好友围坐在酒桌前,以任意一人开始轮流报数,数字从1开始。

  • 凡是遇到任何7的倍数,如14、21或含7的数字如17、27均以敲打桌面代替。

  • 遇到反应慢了没有敲打桌面的人则失败。失败的惩罚就是罚酒或者表演节目。

  • 接下来,被惩罚过的人重新开始报数,可以从10以下任意一个数字开始。

  • 提示(选做):此玩法有升级版本,即当遇到7的倍数或含7的数字后倒转顺序报数,难度升级欢乐升级。(想不明白,一直在一个循环里,17, 7-7 ?)

需求说明

很简单,完成 ‘敲七’ 辅助程序,帮助玩家赢得游戏,简化玩家思考。

运行环境

编程语言: Python

所用模块: 无

思路及解题方法

1.‘敲七’ 游戏,判断游戏胜负的根本在于玩家给出数字是否是七的倍数或者数字中有七,所以得写一个函数来进行判断

1
2
3
4
5
6
7
8
# 判断是否是七的倍数或者数字中有7
def is_seven(num):
if num % 7 == 0:
return True
elif str(num).find('7') >= 0:
return True
else:
return False

2.判断胜负的条件有了,就得需要几个必须的参数:

  • 玩家的人数 m

  • 程序使用玩家的所在的位置 n

  • 第一个玩家给出的数字 x

3.有了这些参数以后,就可以知道你距离第一位玩家 n-1,加上回合数(i),x+n-1+m*i就是程序使用玩家的下一回合的数字, 这样基本的伪代码就出来,这里也不展示了。

唯一可能稍微需要注意的就是每次输入数字的判断了,推荐自定义输入函数

全部代码

1
2
3
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
"""
author: lightfish
language: Python
time: 2019/6/20
describe: 敲七辅助程序
"""


# 判断是否是七的倍数或者数字中有7
def is_seven(num):
if num % 7 == 0:
return True
elif str(num).find('7') >= 0:
return True
else:
return False


def input_number(des):
while True:
n = input(des + ': ')
if n.isdigit() and int(n) > 0:
break
else:
print("请正确输入数字...")
return int(n)


def input_number_limit(des, limit):
while True:
n = input(des + ': ')
if n.isdigit() and int(n) > 0:
break
elif int(n) < limit:
print('请输入小于{}的数'.format(limit))
else:
print("请正确输入数字...")
return int(n)


def input_with_default(des, default):
while True:
n = input(des + ': ')
if n.strip() == '':
return default
elif n.isdigit() and int(n) > 0:
break
else:
print("请正确输入数字...")
return int(n)


if __name__ == '__main__':
print("""
======Welcome to Knock Seven Auxiliary Program====
======欢迎来到 '敲七' 辅助程序 ===================
==========输入 '1' 进入 '稍微动脑' 模式===========
==========输入 '2' 进入 '输了删程序' 模式=========
==========输入 'q' 退出程序=================
""")
while True:
instruction = input("请输入指令: ")
if instruction.strip() == 'q':
print("""
成功退出程序。
""")
break
elif instruction.strip() == '1':
print("""
欢迎进入 '敲七' 辅助程序;
""")
m = input_number("请输入玩家人数")
while True:
n = input_number("请输入您是第几个玩家(按顺序)")
if n > m:
print("请正确输入,不能大于总玩家人数")
else:
break
x = input_number_limit("请输入第一个玩家的数字", 10)
max_num = input_with_default("请输入最大数字(即封顶数字),可不输入,默认 500", 500)
list_num = []
print("计算完成: 遇到只需要以下数字 '敲打桌面' 即可 \n")
for i in range(x, max_num, m):
j = i + n - 1
if is_seven(j) and j < max_num:
# print(j, end=' ')
list_num.append(str(j))
print(' '.join(list_num) if len(list_num) >
0 else '恭喜你不需要拍桌子,只需要进行加一操作,enjoy yourself')
print('\n程序已完成\n')
print("""
==========输入 '1' 进入 '稍微动脑' 模式===========
==========输入 '2' 进入 '输了删程序' 模式=========
==========输入 'q' 退出程序=================
""")
elif instruction.strip() == '2':
print("""
欢迎来到 '输了删程序' 模式
""")
m = input_number("请输入玩家人数")
while True:
n = input_number(
"请输入您是第几个玩家(按顺序),PS:如果你是第一位玩家并且想说 '7' 请拍 '桌子',其他随意")
if n > m:
print("请正确输入,不能大于总玩家人数")
else:
break
x = input_number_limit("请输入第一个玩家的数字", 10)
print("""
已成功开启 '无脑' 模式,按回车进入下一回合,输入'q',退出程序
""")
i = 0
while True:
j = x + n - 1 + m * i
print('第{}回合: '.format(i + 1), end='拍桌子' if is_seven(j) else str(j))
ins = input()
if ins.strip() == 'q':
break
i = i + 1
print("成功退出程序...")
print("""
==========输入 '1' 进入 '稍微动脑' 模式===========
==========输入 '2' 进入 '输了删程序' 模式=========
==========输入 'q' 退出程序=================
""")
else:
print('输入正确指令...')
  • 最终效果GIF图如下:

img