当前位置: 移动技术网 > IT编程>脚本编程>Python > python编程练习(小甲鱼)第31-35课

python编程练习(小甲鱼)第31-35课

2020年07月14日  | 移动技术网IT编程  | 我要评论

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网