Skip to content

Latest commit

 

History

History
313 lines (255 loc) · 7.04 KB

150-203873-[趣味拓展]综合练习_玩骰子_dices.sy.md

File metadata and controls

313 lines (255 loc) · 7.04 KB
show version enable_checker
step
1.0
true

逻辑或 or

回忆

  • 这次了解的是优先级
  • 每个运算符都有自己的优先级位置
  • 逻辑运算符的优先级从高到低
    • not
    • and
    • or

图片描述

  • 有什么比较复杂的逻辑运算么???🤔

骰子

  • 每人五个骰子,摇出后,依其点数牌形可分为:
    • 散牌(五个骰子点数各不一样)
    • 一对(五个骰子中仅有两个骰子点数一样,其余皆不一样)
    • 两对(两个对子加一个其他点数,如一对二加一对四加一个三)
    • 三条(三个骰子的点数一致,余下两个骰子点数各不相同,如三个四加一个二和一个六)
    • 葫芦(也就是扑克牌中的三条带一对:三个骰子点数同为某数,余下两个骰子点数同为另一数,如三个三加一对二)
    • 炸弹(其中四个骰子的点数一致,如四个一加一个五)
    • 顺子(五个骰子点数呈连续分布,如 12345 和 23456)
    • 豹子(五个骰子点数全一样)

图片描述

  • 第一步就是
    • 通过五个随机的色子
    • 得到相应的级别
  • 动手吧!

投掷

from random import randint
dices = []
for num in range(5):
    dices.append(randint(1,6))
print(dices)
  • 结果

图片描述

  • 投了骰子之后
    • 需要整理

整理

from random import randint
dices = []
for num in range(5):
    dices.append(randint(1,6))
dices.sort()
print(dices)
  • 结果

图片描述

分级

  • 散牌(五个骰子点数各不一样)
  • 一对(五个骰子中仅有两个骰子点数一样,其余皆不一样)
  • 两对(两个对子加一个其他点数,如一对二加一对四加一个三)
  • 三条(三个骰子的点数一致,余下两个骰子点数各不相同,如三个四加一个二和一个六)
  • 葫芦(也就是扑克牌中的三条带一对:三个骰子点数同为某数,余下两个骰子点数同为另一数,如三个三加一对二)
  • 炸弹(其中四个骰子的点数一致,如四个一加一个五)
  • 顺子(五个骰子点数呈连续分布,如 12345 和 23456)
  • 豹子(五个骰子点数全一样)
if (dices[0]==dices[4]):
    level = 8
    print("baozi")
elif (dices[4]==dices[3]+1==dices[2]+2==dices[1]+3==dices[0]+4):
    level = 7
    print("shunzi")
elif (dices[0]==dices[3] or dices[1]==dices[4]):
    level = 6
    print("zhadan")
elif ((dices[0]==dices[2]) and (dices[3]==dices[4])) or\
     ((dices[0]==dices[1]) and (dices[2]==dices[4])):
    level = 5
    print("hulu")
elif (dices[0]==dices[2] or dices[1]==dices[3] or dices[2]==dices[4]):
    level = 4
    print("santiao")
  • 两对看起来情况很复杂啊
  • 先去游乐场找找思路

游乐场

图片描述

  • 这个思路看起来可行

获得 counts

from random import randint
dices = []
for num in range(5):
    dices.append(randint(1,6))
dices.sort()
c = []
for num in range(1,7):
    c.append(dices.count(num))
print(dices)
print(c)
  • 结果

图片描述

准备两对 和 一对

elif (c.count(2)==2):
    level = 3
    print("liangdui")
elif (c.count(2)==1):
    level = 2
    print("yidui")
else:
    level = 1
    print("sanpai")
  • 当获得了 counts 之后
  • 其实原来的代码也可以简化

简化

from random import randint
dices = []
for num in range(5):
    dices.append(randint(1,6))
dices.sort()
c = []
for num in range(1,7):
    c.append(dices.count(num))
print(dices)
print(c)
if (dices[0]==dices[4]):
    level = 8
    print("baozi")
elif (dices[4]==dices[3]+1==dices[2]+2==dices[1]+3==dices[0]+4):
    level = 7
    print("shunzi")
elif (c.count(4)==1):
    level = 6
    print("zhadan")
elif (c.count(3)==1 and c.count(2)==1) :
    level = 5
    print("hulu")
elif (c.count(3)==1):
    level = 4
    print("santiao")
elif (c.count(2)==2):
    level = 3
    print("liangdui")
elif (c.count(2)==1):
    level = 2
    print("yidui")
else:
    level = 1
    print("sanpai")
  • 这样就有了等级的基本规则
  • 同级的也可以比大小

色子的展示

图片描述

for dice in dices:
    s = chr( 9855 + dice )
    print(s,end=" ")
print()
  • 可以控制颜色吗?

颜色控制

图片描述

  • 1、4可以是红的
for dice in dices:
    s = chr( 9855 + dice )
    if dice == 1 or dice == 4:
        s = "\33[31m" + s + "\33[0m"
    print(s,end=" ")
print()

最终代码

from random import randint
dices = []
for num in range(5):
    dices.append(randint(1,6))
dices.sort()
c = []
for num in range(1,7):
    c.append(dices.count(num))
print(dices)
for dice in dices:
    s = chr( 9855 + dice )
    if dice == 1 or dice == 4:
        s = "\33[31m" + s + "\33[0m"
    print(s,end=" ")
print()
print(c)
if (dices[0]==dices[4]):
    level = 8
    print("baozi")
elif (dices[4]==dices[3]+1==dices[2]+2==dices[1]+3==dices[0]+4):
    level = 7
    print("shunzi")
elif (c.count(4)==1):
    level = 6
    print("zhadan")
elif (c.count(3)==1 and c.count(2)==1) :
    level = 5
    print("hulu")
elif (c.count(3)==1):
    level = 4
    print("santiao")
elif (c.count(2)==2):
    level = 3
    print("liangdui")
elif (c.count(2)==1):
    level = 2
    print("yidui")
else:
    level = 1
    print("sanpai")

胜负规则

  • 胜负规则为豹子>顺子>炸弹>葫芦>三条>两对>对子>散牌
  • 若属于同一类型,则依次比较类型构成主次要成分的骰子点数大小
  • 如炸弹先比较四个相同骰子的点数,再比较散牌
  • 葫芦先比较三个相同骰子再比较对牌
  • 两对先比较较大的对,再比较稍小的对,最后比较散牌
  • 如此类推
  • 比较点数时 1 > 6 > 5 > 4 > 3 > 2

举例

  • 试举例,如双方均为葫芦
    • 一人为三个五带对二
    • 另一人为三个四带对六
    • 前者胜
  • 又若双方均为两对,同有对二、对六
    • 但一方散牌为五
    • 另一方为一
    • 则后者胜
  • 这真的有点复杂
  • 有兴趣的同学可以把随机摇两把
  • 然后比大小

参考

  • 可以做个字典
    • 当级别相同的时候
    • 去比较字典里面的数字

图片描述

  • 图中可知
    • 有1个2
    • 有2个3
    • 有2个4
  • 需要你想清楚
  • 写好哦!

总结

  • 这次做了一个比较复杂的骰子的例子
    • 真的是很复杂
    • 综合运用逻辑类的与或非
  • 为什么要强调逻辑类的与或非
  • 难道说除了逻辑类
  • 还有其他类的与或非???🤔
  • 下次再说 👋