zoukankan      html  css  js  c++  java
  • python基础知识(四)

    关于编码的问题:

    in python3中:对于英文、数字:utf8  1个bytes(字节)对于一个字符

            对于中文:unicode  3个bytes(字节)对应一个字符

    encode:编码  将Unicode形式转化为utf-8等其他形式

    decode:解码  将utf-8等其他形式转化为Unicode形式

    Unicode形式的字符串的type是str,utf-8等其他形式的字符串的type是bytes;

    Uincode就是我们看到的字符本身,utf-8等其他形式是存储进文件时的格式。

    在涉及与文件、网页交互时,才会涉及到编码解码。


    十三、文件操作

    能调用方法的一定是对象:列表、字典、字符串,文件也属于对象。

    1.打开文件

    with open() as name  这样打开就不需要用close()函数了。

    open('路径','操作方式')

    1)路径:

    ''     : 当前同级目录
    '/'    :根目录
    './'   :当前同级目录
    '../'  :上级目录

    ①绝对路径:完整的描述文件位置的路径

    ②相对路径:由这个文件所在的路径引起的跟其它文件(或文件夹)的路径关系。 

    2)操作方式:

    ①'r'   >>只读操作

    ②'w'  >>只写操作  打开文件后就把文件里的内容清空了

    ③'a'  >>添加操作  不清空,在后面添加

    ‘r+’   >>读写模式     必须是先读. 因为默认光标是在开头的. 准备读取的. 当读完了了之后再进行写入,常用 

    ⑤'w+'  >>写读模式  先将所有的内容清空,然后写入,最后读取。

    ⑥'a+'   >>追加读   不论先读还是后读,都读取不到数据。因为光标在最后面啊。

    2.文件的方法:

    1)read()   >>读操作

      参数:不加的话,默认全部读出来;

      加,一个字符==一个字节

    readline()   >>一行一行的读

    2)write()

    写操作

    3)close()    >>关闭文件

      用open打开的文件就需要用close关闭文件,

    因为对文件进行操作时解释器可以关,但不能准确的关,所以有风险。

    4)tell()  >>打印光标的位置

      英文:一个字节 == 一个字符

      中文:三个字节 == 一个字符

    及中文的话,打印一个字符会出现3而不是1

    5)seek()  >>调整光标的位置

      参数为  调整的位置

    6)truncate() >>截断,不给参数从文件开头截断到当前位置,其余内容删除;

            给参数,将从开头开始截断指定长度,其余内容删除。

    7)flush()  >>把缓存里的数据放入内存中

      用法:做一个进度条


    多级菜单程序优化代码:

    menu = {
    '广东':{
    '广州':{
    '越秀区':{'东湖','白云','大东'},
    '白云区':{'三元里','同和','永平'},
    '天河区':{'沙东','沙河','黄村'},
    },
    '深圳':{
    '南山区':{'西丽','沙河','水湾'},
    '福田区':{'福田','梅林','华强北'},
    '龙岗区':{'龙岗','龙城','横岗'},
    },
    '汕头':{
    '潮南区':{'陈店','两英','司马浦'},
    '龙湖区':{'珠池','新津','金霞'},
    '濠江区':{'河浦','玉新','达濠'}
    },
    },
    '浙江':{
    '杭州':{
    '上城区':{'湖滨','清波','望江'},
    '临安区':{'青山湖','锦城','玲珑'},
    '西湖区':{'北山','灵隐','文新'},
    },
    '宁波':{
    '镇海区':{'庄市','骆驼','蛟川'},
    '北仑区':{'春晓','梅山','郭巨'},
    '奉化区':{'锦屏','江口','尚田'},
    },
    '温州':{
    '龙湾区':{'永中','海城','沙城'},
    '鹿城区':{'五马','滨江','七都'},
    '洞头区':{'东屏','灵昆','元觉'}
    },
    },
    '安徽':{
    '合肥':{
    '蜀山区':{'西园','稻香村','南七'},
    '瑶海区':{'三里街','明光路','和平路'},
    '庐阳区':{'十字街','新华街','中山街'},
    },
    '安庆':{
    '迎江区':{'龙狮桥乡','长风乡','青龙'},
    '大观区':{'德宽路','菱湖','集贤路'},
    },
    '淮北':{
    '相山区':{'东山','相南','三堤口'},
    '烈山区':{'杨庄','任楼','古饶'},
    '杜集区':{'高岳','朔里','石台'}
    },
    },
    }
    current_dict = menu
    parent_list = []
    condition = True
    while condition:
    for keys in current_dict:
    print(keys)
    choice = input('请输入您要进入的地方:').strip()
    if choice in current_dict:
    parent_list.append(current_dict)
    current_dict = current_dict[choice]
    elif choice == 'q':
    print('程序已退出,谢谢使用。')
    condition = False
    elif choice == 'r':
    print('已返回上一级,请输入您要进入的地方:')
    if parent_list:
    current_dict = parent_list.pop()
    else:
    print('无此项,请重新输入您要进入的地方:')

    有些瑕疵,不过确实完成了返回上一级,以及随时退出程序。
    同样的程序,比起上一个,代码量少多了。
    不过,只要能做出来就好了,现在还只是学习阶段,代码重构那是以后的事。
    
    
    
    



    
    


  • 相关阅读:
    POJ 1721 CARDS(置换群)
    HDU 4609 3-idiots(FFT)
    BZOJ 4259 残缺的字符串(FFT)
    HDU 5763 Another Meaning(FFT)
    BZOJ 4503 两个串(FFT)
    hihoCoder 1388 Periodic Signal(FFT)
    HDU 5823 color II(FWT)
    HDU 5768 Lucky7(CRT+容斥原理)
    HDU 5446 Unknown Treasure(Lucas定理+CRT)
    HDU 5741 Helter Skelter(构造法)
  • 原文地址:https://www.cnblogs.com/doit9825/p/13051590.html
Copyright © 2011-2022 走看看