python零基础入门day2--列表与字典

如果我们想要保存一堆具有相同性质的数据的时候应该怎么做?比如说现在我想用python储存一个班里所有同学的信息,我该怎么储存?难道要一个一个创建变量来储存吗?这样实在是太笨了,如果我想要储存整个学校同学的名单,那还不得累死。python中有这么些数据结构,可以帮助我们解决储存大量数据的问题。

列表

列表是一种储存变量的数据结构,声明一个列表的方法如下:

numbers = ['1', '2', '3']

创建了一个储存数字123字符串的列表。
列表用中括号括起,列表中的元素以逗号隔开。理论上来说,只要你的内存够大,列表的储存上限是不存在的。这也是python中一个便利的地方,它不会像c++、java中的数组一样在定义时就要求指定大小,并且不需要指定列表中的数据类型,我们想在列表里边存什么就存什么。

列表的遍历
列表的遍历也十分简单,用for循环就够了:

for number in numbers:
    print(number)

上面的代码使列表numbers中的元素依次输出
列表的增删查改
增加:
要往列表中增加元素只需要调用列表中的append函数就够了:

list.append(element)

上边的代码使element加入到列表的末尾
查找:
可以通过索引来访问列表中的元素,比如说我要获得list中的第一位元素:

list[0]

就获得了列表中的第一位元素。
修改:
如果想要修改列表中的值直接对其赋值就好:

list[0] = "1"

上边的代码把列表中的第一位元素改成了字符串1。

删除:
删除python中任何的元素最简单粗暴的方法就是del,要删除列表中的第一位元素,可以用下面的代码:

del list[0]

还可以使用remove函数,具体使用方法如下:

list.remove(object)

删除列表中第一个出现的object
pop函数可以按索引删除列表中的元素:

list.pop(0)

删除了列表中的第一个元素。

列表的切片
如果我们只需要用到列表中的一部分元素而不需要其他的元素,可以使用列表的切片。
比如说假设students列表中储存了全班同学的排名信息,而我只想要获得前三名同学的信息,我们可以这样:

print(students[:3])

这段代码输出了students中前三位的元素。
在冒号的两端分别是切片的开始位置和结束位置,空着表示开头(结尾),切片的结果不包括冒号后边的位置。需要注意的是,列表的索引是从0位置开始的,而不是我们通常所理解的1开始。比如上例中我们从0位置(开头)开始,一直截到3位置之前(不包括3位置),得到的是原列表0、1、2号位的共计三个元素。

列表常用的函数:
len()
len函数接收一个列表,返回该列表的长度:

len(list)

index()
index函数接受一个对象,返回该对象第一次在列表中出现的位置,如果列表中不存在该对象则会抛出一个ValueError异常。

index = list.index(object)

元组

元组与列表基本一样,只不过元组一旦确定就无法修改了,其定义方式如下:

tuple = ("1", "2", "3")

无法修改元组中的元素:

tuple[0] = '4'

这样操作时,解释器会报错:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

字典

字典是python的一种数据结构,这种数据结构中的每一个元素都是一个键值对,比如说一个学生的信息可以这样表示:

学号:[姓名,年龄,性别,班级,成绩]

这样学号就是键值对中的键,与这个学生相关的信息就是键值对中的值。
接下来看python中字典如何定义:

dict = {key1: value1, key2: value2}

修改
update()两个字典的“并”
items()将字典转成列表
dict.fromkeys()初始化一个字典
添加
查找print(info.get(key))
key in info
删除del,pop(),popitem()

循环
for i in info:
print(i, info[i])

for k, v in info.items():
print(k, v)

购物车程序

isdigit()函数判断输入是否是数字
enumerate()函数
\033[31;1m%s\033[0m

字符串常用操作

capitalize()开头字母大写
count()计算子串数量
center()将字符串格式化居中
endswith()判断字符串是否以某个字符结尾
split()按某个字符分割
join()将列表中的字符串按某种方式合并
expendtabs()将缩进变成指定的大小
find()查找子串所在的位置
format()格式化字符串
format_map()格式化字符串,参数为一个字典
isalnum()判断字符串是否仅由阿拉伯数字组成
isdigit()# 判断是否为数字
isdecimal()判断是否为十进制
isidentifier()# 判断是不是一个合法的标识符
islower()判断是不是小写
isupper()判断是不是大写
isnumeric()判断是不是数字
title()将字符串中每个首字母大写
isprintable()tty文件,判断是否可以打印
ljust()将字符串左对齐并使用所给字符串填充
rjust()将字符串右对齐并用所给字符串填充
lower()将字符串中字母变为小写
upper()将字符串中字母变成大写
lstrip()去除字符串左边的空格
rstrip()去除字符串右边的空格
strip()去除字符串中的空格
replace()将字符串中的子串用给定字符替换
splitlines()按换行符分割
swapcase()更换大小写

作业

购物车优化:
import json

程序:购物车程序

需求:

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

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

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

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

用户入口:

1.商品信息,余额存在文件里

2.已购物品

商家入口:

1.可以添加物品、删除物品、修改商品价格

商品列表

try:
with open(“product_list.json”) as file_object:
product_list = json.load(file_object)
except json.decoder.JSONDecodeError:
product_list = [
(“iphone”, 5800),
(“car”, 300000),
(“coffee”, 33),
(“Mac”, 12000),
(“iwatch”, 10600),
(“book”, 78)
]

输入用户名

username = input(“username:”)

用户入口

if username == “customer”:
try:
with open(“goods.json”) as file_object:
fill_list = json.load(file_object)
except json.decoder.JSONDecodeError:
# 购物车清单
shopping_list = []
# 输入工资
salary = int(input(“您的工资:”))
else:
shopping_list = fill_list[0]
salary = fill_list[1]
print(“您的余额为:%d” % salary)

# 输出商品列表
for index, product in enumerate(product_list):
    print(index, product)

while True:
    user_choice = input("请选择你要购买的商品编号:")
    # 判断是否是数字
    if user_choice.isdigit():
        number = int(user_choice)
        if 0 <= number < len(product_list):
            # 判断够不够钱
            if product_list[number][1] <= salary:
                shopping_list.append(product_list[number])
                salary = salary - product_list[number][1]
                print("%d号商品已经加入您的购物车中 您的余额:\033[31;1m%d\033[0m" % (number,
                                                                    salary))
            else:
                print("你的钱不够了")
        else:
            print("没有", number, "号商品!")
    elif user_choice == "q":
        print("退出")
        break
    else:
        print("请输入正确的指令!")

for good in shopping_list:
    print(good)
print("您的余额为:", salary)
# 保存在一个列表里
fill_list = [shopping_list, salary]
with open("goods.json", "w") as file_object:
    json.dump(fill_list, file_object)

商家入口

elif username == “admin”:
# 输出商品列表
for index, product in enumerate(product_list):
print(index, product)
print(“1.增加商品”)
print(“2.删除商品”)
while True:
choice = input(“请选择要执行的操作:”)
if choice == “1”:
while True:
choice = input(“请输入商品名:”)
if choice == “q”:
break
price = int(input(“请输入商品价格:”))
product_list.append((choice, price))
elif choice == “2”:
for index, good in enumerate(product_list):
print(good)
while True:
choice = input(“请输入要删除的商品:”)
if choice.isdigit():
choice = int(choice)
if 0 <= choice < len(product_list):
del product_list[choice]
else:
print(“请输入正确的数字!”)
elif choice == “q”:
break
else:
print(“请输入正确的指令!”)
continue
elif choice == “q”:
break
else:
print(“请输入正确的指令!”)
continue
for name in product_list:
print(name)
with open(“product_list.json”, “w”) as file_object:
json.dump(product_list, file_object)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值