【python自动化第二篇:python入门】

使用input和raw_input都可以读取控制台的输入,但是input和raw_input在处理数字时是有区别的
当输入为纯数字时

    input返回的是数值类型,如int,float
    raw_input返回的是字符串类型,string类型

输入字符串为表达式

input会计算在字符串中的数字表达式,而raw_input不会。

如输入 “57 + 3”:

    input会得到整数60
    raw_input会得到字符串”57 + 3”

看python input的文档,可以看到input其实是通过raw_input来实现的:

def input(prompt):

    return (eval(raw_input(prompt)))

内容概览

  1. 模块
  2. python运行过程
  3. 基本数据类型(数字,字符串)
  4. 序列类型(列表,元组,字典)
  • 模块使用

  1. 常用的模块之一:os(用于调用系统命令等)
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import os
print(os.path)           #打印当前路所在的路径
cmd=os.system("dir")     #定义cmd执行系统的dir命令
print(cmd)               #返回cmd的状态信息,成功为0,反之不为0
cmd_1 = os.mkdir("SSS")  #创建文件夹SSS
print(cmd_1)             #打印状态
cmd_2 = os.rmdir("SSS")  #删除SSS文件夹
##如果要通过print来打印定义的cmd命令变量的话就需要popen这个参数
cmd_3=os.system('ipconfig')
print(cmd_3)
cmd_4=os.popen("ipconfig").read()  #执行系统命令ipconfig
print(cmd_4)

3.sys模块

#!/usr/bin/env python
import sys
print(sys.path)     #打印python相关路径
print(sys.argv)     #传参数的功能<br>print(sys.argv[1])  #打印第二个参数
  • python运行过程

    对于Python的运行我们还是得追溯到那个神奇的*.pyc字节码文件,这就是在python解释器运行python代码的时候生成的一个字节码文件。

    那么生成的*.pyc文件是什么呢?c应该是compiled的缩写才对啊!

  • 基本数据类型

    在python3.x中对于int这个整形数据类型不再有long int这种说法,这样有效的防止了所谓的溢出问题

 

 成员运算

 

下面是装逼的三元运算,感觉66的:

          

2.python3.x严格区分string和byte:

    在Python3.x下,文本用unicode表示,二进制数据则使用byte来表示。

            

代码表示:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author:wanghui
msg = "呵呵哒!!"
#print(msg.encode(encoding='utf-8'))   ##编码的过程,指定字符编码
#结果 '\xe5\x91\xb5\xe5\x91\xb5\xe5\x93\x92\xef\xbc\x81\xef\xbc\x81'  
 
##解码的过程<br>  呵呵哒!!
print(msg.encode(encoding='utf-8').decode(encoding='utf-8')) 

序列类型

  1. 列表:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author:wanghui
names = ["chenjing","huangjie","huyuedong"]
'''
##切片操作
print(names[0])                    #切片打印第一个位置元素
print(names[0:2])                  #打印前两个元素(顾头不顾尾)
print(names[-2:])                  #打印倒数后两个元素,不建议用[-2:-1]
'''

###添加元素
#names.append("shaolin")      #在最后位置追加shaolin这个新元素
#print(names)
#names.insert(2,"wanghuihui")  #在第三个位置插入wanghuihui
#print(names)
#b = ["wanghui","huangjie","chenyibo","huyuuedong"]
#names.extend(b)                 #在 names中拓展b列表
#print(names)

###修改元素
#names[2] = "alex"             #修改第二个位置的元素为alex
#print(names)
#names[3] = "fengjie"         #如果第四个位置没有fengjie这个元素的话就会报错
#print(names)

###索引(用于索引引用)
#print(names.index("alex"))    #获取alex的位置索引
#print(names[names.index("alex")]) #根据alex索引位置值显示对应的内容

###统计
# print(names.count("wanghui"))       #统计“wanghui”出现的次数

###删除操作
#方法一:del操作
# print(names)
# del names[2]              #按照元素的索引位置删除
# print(names)
#方法二:remove操作
# print(names)
# names.remove("huyuedong")  #按照元素的value删除
# print(names)
#方法三:pop操作
# print(names)
# names.pop()          #删除结尾的一个元素
# print(names)
# names.pop(0)         #指定索引位置删除
# print(names)
#方法四:清空
# names.clear()         #直接清空列表
# print(names)

###排序操作
names.sort()
print(names)               #排序的优先级是符号>数字>大写>小写

深浅拷贝

     深浅拷贝,即可用于序列,也可用于字典

##浅拷贝
import copy
a=["hahaha","xixixi","lalala",["hehe",123],"wuwuwu"]
b=copy.copy(a)
print(a)  #输出['hahaha', 'xixixi', 'lalala', ['hehe', 123], 'wuwuwu']
print(b)  #输出['hahaha', 'xixixi', 'lalala', ['hehe', 123], 'wuwuwu']
a[0]="jjjjj"  #修改第一个元素为jjjjj
print(a)  #输出['jjjjj', 'xixixi', 'lalala', ['hehe', 123], 'wuwuwu']
print(b)  #输出['hahaha', 'xixixi', 'lalala', ['hehe', 123], 'wuwuwu']
a[3][1]=789  #修改第三个元素的第二个元素为789
print(a)  #输出['hahaha', 'xixixi', 'lalala', ['hehe', 789], 'wuwuwu']
print(b)  #输出['hahaha', 'xixixi', 'lalala', ['hehe', 789], 'wuwuwu']

##深拷贝
import copy
names = ["wanghui","huangjie","chenyibo","王辉",["alex","jack"]]
name2 = copy.deepcopy(names)
names[-1][0]="ALEX"
print(names)
print(name2)    ##保持原状不变,这就是深拷贝

 2.元组:不能修改的列表,同样支持count和index方法

#!/usr/bin/env python
# -*- coding:utf-8 -*-
names = ("huangjie","liurun","huyuedong")
names.count('huangjie')
names.index('huangjie')
names[names.index("huangjie")]
#切片操作
print(names[1:])                        #打印第一个到最后一个元素
print(names[0:2])                      #打印第一个到第三个元素
 
#不能对元组元素进行增加和删除操作

3.字符串操作:比较多

#!/usr/bin/python
# -*- coding:utf-8 -*-

a = "name is hehehe"
print(a.capitalize())  # 首字母大写 Name is hehehe
print(a.count('h'))  # 统计h出现的次数 3
print(a.center(16, "-"))  # 按照10字节的字符,如果不够就用-补充,字符串居中
#-name is hehehe-
print(a.encode())  # 字符串编码 name is hehehe
print(a.endswith('he'))  # 判断是否以he结尾 True
print(a.expandtabs())  # 字符串中有\t占位符才能读取到 name is hehehe
print(a.find('hehe'))  # 打印hehe的下标位置 8
print(a[a.find("hehe"):])   #切片 hehehe
print(a.format())  #name is hehehe
print("hello {name}".format(name="hehe")) #hello hehe
print(a.index("is"))  # 打印is的index编号 5
print(a.isalnum())  # 阿拉伯数字,有特殊字符就不行了 False
print(a.isalpha())  # 纯英文字符包括大小写 False
print(a.isdigit())  # 是否为十进制 False
print(a.islower())  # 判断字符串是否为小写 True
print(a.isspace())  # 是否为空格 False
print(a.istitle())  # 是否为标题 False
print(a.isupper())  # 是否为大写 False
print('+'.join(['1', '2', '3', '4']))  # 拼接成1+2+3+4的形式
print(a.ljust(20, '*'))  # 保证长度20然后右侧填充 name is hehehe******
print(a.rjust(20, '#'))  # 保证长度20然后左侧填充 ######name is hehehe
print(a.lower())  # 把大写转成小写
print("\n\n\nhehehe\n\nkkk".lstrip())  # 去除左边的空格或者回车
print("\n\n\nhehehe\n\nkkk").rstrip()  # 去除右边的回车或者空格
print("\n\n\nhehehe\n\nkkk").strip()  # 去除两侧的回车或者空格
# p = str.maketrans("abcdef","123456")
# print("wanghui".translate(p))  #把字符串转换成后面对应的数字的值w1nghui
print(a.replace('h', 'H', 2))  # 替换字符串里的h为H,name is HeHehe
print(a.rfind('e'))  # 找到最右边的e的位置下标并返回
print('1+2+3+4'.split('+'))  # 按照+作为分隔符分割字符串 ['1', '2', '3', '4']
# print('1+2\n+3\n+4'.splitlines('+'))  #按照+号作为分隔符分割(忽略回车或者空格)
print(a.startswith("heh"))  # 判断字符串是否以heh开头
print(a.swapcase())  # NAME IS HEHEHE
print(a.title())  # Name Is Hehehe
print(a.zfill(20))  # 补位操作 000000name is hehehe

4.字典及其操作

#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic = {
    'wanghui': 12345,
    'jack': 123456,
    'sam': 1234567,
    'sary': 12345678
}
# 字典是无序的,key是唯一的,so天生去重
print(dic)  # 无序打印字典
#{'wanghui': 12345, 'sary': 12345678, 'jack': 123456, 'sam': 1234567}
print(dic['wanghui'])  # 按照wanghui打印出对应的值
dic['wanghui'] = 'wanghui'  # 修改wanghui的值为wanghui
print(dic['wanghui'])  # 打印
dic['henry'] = 'henry'  # 新增字典元素
# del dic['wanghui']         #删除wanghui和对应的值
# print(dic)
# dic.pop('henry')           #指定删除
# dic.popitem()              #随机删除
print(dic.get('wanghui'))  # 安全的查找方式,如果存在返回其值。否则返回none
dic_1={ 'wanghui':12345, 'alex':234567, 'huyuedong':23455}
dic.update(dic_1)  # 合并两个字典,如果有交叉,就更新字典,如果没有交叉就创建
print(dic)
print(dic.items())  # 字典转成了列表
#[('alex', 234567), ('sam', 1234567), ('huyuedong', 23455), ('wanghui', 12345), 
# ('sary', 12345678), ('jack', 123456), ('henry', 'henry')]
c = dic.fromkeys([6, 7, 8])  # 创建了新的字典
print(c)  # ->输出:{8: None, 6: None, 7: None}

d = dic.fromkeys([6, 7, 8], "test")  # 初始化字典创建
print(d)  # ->输出:{8: 'test', 6: 'test', 7: 'test'}
e = dic.fromkeys([9, 10, 11], [1, {"name": 'wanghui'}, 1234])
print(e)  #{9: [1, {'name': 'wanghui'}, 1234], 
# 10: [1, {'name': 'wanghui'}, 1234], 11: [1, {'name': 'wanghui'}, 1234]}
嵌套字典:
dic={
 "甘肃省":{
        '张掖市':['甘州区','民乐县','山丹县','高台县'],
        '武威市':['凉州区','古浪县','民勤县'],
        '酒泉市':['敦煌市','玉门市','肃州区']
          },
 "山东省":{
        '潍坊市':['寒亭区','高密市','寿光市','昌乐县'],
        '济南市':['长清区','历下区','禹城市'],
        '青岛市':['即墨市','黄岛区','崂山区']
          },
 "陕西省":{
        '西安市':['未央区','长安区','雁塔区','新城区'],
        '咸阳市':['秦都区','渭城区','礼泉县'],
        '安康市':['汉阴县','白河县','紫阳县']
          }
}
dic['陕西省']['西安市'][2]="碑林区"                      #修改操作
print(dic)
print(dic.values())
dic.setdefault('台湾省',{'baidu.com':[1,2,3]})   #设置默认值
print(dic)

 课堂程序

购物车程序

需求:

  1. 启动程序后,让用户输入工资,然后打印商品列表
  2. 允许用户根据商品编号购买商品
  3. 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 
  4. 可随时退出,退出时,打印已购买商品和余额

enumerate将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标

 
#!/usr/bin/env python
# -*- coding:utf-8 -*-

product_list = [
    ('Iphone',5800),
    ('Mac Pro',9800),
    ('Bike',800),
    ('Watch',10600),
    ('Coffee',31),
    ('Alex Python',120),
]
shopping_list = []
salary = raw_input("Please input your salary:")
if salary.isdigit():
    salary=int(salary)
    while True:
        for num,item in enumerate(product_list):
            print(num,item)
        user_choice = raw_input("Please choice your item:")
        if user_choice.isdigit():
            user_choice=int(user_choice)
            if user_choice < len(product_list) and user_choice >= 0:
                p_item = product_list[user_choice]
                if p_item[1] <= salary:
                    shopping_list.append(p_item)
                    salary -= p_item[1]
                    print("added %s into shopping car,your current balence is \033[31;1m%s\033[0m" %(p_item,salary))
                else:
                    print("your money is not enough to buy,you have \033[41;1m%s\033[0m left" %(salary))
            else:
                print("your choice %s is out of shopping_list" %(user_choice))
        elif user_choice == 'q':
            print("shopping_list".center(50,"*"))
            for i in shopping_list:
                print(i)
            print("your current balence:",salary)
            exit()
        else:
            print("Invalid option!!")
else:
    print("invalid salary!!")
三级菜单程序:
#!/usr/bin/env python
# -*- coding:utf-8 -*-

##三级菜单字典定义
zone = {
    "甘肃省": {
        "张掖市": ["甘州区", "民乐县", "山丹县"],
        "武威市": ["凉州区", "古浪县", "民勤县"],
    },
    "山东省": {
        "济南市":["历下区","长清区","禹城市"],
        "潍坊市":["昌乐县","潍城区","寒亭区"]
    },
    "陕西省": {
        "西安市":["雁塔区","新城区","未央区"],
        "咸阳市":["礼泉县","秦都区","渭城区"]
    }
}
##退出循环标志位定义
exit_flag = True
while exit_flag:
    for i in zone:   #读取第一级菜单
        print(i)
    choice = raw_input("first,press q to exit:")  #第一级菜单输入
    if choice == "q":
        exit_flag =False
    if choice in zone:
        while exit_flag:
            for i2 in zone[choice]:     #第二级菜单读取
                print("\t\t",i2.decode(encoding='utf-8'))
            choice2 = raw_input("second,press b return back and q to quit!!!:") #第二级菜单输入
            if choice2 in zone[choice]:
                while exit_flag:
                    for i3 in zone[choice][choice2]:
                        print("\t\t\t\t",i3)
                    choice3 = raw_input("last one,press b return back and q to quit!!!")  #第三级菜单输入
                    if choice3 == 'b':
                        break
                    elif choice3 == "q":
                        exit_flag=False
            if choice2 == 'b':
                break
            elif choice2 == 'q':
                exit_flag = False

升级版三级菜单(以后可以当模板):

current = zone
last = []
 
while True:
    for i in current:
        print(i)
    choice = input(">>:")
    if len(choice) == 0 :continue
    if choice == 'b':
        if len(last) == 0:break             #防止第一级为空报错,直接退出
        current=last[-1]                       #打印当前一级
        last.pop()                             #往上走一级,就删除当前
    if choice not in current:continue
    last.append(current)                       #保存上级菜单
    current = current[choice]                  #当前菜单

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值