码迷,mamicode.com
首页 > 编程语言 > 详细

NO.2:自学python之路

时间:2018-02-19 10:29:37      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:swap   位置   atl   切片   用户名   pen   bubuko   dong   ndt   

引言

本周初步认识了库,并学习了Python中各种类型的变量和常用操作。并完成了较为完善的用户与商家购物界面设计。

正文

模块:

Python有标准库和第三方库。第三方库需要安装才能使用。大量的库可以帮助我们更容易的完成复杂的操作。一般情况下,标准库被保存在了‘lib/’目录下,第三方库被保存在了‘lib/site-packages’目录下。导入一个库非常简单,例子:

import os

每种模块都有很多操作,一般情况是用模块名.操作名完成某些操作,例子:

os.system(dir)#读取目录下的文件列表,但不保存

变量类型:

整型(int),Python 3.X中整型只有int型,而在Python 2.X中整型分为int,和long,变量的类型不需定义,与Matlab中类似,但类型不可随意更改。查看变量类型,例子:

x = 3
type(x)

其他类型与C++中类似,所以不再赘述。

虚数型,在Python中j表示虚数。

比特型(bytes),Python 2.X中比特型与字符型没有区别,而在Python 3.X中存在不同,它们可以互相转换,例子:

x = 我爱中国
y = x.encode()#转换为比特型
print(y)
z = y.decode())#转换为字符型
print(z)

在日常使用Python中,字典与列表是最常使用的变量。下面将详细介绍字典与列表的使用方法。

列表:

列表的定义,例子:

province = [Beijin,Hebei,Shanghai,Henan]

列表的切片与Matlab有相似之处,但有着巨大不同,Python的:后的数字是切片位置的后一位。所以,在Python中[1:2]=[1],例子:

province = [Beijin,Hebei,Shanghai,Henan]
print(province[0:2])#切片(顾头不顾尾)

Python还可以从右数来完成切片,例子:

province = [Beijin,Hebei,Shanghai,Henan]
print(province[-1])#从右数
print(province[-2:])#最后的值省略

 列表的增加有两种方式,一种是最后追加,还有一种是某处插入。例子:

province = [Beijin,Hebei,Shanghai,Henan]
province.append(Shannxi)#最后追加
province.insert(1,Xinjiang)#某处插入

列表的修改十分简单,例子:

province = [Beijin,Hebei,Shanghai,Henan]
province[1] = Beijing#改变某处

列表的删除有很多方法,del是Python中通用的删除方法,此外还有删除某个与删除某处参数的方法,例子:

province = [Beijin,Hebei,Shanghai,Henan]
del province[2]#删除某处
province.remove(Beijing)#删除某个
province.pop()#删除最后一个(默认),或括号中的位置

此外,Python还为列表提供了许多功能。Python中可以轻松查询某个参数的位置和个数,例子:

province = [Beijin,Hebei,Shanghai,Henan]
province.index(Shanghai)#寻找位置
province.count(Shanghai)#寻找个数

改变列表的顺序也十分简单,例子:

province = [Beijin,Hebei,Shanghai,Henan]
province.reverse()#反转序列
province.sort()#排序序列(符号,数字,大写,小写(ASCII))

Python中列表的复制与Matlab不同,设计相对合理一些,但是有一点难以理解,学过C++中指针的可以相对容易理解一些。普通的赋值操作,只是将列表的地址复制,一旦其中列表中的值发生改变,两者中的值都会改变,例子:

province = [Beijin,Hebei,Shanghai,Henan]
province_copy = province#复制地址,改变后一起变化
province.append(Xinjiang)
print(province)
print(province_copy)

要想复制一个列表,有浅copy和深copy两种方法。浅copy只复制列表的第一层,第二层将只复制地址。深copy则是完全在内存中建立一个一样的区域。例子:

province = [Beijin,[Hebei,Shijiazhuang],Shanghai,Henan]
province_copy = province.copy()#浅copy
import copy
province_copy = copy.copy(province)#浅copy
province_copy = list(province)#浅copy
province_copy = copy.deepcopy(province)#深copy

Python中也提供了列表的合并方法,例子:

province = [Beijin,Hebei,Shanghai,Henan]
province_new = [Xinjiang,Dongbei]
province.extend(province_new)#并入后面

列表的高效循环方法是用以下格式,[::x]切片中x为步距,例子如下:

province = [Beijin,Hebei,Shanghai,Henan]
for i in province[::2]:#切片
    循环体

当列表中存储的信息不想被改变时,就可以用元组,元组的定义与列表几乎相同,只是用‘()’代替了[]。元组不能修改,只能切片。例子:

province = (Beijin,Hebei,Shanghai,Henan)

字符:

字符中对字母大小写变化的操作很多,可以有以下几种方法,例子:

x = l love china
x.capitalize()#首字母大写
x.upper()#全变大写
x.lower()#全变小写
x.title()#变为标题形式
x.swapcase()#大小写互换

在Python中还可以轻松的对字符进行修改,例子:

names = Xiaohong Xiaohuang
names.replace(o,O,1)#旧字符,新字符,替换个数
tran = str.maketrans(aox,123)#设置替换密文
names.translate(tran)#替换加密
names.center(50,-)#50个字符,将name居中,不的够用-填充
names.ljust(50,*)#50个字符,将name居左,不的够用*填充
names.rjust(50,*)#50个字符,将name居右,不的够用*填充
names.zfill(50)#50个字符,将name居右,不的够用0填充
names =   Xiaohong
names.lstrip()#去掉左边空格,然后回车
names =   Xiaohong   
names.strip()#去掉左右空格,然后回车
names = Xiaohong\tXiaohuang#\t与下面结合,控制空格的数量
names.expandtabs(tabsize=30)#空格数

除此之外,还提供了查询功能,例子:

names = xiaohei
names.find(i)#从左找某个字符第一次出现的位置
names.rfind(i)#从右找某个字符第一次出现的位置

字符和列表之间还可以相互转换,例子:

names = Xiaohong Xiaohuang Xiaozhang Xiaoli
names.split()#按空格分成列表
names = Xiaohong
Xiaohuang
Xiaozhang
Xiaolinames.splitlines()#按回车分成列表
names = [Xiaohong,Xiaohuang,Xiaozhang,Xiaoli]
+.join(names)#用+连接列表成字符

Python还为字符提供了很多判断,这些功能大多以is开头,例子:

names = (xiaohong hei)
names.endswith(hei)#判断以什么结尾
names.isalnum()#判断为阿拉伯数字
names.isalpha()#判断为纯英文
names.isdigit()#判断为整数
names.isidentifier()#判断为合法标识符(变量名)
names.islower()#判断为小写
names.istitle()#判断为标题形式

字典

字典也是常用的一种工具,字典是使用‘{}’定义的,字典中的数据是无序的,字典可以与序列与字典嵌套。

索引字典时使用KEY,例子:

info = {
    2012020201:随便,
    2012020202:呵呵,
    2012020203:不知
    }
print(info[2012020202])

字典的增加和修改都是通过复制操作,程序会首先查询字典中是否有该KEY值,没有,则新建一条。有,则修改该条的值。例子:

info = {
    2012020201:随便,
    2012020202:呵呵,
    2012020203:不知
    }
info[2012020201] = 蛤蛤#修改
info[2012020204] = 拉拉#增加

字典的删除可以使用Python中通用的删除方法,或者字典中提供的方法,例子:

info = {
    2012020201:随便,
    2012020202:呵呵,
    2012020203:不知
    }
del info[2012020203]#删除
info.pop(2012020203)#删除
info.popitem()#随便删除一个,不常用

查找是,可以用之前的方法来查找,但是还有一种安全的查找方法,例子:

info = {
    2012020201:随便,
    2012020202:呵呵,
    2012020203:不知
    }
info.get(2012020202)

判断某个KEY是否在字典中,例子:

info = {
    2012020201:随便,
    2012020202:呵呵,
    2012020203:不知
    }
2012020202 in info

字典也可以合并,合并时,将会用新的字典中覆盖旧的字典,例子:

info = {
    2012020201:随便,
    2012020202:呵呵,
    2012020203:不知
    }
info_new = {
    2012020202:王凯,
    2012020206:彭浩,
    }
info.update(info_new)#合并更新

Python也提供了新建一个字典的方法,但是存在很大的问题,所以一般不会使用,例子:

info_new = dict.fromkeys([1,2,3],[1,{name:X,2}])#初始化字典
info_new[3][1][‘name’] = Y

当修改Python新建的字典时,例子中只改了[3][1]中的‘name’为‘Y’但是可以发现字典中的所有‘name’都变为了‘Y’。所以,正常情况下很难使用。

字典可以转为列表,例子:

info = {
    2012020201:随便,
    2012020202:呵呵,
    2012020203:不知
    }
info.items()

多级字典的操作与单级字典差别不大,修改略有不同。例子:

province = {
    华北:{
        北京:[直辖市,很大],
        河北:[石家庄,漂亮],
        },
    东北:{
        黑龙江:[哈尔滨,很棒],
        辽宁:[沈阳,厉害],
        },
    }
province[华北][北京][1] = 首都#修改
province.setdefault(西北,{陕西:[西安,省会]})#取西北如果有,返回,没有新建

字典的循环格式与列表类似,格式如下,例子:

info = {
    2012020201:随便,
    2012020202:呵呵,
    2012020203:不知
    }
for i in info:#高效循环
    print(i,info[i])
    循环体

作业

编写一个购物车程序,要求将商品信息存在文件里。打开程序后需要用户登陆,用户入口需要实现,已购商品,余额记录,启动程序,输入工资,根据编号,购买商品,检测余额,够用扣款,不够提醒,随时退出,打印已经购买的商品和余额。商家入口需要实现,添加商品,修改价格。

流程图:

技术分享图片

主程序:

#购物车程序
‘‘‘
商品信息存在文件里
1.打印商品列表
用户入口
已购商品,余额记录
启动程序,输入工资
根据编号,购买商品
检测余额,够用扣款,不够提醒
随时退出,打印已经购买的商品和余额
商家入口
添加商品,修改价格
‘‘‘
import getpass

title = ‘‘‘
---------------------------
-     欢迎光临本超市      -
---------------------------
‘‘‘
print(title)

#读取商品数据
goods = open(商品.txt)
read_flag = True
goods_list = []
while read_flag:#按行处理
    goods_line = goods.readline()
    if goods_line == ‘‘:
        read_flag = False
    else:
        goods_list.append(goods_line.split())
goods.close()

#读取用户信息
info = open(用户信息.txt)
read_flag = True
info_user = []
while read_flag:
    info_line = info.readline()
    if info_line == ‘‘:
        read_flag = False
    else:
        info_user.append(info_line.split())
info.close()

#用户登陆
success_flag = False
for count in range(0,6):
    account = input(请输入用户名:)
    password = getpass.getpass(请输入密码:)
    for i in range(0,len(info_user)):
        if account == info_user[i][0] and password == info_user[i][1]:
            success_flag = True
            user_number = i
            break
    if success_flag:
        print(尊敬的%s登陆成功!%info_user[user_number][2])
        break
    else:
        print(用户名或密码错误!)
else:
    print(输入密码次数超过6次,请重新开启软件尝试!)
    exit()

#进入入口
info_write = []
if info_user[user_number][3] == 0:
    #普通用户
    if info_user[user_number][4] == 0:
        #初次登陆
        balance = input(您是第一次登陆,请输入充值金额:)
        if balance.isdigit():
            balance = int(balance)
            info_user[user_number][4] = 1
            info_user[user_number][5] = str(balance)
        else:
            print(充值错误,退出系统!)
            exit()
    #非初次登陆
    for i in range(0,len(goods_list)):
        goods = {number}.物品名:{name} 价格:{price}.format(number = i + 1,
                                                               name = goods_list[i][0],
                                                               price = goods_list[i][1])
        print(goods)
    print(%s.充值%(len(goods_list)+1))
    buy_list = []
    balance = int(info_user[user_number][5])
    while True:
        buy_number = input(请输入你所需要的商品序号[按q退出购买]:)
        if buy_number == q:
            buy_list =  .join(buy_list)
            print(本次购物购买了:{list}.format(list = buy_list))
            #更新信息
            info_user[user_number][5] = str(balance)
            info = open(用户信息.txt,w)
            for i in range(0,len(info_user)):
                info.write( .join(info_user[i])+\n)
            info.close()
            exit()
        elif buy_number.isdigit():
            buy_number = int(buy_number)-1
            if buy_number > len(goods_list) or buy_number < 0:
                print(请输入正确的商品码!)
            elif buy_number == len(goods_list):
                money = input(请输入充值金额:)
                if money.isdigit():
                    balance += int(money)
                    info_user[user_number][5] = str(balance)
                else:
                    print(充值金额错误)
            else:
                if balance < int(goods_list[buy_number][1]):
                    print(你的余额不够购买这件商品!)
                else:
                    balance = balance - int(goods_list[buy_number][1])
                    buy_list.append(goods_list[buy_number][0])
                    print(购买成功!还剩%s圆%balance)#
        else:
            print(输入错误)
elif info_user[user_number][3] == 1:
    #商家用户
    for i in range(0,len(goods_list)):
        goods = {number}.物品名:{name} 价格:{price}.format(number = i + 1,
                                                               name = goods_list[i][0],
                                                               price = goods_list[i][1])
        print(goods)
    print(%s.添加物品%(len(goods_list)+1))
    add_list = []
    while True:
        buy_number = input(请输入你需要修改商品价格的序号[按q退出购买]:)
        if buy_number == q:
            add_list =  .join(add_list)
            print(本次共添加了:{list}.format(list = add_list))
            #更新信息
            info = open(商品.txt,w)
            for i in range(0,len(goods_list)):
                info.write( .join(goods_list[i])+\n)
            info.close()
            exit()
        elif buy_number.isdigit():
            buy_number = int(buy_number)-1
            if buy_number > len(goods_list) or buy_number < 0:
                print(请输入正确的商品码!)
            elif buy_number == len(goods_list):
                goods_name = input(请输入商品名称:)
                goods_price = input(请输入商品价格:)
                if goods_price.isdigit():
                    add_list.append(goods_name)
                    goods_list.append([goods_name,goods_price])
                else:
                    print(商品价格信息错误!)
            else:
                goods_price = input(请输入商品价格:)
                if goods_price.isdigit():
                    goods_list[buy_number][1] = goods_price
                else:
                    print(商品价格信息错误!)
        else:
            print(输入错误)
else:
    print(用户数据错误!请管理员维护!!)

信息记录文件:

商品.txt

手机 1000
电脑 8000
耳机 500
泡面 3
娃娃 10000

用户信息.txt

customer 123456 凯凯王 0 0 0
business 123456 卖力头 1 0 0

 

NO.2:自学python之路

标签:swap   位置   atl   切片   用户名   pen   bubuko   dong   ndt   

原文地址:https://www.cnblogs.com/zk71124720/p/8453371.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!