《python编程:从入门到实践的》第十章:文件和异常的例题代码

例1:读文件


'''
python 学习笔记 :在文本编辑器中新建一个文件,写几句话来总结一下你至此学到的 Python 知识,其中每一行都以 “In Python you can” 打头。将这个文件命名为
learning_python.txt ,并将其存储到为完成本章练习而编写的程序所在的目录中。编写一个程序,它读取这个文件,并将你所写的内容打印三次:第一次打印时读取整个
文件;第二次打印时遍历文件对象;第三次打印时将各行存储在一个列表中,再在 with 代码块外打印它们。
可使用方法 replace() 将字符串中的特定单词都替换为另一个单词
'''
file = 'learning_python.txt'

#第一次打印:读取整个文件打印
#若报错:'gbk' codec can't decode byte 0xbe in position 18: illegal multibyte sequenc,将文本文档设置encoding='utf-8'
with open(file,encoding='utf-8') as file_object:
    #用read(),读取文件全部内容
    contents = file_object.read()
    #直接用print(contents)后面会多出一个空行,因为 read() 到达文件末尾时返回一个空字符串,而将这个空字符串显示出来时就是一个空行。
    # 要删除多出来的空行,可在 print 语句中使用 rstrip() 去除后面的空格
    print(contents.rstrip())

print('------------------')

#第二次打印:遍历文件对象
with open(file,encoding='utf-8') as file_object:
    for line in file_object:
        #去除前后的空格用strip()
        print(line.strip())

print('------------------')

#第三次打印:将各行存储在一个列表中,然后再with代码快外打印他们
with open(file,encoding='utf-8') as file_object:
    #用readlines()逐行读取,并存储在一个列表中
    lines = file_object.readlines()
learn = ''
for lin in lines:
    #将‘哈哈哈’替换成‘从,要注意重新赋值给变量,原来的变量lin是不会被改变的
    a = lin.replace('哈哈哈','c')
    #若是要一行输出:lin.strip()
    learn += a.lstrip()
print(learn)

例2:写文件

# 访客 :编写一个程序,提示用户输入其名字;用户作出响应后,将其名字写入到文件 guest.txt 中。

file = 'guest.txt'
#第二个实参( 'w' )告诉 Python ,我们要以 写入模式 打开这个文件。打开文件时,可指定 读取模式 ( 'r' )、
# 写入模式 ( 'w' )、 附加模式 ( 'a' )或让你能够读取和写入文件的模式( 'r+' )。
# 如果省略了模式实参, Python 将以默认的只读模式打开文件。
#如果你要写入的文件不存在,函数 open() 将自动创建它。
# 然而,以写入( 'w' )模式打开文件时千万要小心,因为如果指定的文件已经存在, Python 将在返回文件对象前清空该文件
#最好加上encoding='utf-8',以防出现乱码的情况
with open(file,'w',encoding='utf-8') as file_object:
    name = input('输入你的名字:')
    file_object.write(name)

例3:写文件

'''
#访客名单 :编写一个 while 循环,提示用户输入其名字。用户输入其名字后,在屏幕上打印一句问候语,并将一条访问记录添加到文件 guest_book.txt 中。
# 确保这个文件中的每条记录都独占一行。
'''

#以附加模式打开文件时, Python 不会在返回文件对象前清空文件,而你写入到文件的行都将添加到文件末尾
file = 'haha.txt'
with open(file,'a',encoding='utf-8') as file_object:
    while True:
        name = input('输入你的名字:')
        print(name+',你好')
        #写入文本时不会自动换行,若需要换行,要加上换行符
        file_object.write('\n'+name)
        pan = input('是否继续:是/否:')
        if pan == '否':
            break

例4:异常

'''
 加法运算 :提示用户提供数值输入时,常出现的一个问题是,用户提供的是文本而不是数字。在这种情况下,当你尝试将输入转换为整数时,将引
发 TypeError 异常。编写一个程序,提示用户输入两个数字,再将它们相加并打印结果。在用户输入的任何一个值不是数字时都捕获 TypeError 异常,
并打印一条友好的错误消息。对你编写的程序进行测试:先输入两个数字,再输入一些文本而不是数字。
'''
num1 = input('请输入第一个数字:')
num2 = input('请输入第二个数字:')
try:
    a = int(num1)
    b = int(num2)
except ValueError:
    print('要输入数字才可以的')
else:
    add = a + b
    print('a+b:'+str(add))

例5:异常

#加法计算器 :将你为完成练习 10-4 而编写的代码放在一个 while 循环中,让用户犯错(输入的是文本而不是数字)后能够继续输入数字。
while True:
    num1 = input('请输入第一个数字:')
    num2 = input('请输入第二个数字:')
    try:
        a = int(num1)
        b = int(num2)
    except ValueError:
        print('要输入数字才可以的')
    else:
        add = a + b
        print('a+b:'+str(add))
    pan = input('是否结束(是/否):')
    if pan == '是':
        break
    else:
        print('------------')

例6:异常

'''
猫和狗 :创建两个文件 cats.txt 和 dogs.txt ,在第一个文件中至少存储三只猫的名字,在第二个文件中至少存储三条狗的名字。
编写一个程序,尝试读取这些文件,并将其内容打印到屏幕上。将这些代码放在一个 try-except 代码块中,以便在文件不存在时捕获 FileNotFound 错误,
并打印一条友好的消息。将其中一个文件移到另一个地方,并确认 except 代码块中的代码将正确地执行
'''

def chakan(file):
    try:
        with open(file,encoding='utf-8') as flie_object:
            contents = flie_object.read()
    except FileNotFoundError:
        print('找不到文件'+file)
        #若是要报错时没有任何反应,用:pass
    else:
        print('文件:'+file)
        print(contents.rstrip())


files = ['cats1.txt', 'dogs.txt']
for f in files:
    chakan(f)

例7:json

#喜欢的数字 :编写一个程序,提示用户输入他喜欢的数字,并使用 json.dump() 将这个数字存储到文件中。
# 再编写一个程序,从文件中读取这个值,并打印消息 “I know your favorite number! It's _____.” 。
import json

#file = 'num1.json'

def shuru(file):
    #将输入的文字存储在文件中
    num = input('输入你喜欢的数字:')
    with open(file, 'w') as file_num:
        # 将数字存储到文件
        json.dump(num, file_num)
    return num

def huoqu(file):
    #如果文件存在,则读取文件中的内容
    try:
        with open(file) as file_n:
            num = json.load(file_n)
    except FileNotFoundError:
        return None
    else:
        return num

#读取文件的内容并展示(若是没有文件则创建文件并存储用户输入的)
def user(file):
    usernum = huoqu(file)
    if usernum:
        #print('你喜欢的数字是:'+usernum)

        #若是json中有内容,询问用户是否是他喜欢的数字,若是直接输出,若不是让用户重新输入数字
        wen = input('你喜欢的数字是'+usernum+'吗? 是/否  ')
        if wen == '是':
            print('喜欢的数字是:' + usernum)
        else:
            usernum = shuru(file)
            print('喜欢的数字是:' + usernum)
    else:
        usernum = shuru(file)
        print('你喜欢的数字是:'+usernum)

u = user('num1.json')

外星人入侵代码

猜你喜欢

转载自blog.csdn.net/qq_41917061/article/details/108845923