题目
用五个六面骰子玩的骰子游戏,每投骰子组一次,就会出现 5 个数字的数组(数字:
1-6
),统计数组里每个数字出现的次数,将每个数字出现的次数拆分成 3
次 和
1
次 的组合,然后按照下面的规则进行计数。注意:如果出现次数大于或者等于 3
次,那么必须至 少有一个按照 3
次来计算不能全部按照
1
次来计算
3 次
1 = = 1000
分
3
次
6 = = 600
分
3
次
5 = = 500
分
3
次
4 = = 400 分 3
次
3 = = 300
分
3
次
2 = = 200
分
1
次
1 => 100
分
1
次
5 => 50 分 1
次
2 => 0
分
1
次
3 => 0
分
1
次
4 => 0
分
1
次
6 => 0
分。 例如,5
出现了
5
次,那么应当做作
3
个
5
、
1
个
5
和
1
个
5
来计算 得分;5
出现了
次,那么应当作
3
个
5
、
3
个
5
来计算得分,其他 数字同理。
测试用例
:
扔骰子计算得分
5 1 3 4 1 50 + 2 * 100 = 250
1 1 1 3 1 1000 + 100 = 1100
2 4 4 5 4 400 + 50 = 450。
方法
将输入的筛子点数,用集合将相同的去掉,再用循环判断每个点数出现的次数,形成点数与出现次数一一对应的两个列表。再用for循环,在for循环语句里,用点数出现次数的列表做for循环的迭代器,用两个while循环判断点数出现的次数是否大于3,while语句内部判断这个次数的骰子点数是多少,将其对应的分数算出来,用一个计数器将每次结果相加,最后输出就得到了最后的结果。
代码
s=input("输入骰子的点数:")
s1=s.split()#将字符串转成列表
s2=s1[:]#切片
s2=set(s2)#转换成集合
s2=list(s2)#再次转为列表
s3=[]
t1=0
t4=0
for i in s2:#计算每个骰子点数出现的次数
t=s1.count(i)
s3.append(t)
for i in s3:#迭代器为骰子点数出现次数的列表
t3=s2[t4]#将这个次数的骰子值得到
t3=int(t3)#列表里面为字符串,需要转换为整数才能进行下面操作
i=int(i)
t2 = i % 3#判断这个点数具体比3多几或者小于3具体出现几次
while i>=3:#如果出现次数大于3进入这个while循环
#判断骰子值具体是几,再进行相应的计算分值。因为每次取一个值,所有计算完后就要用break直接跳出while循环,
# 再次进行for循环
if t3==1:
t1=t1+1000+t2*100#都已经出现三次了,所以t2一定是比三次多出的次数,
break
elif t3==2:
t1=t1+200
break
elif t3==3:
t1=t1+300
break
elif t3==4:
t1=t1+400
break
elif t3==5:
t1=t1+500+50*t2
break
elif t3==6:
t1=t1+600
break
while i<3:#如果出现次数小于3
#因为出现次数小于3的有些值没有分数,就没有if语句但是要跳出while循环,因此最后要多一个else break 跳出,
#这个要注意
if t3==1:
t1=t1+t2*100#t2就是这个筛子具体出现的次数
break
elif t3==5:
t1=t1+50*t2
break
else:
break
t4=t4+1#手动将存储骰子列表向后推一位
print(f"扔骰子得分为:{t1}")