Dayday up ---- python Day2

模块

  模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py

  python的库分为标准库和第三方库,标准库即python自带的库,第三方库一般存放在同级目录或者python安装目录lib/site-packages下

  以下是使用模块的例子:  

  sys

import sys                #导入sys模块   引入 python 标准库中的 sys.py 模块;这是引入某一模块的方法
print("命令行参数如下:")
for i in sys.argv:          #sys.argv 打印所有的位置参数
    print(i)
print("路径为:", sys.path, '\n')  #sys.path 打印python的全局环境变量,查找所需模块的路径的列表

  os

#!/usr/bin/env python

import os               #导入os模块
os.system("free -m")         #调用系统命令,直接输出到屏幕

  更多:

cmd_free = os.system("free -m")  # 如果定义为变量,print变量是执行命令的状态
print("\n-->", cmd_free)       # 输出结果以及结果状态

--> 0          # 输出状态结果为0,表示成功,失败为1或者其他

cmd_free2 = os.popen("free -m").read()    # 不加read打印保存的内存地址,即存在内存中的对象 ,执行命令保存结果到内存
print(cmd_free2)  # 输出内容

os.mkdir("aa")
创建目录
os.rmdir("aa")
删除目录

 

.pyc 预编译编码文件

  .pyc 文件是由.py文件经过编译后生成的字节码文件,其加载速度相对于之前的.py文件有所提高,而且还可以实现源码隐藏,以及一定程度上的反编译。

  在import 别的.py文件的时候,那个.py文件会被存一份pyc加速下次装载,而主文件因为只需要装载一次所以不需要存.pyc

 

数据类型

  可以用type()来查看数据类型

1、数字

  int(整型)

    在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647
    在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807

    

>>> type(222)
<class 'int'>

  

  long(长整型)

     python2里面当整数值特别大的时候自动会切换为长整型,而python3里面没有长整型的概念就是不管数值多大都是int整型

>>> type(2**64)
<type 'long'>

  float(浮点数)

    浮点数的表现形式是小数,但不能说浮点数就是小数

>>> type(5.55)
<class 'float'>

  complex(复数)

    一般用在量子力学

2、布尔值

  真或假 True或False  1或0

3、字符串

>>> type(True)
<class 'bool'>

 

数据运算

1、算数运算

   加 +

>>> 30+80
110

   减 -

>>> 80-30
50

   乘 *

>>> 30*80
2400

   除 /

>>> 8/2
4.0

   取模 % 即取除法的余数

>>> 9%4  #9除以4余1
1

   幂 **

>>> 2**4
16

   取整除

>>> 9//4  #9除以4的整数部分是2
2

 

2、比较运算  

   等于 ==

>>> 2.0==2
True        #如果成立返回true 不成立返回false

   不等于 !=

>>> 2.0!=2
False

   大于>

>>> 30>10
True

   小于<

>>> a=40
>>> b=50
>>> a < b
True

   大于等于>=

>>> a=40
>>> b=50
>>> b>=a
True

   小于等于<=

>>> a=40
>>> b=50
>>> a<=b
True

3、赋值运算 

   =   简单的赋值运算符,例如变量赋值

>>> a=40
>>> b=50
>>> c=a+b
>>> c
90

   += 加法赋值运算符

>>> a +=1
>>> a = a+1    # 等效于 a+=1, 意思是a每次都在之前的值之上加1

   -= 减法赋值运算符

>>> a -=c
>>> a = a-c    # 等效于 a-=c, 意思是a每次都在之前的值之上减c

   *= 乘法赋值运算符

>>> a *=c
>>> a = a*c    # 等效于 a*=c, 意思是a每次都在之前的值之上乘c

   /= 除法赋值运算符

>>> a /=c
>>> a = a/c    # 等效于 a/=c, 意思是a每次都在之前的值之上除c

   %= 取模赋值运算符

>>> c = 9
>>> a = 4
>>> c = c % a   #等效于 c%=a, 意思是c每次都在之前的值之上进行与a取模运算
>>> c
1
>>>

   **=幂赋值运算符

>>> a = 2
>>> c = 3
>>> c = c ** a   #等效于 c**=a ,意思是c在每次都在之前的值上与a进行幂运算
>>> c
9
>>>

   //=取整除赋值运算符    

>>> c=9
>>> a=2
>>> c = c//a    #等效于 c//=a ,意思是c在每次都在之前的值上与a进行取整除运算
>>> c 
4 
>>>  

4、逻辑运算

   and 布尔"与"

>>> a = 10
>>> b = 20
>>> c = 50
>>> c > b and b > a    # and两边都得成立
True
>>>

   or  布尔"或"

>>> a = 10
>>> b = 20
>>> c = 50
>>> c < a or c > b     # or 一边成立即可
True
>>>

   not 布尔"非"

>>> a = 10
>>> b = 20
>>> c = 50
>>> not(c > b and b > a)  #not 与后边的结果相反
False
>>>

5、成员运算

   in 例如: a in b 指a在b序列中

>>> b = "nihao"
>>> a = "n"
>>> a in b     # "n" 字符串在 "nihao"中
True
>>>

   not in 例如: a not in b 指a不在b序列中

>>> b = "nihao"
>>> a = "t"
>>> a not in b
True
>>>

6、身份运算   

   is 判断两个标识符是不是引用一个对象

>>> flag = True
>>> flag is True
True
>>>

   is not 判断两个标识符是不是引用不同的对象

>>> flag = True
>>> flag is not False
True
>>>

7、位运算 二进制运算

   & 按位与运算符

>>> a = 60
>>> b = 13
>>> a & b
12
>>>

   |  按位或运算符

>>> a = 60
>>> b = 13
>>> a | b
61
>>>

   ^  按位异或运算符

>>> a = 60
>>> b = 13
>>> a ^ b
49

  ~   按位取反运算符

>>> a = 60
>>> b = 13
>>> ~a
-61
>>>

  <<  左移动运算符

>>> a = 60
>>> b = 13
>>> a<<2
240
>>>

  >>  右移动运算符

>>> a = 60
>>> b = 13
>>> a>>2
15
>>>

  运算过程如下:

    128 64  32  16  8   4    2   1

a:    0   0   1   1   1   1   0   0    = 60
b:    0   0   0   0   1   1   0   1    = 13

与:    0   0   0   0   1   1   0   0    = 12

或:    0   0   1   1   1   1   0   1    = 61

异或:    0   0   1   1   0   0   0   1    = 49

a取反:    1   1   0   0   0   0   1   1    195-256 = -61

a左移2:    1   1   1   1   0   0   0   0    = 240

a右移2:    0   0   0   0   1   1   1   1    = 15

 

 

列表、元组

1、列表list,用[]

例如:names = ['aa', 'bb', 'cc']

通过names[num]下标访问列表中的元素,下标从0开始计数

>>> names = ['aa', 'bb', 'cc']
>>> names[0]    #从0开始取第一位
'aa'
>>> names[-1]    #[-1]表示最后一位
'cc'
>>> names[-2]    #[-2]表示最后后两位
'bb'

切片,取列表中的一段数据

>>> names = ['aa', 'bb', 'cc', 'dd', 'ee', 'ff']
>>> names[0:3]   #[0:3]表示前三位,取头不取尾
['aa', 'bb', 'cc']
>>> names[:3]    #和[0:3]相等
['aa', 'bb', 'cc']
>>> names[-3:]   #取最后三个元素
['dd', 'ee', 'ff'
>>> names[2:5]        #取第二个到第5个元素
['cc', 'dd', 'ee']
>>> names[:-3]         #取0到倒数第三个元素
['aa', 'bb', 'cc']
>>> names[::2]         #从头到尾一个元素隔一个取一个
['aa', 'cc', 'ee']
>>> names[0:4:3]     #从0到第四位隔2个取一个    
['aa', 'dd']

list操作

增(不能批量插入)

>>> names.append("hahaha")  #在列表最后一个元素追加
>>> names
['aa', 'bb', 'cc', 'dd', 'ee', 'ff', 'hahaha']
>>> names.insert(3,"nihao")         #在索引为3即第4个位置插入
>>> names
['aa', 'bb', 'cc', 'nihao', 'dd', 'ee', 'ff', 'hahaha']

>>> names.remove("ee")     #删除叫"ee"的元素,如果有多个"ee",那会删除从左往右的第一个元素
>>> names
['aa', 'bb', 'cc', 'nihao', 'dd', 'ff', 'hahaha']
>>> del names[1]                #删除索引为1的元素
>>> names
['aa', 'cc', 'nihao', 'dd', 'ff', 'hahaha']
>>> names.pop()                  #()内不指定删除最后一个元素
'hahaha'
>>> names.pop(1)                #()内指定索引则删除相应的元素    
'cc'
>>> names
['aa', 'nihao', 'dd', 'ff']

>>> names[0]="my"    #根据索引修改,把第一个位置的数改为"my"
>>> names
['my', 'nihao', 'dd', 'ff']

  

>>> names
['my', '123', '#', 'aa', 'ff', 'dd', 'nihao', 'my']
>>> names.index("nihao")    #取出"nihao"元素对应的索引,如果有多个相同的元素,那么取从左往右的第一个
1
>>> names.count("my")      #统计列表中有多少个名字为"my"的元素
2
>>> names.reverse()       #反转列表
>>> names
['my', '123', '#', 'aa', 'ff', 'dd', 'nihao', 'my']
>>> names.sort()         #将列表排序,顺序为特殊字符、数字、大写、小写
>>> names
['#', '123', 'aa', 'dd', 'ff', 'my', 'my', 'nihao']
>>> names2 = ["A", "B", "C", "D"]  #定义names2列表
>>> names.extend(names2)       #将name2合并到name列表中
>>> names
['#', '123', 'aa', 'dd', 'ff', 'my', 'my', 'nihao', 'A', 'B', 'C', 'D']
>>> del names2         #删除names2列表或删除变量
>>> names.clear()        #清空列表
>>> names
[]

2、浅copy

1、
>>> names = ['#', '123', 'A', 'B', 'C', 'D', 'aa', 'dd', 'ff', 'my', 'my', 'nihao']
>>> names2=names.copy()
>>> names2
['#', '123', 'A', 'B', 'C', 'D', 'aa', 'dd', 'ff', 'my', 'my', 'nihao']
>>> names[2]='a'
>>> names
['#', '123', 'a', 'B', 'C', 'D', 'aa', 'dd', 'ff', 'my', 'my', 'nihao']
>>> names2
['#', '123', 'A', 'B', 'C', 'D', 'aa', 'dd', 'ff', 'my', 'my', 'nihao']   #names改变了,names2不变

2、加上子列表
>>> names=['#', '123', 'A', ['ll', 'yy', 'ly'], 'B', 'C', 'D', 'aa', 'dd', 'ff', 'my', 'my', 'nihao']
>>> names2=names.copy()
>>> names2
['#', '123', 'A', ['ll', 'yy', 'ly'], 'B', 'C', 'D', 'aa', 'dd', 'ff', 'my', 'my', 'nihao']
>>> names[3][1]='LL'
>>> names2
['#', '123', 'A', ['ll', 'LL', 'ly'], 'B', 'C', 'D', 'aa', 'dd', 'ff', 'my', 'my', 'nihao']
>>> names
['#', '123', 'A', ['ll', 'LL', 'ly'], 'B', 'C', 'D', 'aa', 'dd', 'ff', 'my', 'my', 'nihao']  #子列表值一起改变

  第二个列表是第一个列表的引用,只是第一个层的copy,把子列表看成一个整体,指向同一块内存地址,而第一层是开辟一块新的内存地址

3、深copy---完全独立  

>>> import copy           #导入copy模块
>>> names2=copy.deepcopy(names)  #names2 深copy names
>>> names2
['#', '123', 'A', ['ll', 'yy', 'ly'], 'B', 'C', 'D', 'aa', 'dd', 'ff', 'my', 'my', 'nihao']
>>> names[2]='a'
>>> names2
['#', '123', 'A', ['ll', 'yy', 'ly'], 'B', 'C', 'D', 'aa', 'dd', 'ff', 'my', 'my', 'nihao']
>>> names
['#', '123', 'a', ['ll', 'yy', 'ly'], 'B', 'C', 'D', 'aa', 'dd', 'ff', 'my', 'my', 'nihao']
>>> names[3][0]='LL'
>>> names
['#', '123', 'a', ['LL', 'yy', 'ly'], 'B', 'C', 'D', 'aa', 'dd', 'ff', 'my', 'my', 'nihao']
>>> names2
['#', '123', 'A', ['ll', 'yy', 'ly'], 'B', 'C', 'D', 'aa', 'dd', 'ff', 'my', 'my', 'nihao']

  各自开辟新的内存地址

4、元组tuple,用(),又名只读列表,不能修改

它只有2个方法,一个是count,一个是index

>>> names3=("ni","zai","na","li","ni")
>>> names3.count("ni") #统计为"ni"的元素有多少个   
2
>>> names3.index("li") #取出"li"的下标,即索引
3

5、字典 无序,可以层层嵌套 

格式: key:value  key尽量不要写中文,key必须唯一

info = {
    "name": "ll",
    "age": "22",
    "teacher": "Mr.li"
}

print(info["name"])      #输出key为name的value,必须确定有这个key
print(info.get("haha"))  #输出key为name的value,可以不确定有这个key
print(info.get("age"))
print("teacher" in info)   #判断teacher这个key是否在字典中

info["address"]="jiangxi"   #新增一条数据,如果字典中存在address这个key的话则修改这条数据
print(info)

#del info    #删除字典
#del info["age"]     #删除字典中key为age的这条数据
#print(info)

#info.pop("age")  #第二种删除数据方式

#info.popitem()   #随机删除
#print(info)

print(info.values())   #打印所有的value
print(info.keys())

print(info.setdefault("nihao"))   #取不到数据就新增key为"nihao",取得到就返回
b = {
    "a": "A",
    "b": "B",
    "c": "C"
}
info.update(b)
print(info)
test = dict.fromkeys([1,2,3],"test")   #初始化一个新的字典,创建key为1,2,3,value都为test
print(test)
test[2] = "test1"
print(test)

info.clear() #清空info字典

 遍历字典

info = {
    "name": "ll",
    "age": "22",
    "teacher": "Mr.li"
}
for i in info:
    print(i)    #只会打印key
    print(i,info[i])  #同时打印value,需要通过i去取


for key,val in info.items():   #或者先把字典转换成列表,再从列表中取
    print(key,val)

  

字符串的常用操作  

age = "22"
print(age.isdigit())   #字符串是否为数字


names = ["Aa", "Bb", "Cc", "Dd"]
for num,name in enumerate(names):  #用于遍历序列中的元素以及下标
    print(num,name)
# 0 Aa
# 1 Bb
# 2 Cc
# 3 Dd

company = "fengnian"
print(company.capitalize())   #把字符串首字母改为大写
#Fengnian

print(company.count("n"))   #统计company中"n"字符串有多少个
# 3

print(company.center(50,"-"))  #显示一共50个字符,包括变量company中,剩余字符用"-"表示,把company放在中间位置
#  ---------------------fengnian---------------------

print(company.endswith("an"))      #判断"Fengnian"是否以an结尾
#  True

company = "feng\tnian"
print(company)
print(company.expandtabs(tabsize=30))
#expandtabs 把字符串中的tab符号('\t')转为空格,tab 符号('\t')默认的空格数是8,tabsize指定tab符号转为空格的字符数

#  feng	nian
#  feng                          nian

company = "fengnian"

print(company[company.find("ng"):])   #将字符串切片,将字符串"ng"以后的字符串打印出来

company = "nihao hahahaha"
company2 = "123abc"
print(company.isalnum())        # 字符串中是否包含阿拉伯数字
# False
print(company2.isalnum())
# True

company = "fengnian"
company2 = "123abc"
print(company.isalpha())   # 字符串是否只包含字母
# True
print(company2.isalpha())
# False

day = "90"
day2 = "90aaaa"
print(day.isdecimal())    # 字符串是否只包含十进制字符
print(day2.isdecimal())
Company = "Fengnian Day"
print(Company.isidentifier())   #判断是不是一个合法的标识符,或者变量名是否合法
print(Company.islower())   #判断字符串是否全部为小写

print(Company.isupper())   #判断字符串是否全部为大写

print(Company.isnumeric())  #判断是否为数字,不能为小数

print(Company.istitle())   #判断字符串每个首字母是否大写

print(Company.isspace())  #判断字符串是否由空格组成,或者说只包含空格

print(Company.isprintable())   #判断是否可以打印


print('+'.join(['1', '2', '3']))    # 将列表中的字符串用+组合起来生成新的字符串
# 1+2+3

print(company.ljust(50,"*"))   
#显示一共50个字符,包括变量company中,剩余字符用"-"表示,在company后面开始填补不够的字符串

print(Company.lower())   #看字符串中是否都是小写,如果是直接打印,如果不是把它转换成小写再打印
# fengnian day
print(Company.upper())   #看字符串中是大写,如果是直接打印,如果不是把它转换成大写再打印
# FENGNIAN DAY

print(Company.strip())   #用于除去字符串头尾指定的字符串,如果不指定默认是除掉空格
print(Company.lstrip())   #用于除去字符串左边指定的字符串,默认去掉左边的空格
print(Company.rstrip())   #用于除去字符串右边指定的字符串,默认去掉右边的空格

p = str.maketrans("abcdef","123456")   #创建字符映射的转换表,两个字符串的长度必须相同,一一对应
print("yan".translate(p))   #translate,根据表翻译字符串

print("ccb".replace('c','C',1))
#替换字符串,replace()中第一个字符串指旧的被替换的,第二个是要替换的新的字符串,第三个可选,指可以替换的次数,不写则表示所有替换

print("lylyly".rfind('y'))    #返回y在字符串中最后一次出现的位置,如果没有匹配项则返回-1
print("lylyly".rfind('y', 3, 6))  #3 开始查找的位置,6 结束查找的位置,默认为字符串的长度

Company = "Fengnian Day \ hahahah"
print(Company.split("\\"))     # 按\(需要转义)分隔来建立列表,不写默认以空格作为分隔符

print(Company.swapcase())   #字符串中的每个字符,大写变小写,小写变大写

print(Company.title())  #把字符串中独立的字符首字母改为大写

  

购物车实例:

需求:

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

2、允许用户根据商品编号购买商品

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

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

 1 product_list = [
 2     ('iphone',6888),
 3     ('ipad',3500),
 4     ('iwatch',500),
 5     ('macbook',600)
 6 ]
 7 
 8 shopping_list = []
 9 salary = input("please input your salary:")
10 pro_flag = True
11 if salary.isdigit():
12     salary = int(salary)
13     while pro_flag:
14         for index,item in enumerate(product_list):
15             print(index,item)
16         user_choice = input("请输入您要购买的商品编号:")
17         if user_choice.isdigit():
18             user_choice = int(user_choice)
19             if user_choice < len(product_list) and user_choice >= 0:
20                 p_item = product_list[user_choice]
21                 if p_item[1] < salary:
22                     shopping_list.append(p_item)
23                     salary -= p_item[1]
24                     print("added %s in your shopping list" % p_item[0])
25                     print("your balance \033[31;1m%s\033[0m" % salary)
26                 else:
27                     print("your balance only have \033[31;1m%s\033[0m " % salary)
28                     for i in shopping_list:
29                         print(i)
30                     pro_flag = False
31             else:
32                 print("you input product is not exit")
33         elif user_choice == 'q':
34             print("-------商品列表-------")
35             for i in shopping_list:
36                 print(i)
37             print("your balance have \033[31;1m%s\033[0m " % salary)
38             pro_flag = False
39         else:
40             print("你输入的商品编号不对,请重新输入:")
41 else:
42    print("工资输入错误,请重新输入~~~")
购物车

 

三级菜单实例: 

  

要求: 

1、打印省、市、县三级菜单

2、可返回上一级

3、可随时退出程序

 

 1 MapDict = {
 2     "北京": {
 3         "朝阳区": {
 4             "青年路": "朝阳大悦城",
 5             "望京": "望京soho",
 6             "常营": "长楹天街"
 7         },
 8         "西城区": {
 9             "大栅栏" : "大观楼影院",
10             "天坛": "恐龙公园"
11         }
12     },
13     "广东": {
14         "深圳": {
15             "宝安区": "宝安机场",
16         },
17         "广州": {
18             "番禹区": "长隆水上"
19         }
20     }
21 }
22 while True:
23     for i in MapDict:
24         print(i)
25 
26     choice = input("输入地名进入,输入q退出----->")
27     if choice in MapDict:
28         while True:
29             for i2 in MapDict[choice]:
30                 print(i2)
31             choice2 = input("输入地名进入.输入b返回上一层----->")
32             if choice2 in MapDict[choice]:
33                 while True:
34                     for i3 in MapDict[choice][choice2]:
35                         print(i3)
36                     choice3 = input("输入地名进入,输入b返回上一层---->")
37                     if choice3 in MapDict[choice][choice2]:
38                         for i4 in MapDict[choice][choice2][choice3].split():
39                             print(i4)
40                         choice4 = input("选择b返回.输入b返回上一层---->")
41                         if choice4 == "b":
42                             pass
43                     if choice3 == 'b':
44                         break
45             if choice2 == "b":
46                 break
47     if choice == "q":
48         break
View Code

 

 

  

  

  

  

  

  

 

 

  

posted @ 2016-07-31 21:39  a_monologue  阅读(138)  评论(0)    收藏  举报