十.异常机制+面向对象编程题讲解

1.异常处理

try except语句中,至少要有一个except,也可以有多个.也可以加上一个else语句,一个finally语句.

try:

int1=int(input('请输入一个数字: '))

print(1/int1)

except ZeroDivisionError: #0作为分母的异常

print('0不能作为分母')

except ValueError: #输入的是非数字的异常

print('您输入的不是数字')

except: #如果不指定异常类型,则捕获任何出现的异常

print('程序出现错误')

else: #当程序未捕获到任何异常,会执行else中的语句

print('没有出现异常')

# finally: #无论程序是否出现异常,都会执行

finally:

print('程序执行完毕')

常见的异常

NameError 未定义的变量

IndexError 下标越界

FileNotFoundError 找不到文件异常

所有的异常,都是Exception的子类,或者子类的子类,Exception也有一个父类 BaseException

print(NameError.__base__)

print(IndexError.__base__)

print(LookupError.__base__)

print(FileNotFoundError.__base__)

print(OSError.__base__)

print(Exception.__base__)

手动抛出异常

try:

raise IOError #假装这里有异常

except IOError:

print('程序出现了IO错误')

日志模块

日志等级,默认打印WARNING以上级别,可以设置level改为别的级别

import logging

logging.basicConfig(level='DEBUG')

logging.debug('出现debug信息')

logging.info('出现info信息')

logging.warning('出现warning信息')

logging.error('出现error信息')

logging.critical('出现critical信息')

将异常信息记录到日志

time.strftime('%y-%m-%d %H:%M:%S') 记录时间

traceback.format_exc() 返回异常的信息

import time

import logging

import traceback

logging.basicConfig(filename='D:/log210607.log',filemode='a+')

try:

int1=int(input('请输入一个数字: '))

print(1/int1)

except ZeroDivisionError: #0作为分母的异常

logging.error(time.strftime('%y-%m-%d %H:%M:%S')+traceback.format_exc())

except ValueError: #输入的是非数字的异常

logging.error(time.strftime('%y-%m-%d %H:%M:%S')+traceback.format_exc())

except: #如果不指定异常类型,则捕获任何出现的异常

logging.error(time.strftime('%y-%m-%d %H:%M:%S')+traceback.format_exc())

2.第二节课

第9次课思考题

解题思路

1.建立一个老虎的类,老虎的体重是200,有叫的方法,有吃的方法

2.建立一个羊的类,羊的体重是100,有叫的方法,有吃的方法

3.建立一个房间的类

4.将老虎或羊的实例放入房间的实例

5.写游戏相关的代码

①调用叫的方法,如果是老虎就调用老虎的叫的方法,如果是羊就调用羊的叫的方法

②调用吃的方法,如果是老虎就调用老虎的吃的方法,如果是羊就调用羊的吃的方法

③游戏时间的控制

④游戏结束时显示每个房间的动物以及体重

class Tiger:

def __init__(self):

self.name='老虎'

self.weight=200

def eat(self,food):

if food=='meat':

print('喂食正确')

self.weight+=10

elif food=='grass':

print('喂食错误')

self.weight-=10

def roar(self):

print('Wow!!')

self.weight-=5

class Sheep:

def __init__(self):

self.name='羊'

self.weight=100

def eat(self,food):

if food=='grass':

print('喂食正确')

self.weight+=10

elif food=='meat':

print('喂食错误')

self.weight-=10

def roar(self):

print('mie~~')

self.weight-=5

class Room:

def __init__(self,animal):

self.animal=animal

roomlist=[] #定义一个列表,用来存放房间的实例

from random import randint

for i in range(10):

if randint(1,2)==1: #在1和2之间随机取一个整数

animal=Tiger() #实例化一个老虎

else:

animal=Sheep() #实例化一个羊

room=Room(animal) #实例化一个房间

roomlist.append(room) #把房间的实例放入列表

import time

start_time=time.time() #记录游戏开始的时间

while time.time()-start_time<180: #如果游戏时间未超过3分钟,则循环运行游戏

room_number=randint(0,9) #随机选择一个房间

random_room=roomlist[room_number] #选取该房间

load1=input(f'当前访问的是{room_number+1}房间,请问是敲门还是喂食?1表示敲门,2表示喂食')

if load1=='1':

random_room.animal.roar() #调用房间中的动物的叫的方法

elif load1=='2':

food=input('请问喂哪种食物 meat/grass')

if food in ('meat','grass'):

random_room.animal.eat(food) #调用房间中的动物的吃的方法

else:

print('您输入的食物不正确')

else:

print('您的操作不正确,请输入1或2')

else:

print('游戏时间到')

for i in range(len(roomlist)):

print(f'{i+1}号房间的动物是{roomlist[i].animal.name},体重是{roomlist[i].animal.weight}')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值