python全栈学习--Day30 (纸牌游戏,异常和错误,异常处理)

一. 指派游戏

先来回顾一下,昨天的内容

1. import 一个模块相当于执行这个py文件

2.模块不会被重复导入

3.导入的模块存到sysmodules里

4.导入模块的之后发生了什么:

  先看看模块在不在sys.modules里,如果不在:

  生成一个属于模块的命名空间

  执行py文件

  创建一个与py文件同名变量来引用这个空间中的名字

  把导入的这个模块放到sys.modules里

5.from ...import....

6. 绝对导入和相对导入

7.软件开发规范

抽牌

from collections import namedtuple

Card = namedtuple('Card', ['rand', 'suit'])  # 定义2个属性,牌面和花色

class FranchDeck:
    ranks = [str(n) for n in range(2, 11)] + list('JQKA')  # 列表推导式+列表,组合成13张牌
    suits = ['红心', '方板', '梅花', '黑桃']  # 4种花色

    def __init__(self):
        self._cards = [Card(rank, suit) for rank in FranchDeck.ranks
                       for suit in FranchDeck.suits]  # 取出52张牌,返回一个列表。
        # [Card(rand='2', suit='红心'),Card(rand='2', suit='方板')...]

    def __len__(self):
        return len(self._cards)  # 获取列表长度

    def __getitem__(self, item):
        return self._cards[item]  # 取一张牌


deck = FranchDeck()
print(deck[0])  # 取第一张牌
from random import choice

print(choice(deck))  # 随机选择一张牌
print(choice(deck))

  

上面的代码是靠__len__和__getitem__实现抽牌,每次拿到的牌是不一样的。

描述一张牌

from collections import namedtuple
Card = namedtuple('Card',['rand','suit'])   #定义2个属性,牌面和花色
print(Card('2','红心'))

  

from collections import namedtuple

Card = namedtuple('Card', ['rand', 'suit'])  # 定义2个属性,牌面和花色


class FranchDeck:
    ranks = [str(n) for n in range(2, 11)] + list('JQKA')
    suits = ['红心', '方板', '梅花', '黑桃']

    def __init__(self):
        self._cards = [Card(rank, suit) for rank in FranchDeck.ranks
                       for suit in FranchDeck.suits]

    def __len__(self):
        return len(self._cards)

    def __getitem__(self, item):
        return self._cards[item]

    def __setitem__(self, key, value):
        self._cards[key] = value


deck = FranchDeck()
# print(deck[0]) #抽第一张牌
from random import choice
# print(choice(deck))
# print(choice(deck))

from random import shuffle

shuffle(deck)  # 打乱次序,洗牌
# print(deck[:5])  # 抽5张牌
print(deck[:])  # ,每次52张牌是不一样的。

 二,异常和错误

程序中难免 出现错误,而错误分成两分钟

 1.语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正)

if name = 10

#2.逻辑错误

num = 0
100/num

  

这个蓝色链接信息,是Pycharm做的,它可以跳转到指定的代码位置

ZeroDivisionError是python解释器报的

什么是异常

异常就是程序运行时发生错误的信号,在python种,错误错发的异常如下

异常就是程序运行时发生错误的信号,在python中,错误触发的异常如下

python中的异常种类                                                                                                      

在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,不同的类对象标识不同的异常,一个异常标识一种错误

 触发IndexError

1
2
l = [ 'egon' , 'aa' ]
l[ 3 ]

触发KeyError

1
2
dic = { 'name' : 'egon' }
dic[ 'age' ]

触发ValueError

1
2
s = 'hello'
int (s)

常用异常

复制代码
AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError 输入/输出异常;基本上是无法打开文件
ImportError 无法引入模块或包;基本上是路径问题或名称错误
IndentationError 语法错误(的子类) ;代码没有正确对齐
IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError 试图访问字典里不存在的键
KeyboardInterrupt Ctrl+C被按下
NameError 使用一个还未被赋予对象的变量
SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError 传入对象类型与要求的不符合
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
导致你以为正在访问它
ValueError 传入一个调用者不期望的值,即使值的类型是正确的
复制代码

更多异常

复制代码
ArithmeticError
AssertionError
AttributeError
BaseException
BufferError
BytesWarning
DeprecationWarning
EnvironmentError
EOFError
Exception
FloatingPointError
FutureWarning
GeneratorExit
ImportError
ImportWarning
IndentationError
IndexError
IOError
KeyboardInterrupt
KeyError
LookupError
MemoryError
NameError
NotImplementedError
OSError
OverflowError
PendingDeprecationWarning
ReferenceError
RuntimeError
RuntimeWarning
StandardError
StopIteration
SyntaxError
SyntaxWarning
SystemError
SystemExit
TabError
TypeError
UnboundLocalError
UnicodeDecodeError
UnicodeEncodeError
UnicodeError
UnicodeTranslateError
UnicodeWarning
UserWarning
ValueError
Warning
ZeroDivisionError
复制代码
 
 
 

猜你喜欢

转载自www.cnblogs.com/haowen980/p/8980833.html