python day2 python基础

第2章节python

一、python3中的input 等于python2中的rawinputgit

二、模块初识api

模块分为标准库和第三方库app

标准库:自带的iphone

第三方库:须要下载安装编辑器

Sys模块ide

文件的名字不能和导入的库名字相同函数

Sys.path 打印路径优化

Sys.argv 打印的是相对路径编码

Os模块

       与操做系统进行交互的,

       Os.system(“dir”)调用后直接输出上屏幕上,指令执行后返回0,非0表示不成功,不保存结果

       Os.popen(“dir”).read()

       为何加read(),由于上指令表示临时存放一个地址里面,而后经过read()函数读出来。

       Os.mkdir(“ ”)这是建立文件的指令。

三、解释型语言和编译型语言

       由于编译型语言在程序运行以前就已经对程序作出了“翻译”,因此运行时就少掉了“翻译”的过程,因此效率比较高。可是咱们也不能一律而论,一些解释型语言也能够经过解释器的优化来对程序作出翻译时对整个程序作出优化,从而在效率上接近编译型语言。

       此外,随着Java等基于虚拟机的语言的兴起,咱们又不能把语言纯粹地分为解释型和编译型两种。

       用Java来举例,Java首先是经过编译器编译成字节码文件,而后运行时经过解释器给解释成机器文件,因此咱们说Java是一种先编译后解释的语言。

四、python的运行过程

       首先说两个概念:PyCodeObject和pyc文件

       咱们在硬盘上看到的pyc天然没必要多说,而其实PyCodeObject则是Python编辑器真正编译成的结果。

       当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当python程序运行结束时,python解释器则将PyCodeObject写回到pyc文件中。

       当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,若是找到,则直接载入,不然就重复上面的过程。

       因此咱们应该这样来定位PyCodeObject和pyc文件,咱们说的pyc文件实际上是PyCodeObject的一种持久化保存方式。

五、数据类型

       1)数字  在python3中全是整型,没有长整型的概念

       2)float (浮点型)

              浮点数用来处理实数,即带有小数的数字。

3)复数

4)布尔型

       真或假           1或0

5)字符串

六、三元运算

        Result = 值1 if 条件 else 值2:

七、进制

每四个二进制表示一个十六进制

八、bytes类型

        Python3中最重要的新特性大概是对文本和二进制数据做了更为清晰的区分,文本老是Unicode,由str类型表示,二进制数据则由bytes类型表示。Python3不会以任意隐式的方式混用str和bytes,正是这使得二者的区分特别清晰,你不能拼接字符串和字节包,也没法在字节包里搜索字符串(反之亦然),也不能将字符串传入参数为字节包的函数(反之亦然)。

String 转为bytes 用encode(encoding='utf-8’) 在python3中不写的话默认是utf-8

Bytes 转为string 用decode (encoding=‘utf-8’)    在python3中不写的话默认是utf-8

九、列表操做

       enumerate是将列表中的下标和列表中的元素对应起来,

a = ["es","s","we"]

for i in enumerate(a):

    print(i)

 

输出:
(0, 'es')

(1, 's')

(2, 'we')

 

 

a = ["es","s","we"]
for index,item in enumerate(a):
    print(index,item)

 

输出

0 es

1 s

2 we

 

       1);列表的多位取

              [a:b] a是起始位置,b是结束位置,可是a能取到,b不能取到,顾头不顾尾。

              [-1]表示最后一个

              [a:]表示从a位置到最后结束

              [:a]表示从开始到a位置结束

       2)列表的添加

              [ ].append(“ “)表示添加在后面

              [ ].insert(a,” ”)表示把元素插入到a的位置

       3)列表的更改

              [ a]=” “

4)列表的删除

[ ].remove(a)直接删除a

Del [a] 直接删除位置a上的元素

[ ].pop(a)删除位置a的元素,默认是最后一个

5)位置的查找

.      [ ].index(“a”)找到a的位置

       6)统计列表中重复的次数

              [ ].count(“a”) 统计列表中a的个数

       7) 列表的反转

              [ ].reverse( )

       8) 列表的排序

              [ ].sort( )

                     此时当列表复制给其它时,则两者均会排序,如果经过分片复制 [ ] = [ : ] 则不会改变

       9) 列表的扩展

              [ ].extend( a)

              把a合并,而后a还存在

       10)列表的复制copy

              在列表里面中还有一个小列表时,存储的是这个小列表的地址,因此,小列表改变,全部的都改变,可是大列表里面的不会更改。

              在列表中,如果a=b 是则两者同步改变的,可是针对数字和字符串不会这样

可是有个模块copy,能够深度拷贝,b=copy.deepcopy(a),即a改变b不会改变

       [a:b:c]从a开始,结束为b,步长为c

 

浅拷贝   能够根据浅copy建立联合帐户

import copy
person = ["name",["saving"," "]]
p1=copy.copy(person)
p2=copy.copy(person)
print(p1)
print(p2)
p1[0]="num1"
p2[0]="num2"
p1[1][1]="500"
print(p1)
print(p2)
结果:
['name', ['saving', ' ']]
['name', ['saving', ' ']]
['num1', ['saving', '500']]
['num2', ['saving', '500']]

       11)len是取列表的长度

十、元组操做

       元组其实跟列表差很少,也是存一组数,只不过它是一旦建立,便不能再修改,因此又叫只读列表。

       Name = (“dfg”,”sdf”,”dfgr”)

       只有两种方法:count和index

程序练习:

需求:

       一、启动程序后,让用户输入工资,而后打印商品列表

       二、容许用户根据商品编号购买商品

       三、用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒

       四、可随时退出,退出时,打印已购买商品和余额

 

程序:

salary = input("请输入工资:")
shop_list = []

if salary.isdigit():  # 判断是否为数字
    salary = int(salary)
    while True:
        product_list = [("iphone", 9000), ("huewei", 7000), ("book", 50), ("bicycle", 800)]
        for index, item in enumerate(product_list):     #enumerate 是将列表中的元素和坐标组成元组
            print(index, item)
        choose = input("请输入商品购买编号:")
        if choose.isdigit():
            choose = int(choose)
            if choose < len(product_list) and choose >= 0:
                if salary >= product_list[choose][1]:
                    print("选择的商品为:", product_list[choose])
                    shop_list.append(product_list[choose])
                    salary -= product_list[choose][1]
                    print("你的余额为:\033[1;32;40m%d\033[0m" % salary)
                else:
                    print("\033[0;31;46m你的余额不足,请从新购买\033[0m")
            else:
                print("输入的商品编号错误")
        elif choose == 'q':
            for i in shop_list:
                print(i)
            print("你的余额为:%d" % salary)
            exit()
        else:
            print("输入错误,请从新输入")

else:
    print("输入错误,请从新输入")

 

 

十一、字符串操做

name = “alex”

       1)capitalize() 首字母大写 print(name.capitalize())

       2)count(“ “)    统计出现的字母的个数 print(name.count(“a”))

       3)center() 把要打印的字符串放在中间,若是长度不够的话,进行补充  print(name.center(50,”-“))

       4) endswith( ) 判断是否以什么结尾,返回True或False ,print(name.endswith(“ex”))

       5)expandtabs() 帮你把\t转为多少个空格

       6)find() 是返回对应值得索引,和列表同样,也是能够切片的。print(name.find(“a”))

              print(name[name.find(“a”):2])

       7) format()     格式化整理数据

              name = “my name is {name},and I am {age} old”

              print(name.format(name=”alex”,age=23))

       8)format_map       也是格式化整理数据,只不过数据是以字典的形式

              print(name.format_map({‘name’:’alex’,’age’:12})

       9)isalnum() 判断是否为字符+阿拉伯数字

              Print(‘ab123’.isalnum()) 返回为True

       10)isalpha() 判断是否为纯英文字符,

              Print(‘ab’.isalpha()) 返回为True

       11)isdecimal() 判断是否为十进制

              Print(‘1A’.isdecimal()) 返回为False

       12)isdigit() 判断是否为整数

              Print(‘1A’.isdigit()) 返回为False

       13)isidentifier() 判断是否是一个合法的标识符

       14)islower( ) 判断是否是小写

              Print(‘a1A’.islower()) 返回False

       15)isnumeric() 判断是否是纯数字,中间有小数点也不行

              Print(’33.33’.isnumeric()) 返回False

       16)isspace() 判断是否是空格

       17)istitle() 判断是否是标题 即每一个单词的首字母大写

       18)isprintable() 判断是否能被打印   tty file, drive file

       19)isupper() 判断是否所有为大写

       20)join()  链接

              Print(‘+’.join([‘1’,’2’,’3’])) 输出为1+2+3

              Print(‘’.join([‘1’,’2’,’3’])) 输出为123

       21)ljust() (50,’*’) 保证长度为50,长度不够在末尾用*填充

       22)rjust() (50,’*’) 保证长度为50,长度不够在前面用*补充

       23)lower() 把大写变成小写

       24)upper() 把小写变成大写

       25)lstrip() 去掉左边的空格和换行

       26)rstrip() 去掉右边的空格和换行

       27)strip() 去掉全部的空格和换行

       28)maketrans()

              P = str.maketrans(“abcde”,”12345”)

              Print(“alex li”.translate(P))

              结果:    115x li 按照对应的编码规则,将对应的翻译为定义的编码规则

       29)replace()替换,将旧的用新的替换 replace(‘l’,’L’)

                     replace(‘l’,’L’,1)表示只替换一个

       30)rfind() 从左往右找,找到最右边的那个值对象的坐标

       31)split() 把字符串按照默认空格分割成列表,其中split()里面能够传递参数,即按照传递的规则进行分割,其中传递的参数不会显示。

       32)splitlines() 按照换行符来进行分割

       33)swapcase() 大写换成小写 小写换成大写

       34)title() 把它变成title,即每一个单词的首字母大写

       35)zfill() 在前面补充多少个0

十二、字典操做

       字典就是一种 key-value的数据类型

       语法:

              info={

‘stu1101’,”d1”,

‘stu1102’,”d2”,

‘stu1103’,”d3”

}

       字典的特性:

              dict是无序的

              key必须是惟一 的,so天生去重

       1)删除

              del info 这是把字典都删掉

              del info[“stu1101”],指删掉这个key和这个key对应的value

              info,pop[“stu1101”],指删掉这个key和这个key对应的value

              info.popitem() 随机删掉一个key和这个key对应的value

       2)查找

              info[“stu1101”],这个就是直接返回key所对应的value,如果木有,则返回错误,因此用这种方法要肯定这个字典里面含的有这个key

              info.get(‘stu11021’),这个表示若是有这个key所对应的value,则直接返回,如果没有这个key,则直接返回None。

       3)判断一个key是否存在这个字典中

              print(‘stu1101’ in info) 如果存在,则返回True,如果不存在,则返回False

       在python2中还有 info.has_key(““stu1101””),可是在python3中没有这种方法。

       4)多级字典嵌套及操做

       5)其余操做

              info.values() 返回全部的values值

              info.keys() 返回全部的keys值

              info.setdefault(key,value) 先从info里面找key,如有,则直接返回所有,若没有,则从新建立一个键值对

              info.update(b) 即把info和b两个字典进行合并,要是二则有交叉的,则info进行更新。

              info.items() 把一个字典转为一个列表

              fromkeys() 初始化一个字典

              print(dict.fromkeys([1,2,3],’testd’)

              结果:{1:’testd’,2:’testd’,3:’testd’}

              此办法建立的字典相似于列表中的copy,即当字典里面嵌套字典时,更改嵌套的字典时,则全部的都会更改,嵌套的字典外面的更改,不会改变。

       6)字典的循环

              方法1:

                  

   for key in info:

        print(key,info[key])

 

 

              方法2:

                   

  for k,v in info.items():                  #会先把dict转成list,数据量大时莫用。

           print(k,v)

 

 

 

 

 

三级菜单:

item = {
        "北京":{
            "昌平","海淀","雄安"
        },
    "河南":{"周口":{"商水","西华","鹿邑"},
            "商丘":{"民权","夏邑","兰考"}}
        }

while True:
    for i in item:
        print(i)
    choose = input("--->选择:")
    if choose in item:
        while True:
            for i in item[choose]:
                print(i)
            choose2 = input("--->选择:")
            if choose2 in item[choose]:
                while True:
                    for i in item[choose][choose2]:
                        print(i)
                    choose3 = input("--->选择:")
                    if choose3 == 'b':
                        break
            if choose2 == 'b':
                 break
    if choose == 'b':
        break
 

购物车修改:

       用户入口:

              商品信息存在文件里

              已购商品,余额记录,信息存储。

       商家入口:

              能够添加商品,修改商品价格