欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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