python编程练习(小甲鱼)第31-35课
程序员文章站
2022-04-12 08:33:28
1.异常处理def my_fun1(): x = 5 def my_fun2(): x *= x # 错误在这里 return x return my_fun2()my_fun1()错误类型:UnboundLocalError: local variable ‘x’ referenced before assignment,外部函数的x不能被内部函数调用。运用关键字nonlocal可...
1.异常处理
def my_fun1():
x = 5
def my_fun2():
x *= x # 错误在这里
return x
return my_fun2()
my_fun1()
错误类型:
UnboundLocalError: local variable ‘x’ referenced before assignment,外部函数的x不能被内部函数调用。
运用关键字nonlocal可以在内部函数里修改外部函数的局部变量的值。
def my_fun1():
x = 5
def my_fun2():
nonlocal x
x *= x
return x
return my_fun2()
my_fun1()
2.处理异常
try:
#检测范围
except Exception(错误类型)[as reason(错误原因)]:
#出现异常(Exception)后的处理代码
finally:
#无论如何都会被执行的代码
统一处理多类异常
except (OSError, TypeError, ValueError) as reason:
print('错误原因是:' + str(reason))
3.还记得我们第一个小游戏吗?只要用户输入非整型数据,程序立刻就会蹦出不和谐的异常信息然后崩溃。请使用刚学的异常处理方法修改以下程序,提高用户体验。
import random
secret = random.randint(1,10)
print('------------------我爱鱼C工作室------------------')
temp = input("不妨猜一下小甲鱼现在心里想的是哪个数字:")
try:#顺序执行里面的内容
guess = int(temp)
except ValueError:
temp = input('输入数据类型错误!请重新输入:')
guess = int(temp)
while guess != secret:
temp = input("哎呀,猜错了,请重新输入吧:")
guess = int(temp)
if guess == secret:
print("我草,你是小甲鱼心里的蛔虫吗?!")
print("哼,猜中了也没有奖励!")
elif guess > secret:
print("哥,大了大了~~~")
else:
print("嘿,小了,小了~~~")
while guess != secret:
temp = input("哎呀,猜错了,请重新输入吧:")
guess = int(temp)
if guess == secret:
print("我草,你是小甲鱼心里的蛔虫吗?!")
print("哼,猜中了也没有奖励!")
elif guess > secret:
print("哥,大了大了~~~")
else:
print("嘿,小了,小了~~~")
print("游戏结束,不玩啦^_^")
4.input() 函数有可能产生两类异常:EOFError(文件末尾endoffile,当用户按下组合键 Ctrl+d 产生)和 KeyboardInterrupt(取消输入,当用户按下组合键 Ctrl+c 产生),再次修改上边代码,捕获处理 input() 的两类异常,提高用户体验。
import random
secret = random.randint(1,10)
print('------------------我爱鱼C工作室------------------')
temp = input("不妨猜一下小甲鱼现在心里想的是哪个数字:")
try:#顺序执行里面的内容
guess = int(temp)
except (ValueError, EOFError, KeyboardInterrupt):#添加两类异常
temp = input('输入数据类型错误!请重新输入:')
guess = int(temp)
while guess != secret:
temp = input("哎呀,猜错了,请重新输入吧:")
guess = int(temp)
if guess == secret:
print("我草,你是小甲鱼心里的蛔虫吗?!")
print("哼,猜中了也没有奖励!")
elif guess > secret:
print("哥,大了大了~~~")
else:
print("嘿,小了,小了~~~")
while guess != secret:
temp = input("哎呀,猜错了,请重新输入吧:")
guess = int(temp)
if guess == secret:
print("我草,你是小甲鱼心里的蛔虫吗?!")
print("哼,猜中了也没有奖励!")
elif guess > secret:
print("哥,大了大了~~~")
else:
print("嘿,小了,小了~~~")
print("游戏结束,不玩啦^_^")
5.尝试一个新的函数 int_input(),当用户输入整数的时候正常返回,否则提示出错并要求重新输入。
def int_input():
while True:
try:
temp = input('请输入一个整数:')
a = int(temp)
break
except ValueError:
print('出错,您输入的不是整数!')
int_input()
6.with语句:
获取文件上下文,适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”操作,释放资源,比如文件使用后关闭,线程中锁的获取和释放等。
with open('data.txt','w') as somefile:
for line in somefile:
print(line)
7.实现一个用于登记用户账号信息的界面(如果是带 * 号的必填项,要求一定要有输入并且不能是空格)。
import easygui as g
msg = "请填写以下信息(带*为必填项)"
title = "账号中心"
fieldNames = ["*用户名", "*真实姓名", "固定电话", "*手机号码", "QQ", "*E-mail"]
fieldValues = [ ]
fieldValues = g.multenterbox(msg, title, fieldNames)#为用户提供多个简单的输入框
while True:
#若点击取消,则判断为无输入,退出循环,最终输出用户资料none
#若点击OK,则顺序执行,判断必填项,填写完全时,跳出循环,最终输出用户资料,若填写不完全,则出现提示信息并进入循环体。
if fieldValues == None:
break
msg1 = ""
for i in range(len(fieldNames)):
option = fieldNames[i]
if fieldValues[i].strip() == "" and option[0] == "*":#去除首尾空格
msg1 += (' %s 为必填项。\n\n' % fieldNames[i])
if msg1 == "":
break
fieldValues = g.multenterbox(msg1, title, fieldNames, fieldValues)
if fieldValues == None:
print("用户资料如下:%s" % fieldValues)
else:
print('用户资料如下:')
for i in range(len(fieldNames)):
print(fieldNames[i],':',fieldValues[i])
8.连续格式化输出举例
a = 3;b = 8;c = 4
print('ai= %d,bi= %d,ci= %d'%(a,b,c))
本文地址:https://blog.csdn.net/qq_36849855/article/details/107321886