1.try:的语句出现异常才会执行except后的语句,如果正常,则执行完try后执行else。另外,finally语句不管有无异常都会执行。
- “四川麻将”共有108张牌,分为“筒”、“条”、“万”三种类型,每种类型的牌有1~9的点数,
每个点数有4张牌;游戏通常有4个玩家,游戏开始的时候,有一个玩家会拿到14张牌(首家),
其他三个玩家每人13张牌。要求用面向对象的方式创建麻将牌和玩家并实现洗牌、摸牌以及玩家按照
类型和点数排列手上的牌的操作,最后显示出游戏开始的时候每个玩家手上的牌。
from random import randrange, shuffle
class Piece(object):
def __init__(self, suite, face):
self._suite = suite
self._face = face
@property
def suite(self):
return self._suite
@property
def face(self):
return self._face
def __str__(self):
return str(self._face) + self._suite
class Mahjong(object):
def __init__(self):
self._pieces = []
self._index = 0
suites = ['筒', '条', '万']
for suite in suites:
for face in range(1, 10):
for _ in range(4):
piece = Piece(suite, face)
self._pieces.append(piece)
def shuffle(self):
self._index = 0
shuffle(self._pieces)
@property
def next(self):
piece = self._pieces[self._index]
self._index += 1
return piece
@property
def has_next(self):
return self._index < len(self._pieces)
class Player(object):
def __init__(self, name):
self._name = name
self._pieces_on_hand = []
@property
def name(self):
return self._name
@property
def pieces(self):
return self._pieces_on_hand
def get(self, piece):
self._pieces_on_hand.append(piece)
def drop(self, index):
return self._pieces_on_hand.pop(index)
def clear(self):
self._pieces_on_hand.clear()
def sort(self):
self._pieces_on_hand.sort(key=get_key)
def get_key(piece):
return piece.suite, piece.face
def display(player):
print(player.name, end=': ')
for piece in player.pieces:
print(piece, end=' ')
print()
def main():
mahjong = Mahjong()
mahjong.shuffle()
players = [Player('东邪'), Player('西毒'), Player('南帝'), Player('北丐')]
for _0 in range(3):
for player in players:
for _1 in range(4):
player.get(mahjong.next)
players[0].get(mahjong.next)
for player in players:
player.get(mahjong.next)
for player in players:
player.sort()
display(player)
if __name__ == '__main__':
main()
东邪: 1万 1条 3条 4条 4条 8条 9条 1筒 2筒 2筒 5筒 6筒 9筒 9筒
西毒: 3万 5万 7万 9万 9万 7条 8条 9条 3筒 3筒 5筒 5筒 7筒
南帝: 3万 3万 5万 6万 1条 1条 4条 5条 6条 9条 4筒 7筒 9筒
北丐: 5万 8万 1条 2条 3条 3条 6条 7条 7条 1筒 3筒 8筒 8筒
3.random
import random
print( random.randint(1,10) ) # 产生 1 到 10 的一个整数型随机数
print( random.random() ) # 产生 0 到 1 之间的随机浮点数
print( random.uniform(1.1,5.4) ) # 产生 1.1 到 5.4 之间的随机浮点数,区间可以不是整数
print( random.choice('tomorrow') ) # 从序列中随机选取一个元素
print( random.randrange(1,100,2) ) # 生成从1到100的间隔为2的随机整数
a=[1,3,5,6,7] # 将序列a中的元素顺序打乱
random.shuffle(a)
print(a)
import string,random
capta=''
words=''.join((string.ascii_letters,string.digits))
for i in range(6):
capta+=random.choice(words)
print(capta)
注:string.ascii_letters 生成26个大小写英文字母,string.digits生成数字0123456789
random.choice (),随机选取字符串、列表等