- 帖子
- 31
- 精华
- 0
- 积分
- 111
- 阅读权限
- 20
- 注册时间
- 2021-2-8
- 最后登录
- 2021-4-13
|
第二题
希望老师能看看
有一个问题(不知道是不是我多虑了):如果有某些用户心血来潮,押注的是一些奇奇怪怪的东西,刚好又不会被while检测到,那该怎么解决呢?
谢谢老师啦- import random
- my_score = 100
- com_score = 100
- yx_rule = "游戏规则:\n双方玩家分别为真人和电脑,初始分数均为100.\n"
- yx_rule += "有3个6面骰子,可以掷出总和为3~18的数,其中3~10为'small',11~18为'big',总和为实际数字.\n"
- yx_rule += "游戏开始后可押'big'或'small',或3~18中的数字(最多5个),也可同时押大小和数字.\n"
- yx_rule += "双方玩家的计分制度相同:押中大小,加分数为实际数字的两倍;押中数字,加分数为实际数字的10倍;\n"
- yx_rule += "同样存在扣分机制:若押了超过2个数字,扣分数为 (押注中的数字个数 - 2)* (实际数字的2倍)."
- print(yx_rule)
- print('\nOK!游戏开始啰!\n\n')
- active = True #使用变量作为循环条件便于后面退出循环
- while active == True:
- input_w = "请押注:\n您可以押'big''small'或3~18中的任意整数,或同时押注.\n"
- input_w += "(最多押1个大小和3个不重复的数字.若同时押注,您需要用逗号分隔.)\n"
- mb_input = input(input_w)
- mb_num = []
- mb_str = []
- sy = [] #sy为不舍去的情况下的数字列,若sy长度大于mb_num,即可判断有不符合条件的数,并进入while循环
- for a in mb_input.split(','):
- if a.isnumeric():
- sy.append(a)
- if (int(a) > 18) or (int(a) < 3): #若不符合条件将被舍去
- continue
- mb_num.append(int(a))
- elif a.isalpha():
- mb_str.append(a)
- while (len(set(mb_num)) < len(mb_num)) or (len(mb_num) > 5) or (len(mb_str) > 1) or (len(mb_num) < len(sy)):
- mb_num = []
- mb_str = []
- sy = []
- print("注意!最多押1个大小和3个不重复的数字(3~18)!重复押注要用逗号分隔!")
- mb_input = input("请重新押注:")
- for a in mb_input.split(','):
- if a.isnumeric():
- sy.append(a)
- if (int(a) > 18) or (int(a) < 3):
- continue
- mb_num.append(int(a))
- elif a.isalpha():
- mb_str.append(a) #这一段和while前的那段基本相同
- if mb_str:
- mb_str = mb_str[0]
- #以上为记录用户输入部分:得到所押大小&数字
-
- d_1 = random.randint(1,6)
- d_2 = random.randint(1,6)
- d_3 = random.randint(1,6)
- #专门定义三个dice而不是直接random.randint(3,18),增加点儿真实感(?)
- real_num = d_1 + d_2 + d_3
- if d_1 + d_2 + d_3 <= 10:
- real_str = 'small'
- elif d_1 + d_2 + d_3 >= 11:
- real_str = 'big'
- if mb_str:
- if mb_str == real_str:
- my_score += real_num * 2
- for mn in mb_num:
- if mn == real_num:
- my_score += real_num * 10
- if len(mb_num) > 2:
- my_score -= (real_num * 2) * (len(mb_num) - 2)
- if (real_num not in mb_num) and (len(mb_num) > 2):
- my_score -= (real_num * 2) * (len(mb_num) - 2)
- com_str = random.choice(['big','small'])
- com_num = random.randint(3,18)
- if com_str == real_str:
- com_score += real_num * 2
- if com_num == real_num:
- com_score += real_num * 10
- #以上为后台判断部分
- print('你押了: %s' % mb_input)
- print('电脑玩家押了: %s,%d' % (com_str, com_num))
- print('骰子分别掷出%d,%d,%d,实际数字为%d,实际大小为%s' % (d_1,d_2,d_3,real_num,real_str))
- print('\n那么,您和电脑玩家的比分现在是: %d - %d' % (my_score, com_score))
- #以上为输出结果部分
-
- b = 1 #先定义b以进入while循环
- while b != '': #防止玩家兴趣渐消
- b = input("如果要结束游戏,请输入'quit'.要继续的话请按回车哦.\n")
- if b == 'quit':
- active = False
- print('游戏结束,拜拜!')
- break
- #以上为判断是否结束游戏部分
复制代码 |
|