python(三)数据类型: int bool str list tuple dict

一  、int

 bit_length()        计算十进制转化成二进制的有效位数

v = 11 
data = v.bit_length()
print(data)

二 、 bool

布尔值就两种:True,False。就是反应条件的正确与否。

真   1   True。

假   0   False。 

s1 = '王大锤'
s2 = ' '  #  字符串中有空格
s3 = ''
print(bool(s1))  #  结果为True
print(bool(s2))  #  结果为True
print(bool(s3))  #  结果为false

bool转换成字符串: bool ---> str

print(str(True), type(str(True))) 
# 执行结果为 True <class 'str'> # 虽然结果还是true, 但是这时已转换成字符串格式 

三 、 str

1. 字符串的索引与切片

  索引即下标,就是字符串组成的元素从第一个开始,初始索引为0以此类推

a = 'ABCDEFGHIJK'
print(a[0])  # 结果为 A,因为从0开始,所以0为第一个
print(a[3])  # 结果为 D,因为从0开始,所以3为第4个
print(a[5])  # 结果为 F,因为从0开始,所以5为第6个
print(a[7])  # 结果为 H,因为从0开始,所以7为第8个

2. 切片

  就是通过索引(索引:结尾索引+1  :步长)截取字符串的一段,形成新的字符串(原则就是顾头不顾腚)

a = 'ABCDEFGHIJK'
print(a[0:3])  # 结果为ABC
print(a[2:5])  # 结果为CDE
print(a[0:])  # 0:表示默认到最后,可以取到k元素 结果为ABCDEFGHIJK
print(a[0:-1])  # -1 是列表中最后一个元素的索引,但是要满足顾头不顾腚的原则,所以取不到K元素,结果为ABCDEFGHIJ
print(a[0:5:2])  # 加步长,从0-5元素,步长为2,结果为:ACE
print(a[5:0:-2])  # 反向加步长,从左第5个元素起至末尾,步长为2,结果为:FDB
print(a[-1:-3:-1])  # -:-3表示输出倒数两个元素,最后的-1表示从字符串的右侧切

3. 常用方法: 对字符串操作形成的都是新的字符串

# captalize, swapcase, title
name = 'daChui'
print(name.capitalize()) # 首字母大写,其他小写,已大写的也小写
print(name.swapcase()) # 大小写翻转
msg='hello word, zhenhao!'
print(msg.title()) # 每个单词的首字母大写

# center  内同居中,设置总长度,空白处填充
a1 = 'dachui'
a2 = a1.center(10, "*")  # 设置总长度为10,不足的空白处用*填充
print(a2)  # 结果为**dachui**

# title()  非字母隔开的'单词'首字母大写
ss = 'hello me2dachui*word'
s4 = ss.title()
print(s4)  # 结果为 Hello Me2Dachui*Word , 以非字母*隔开的单词也要首字母大写

# upper() 全大写   lower() 全小写
s = 'daChui'
s5 = s.upper()
print(s5)  # 结果为DACHUI
s6 = s.lower()
print(s6)  # 结果为dachui


# count 数字符串中的元素出现的个数。
ret3 = a1.count("a",0,4) # 可切片
print(ret3)

a2 = "hqw	"
# 	前面的补全
# 默认将一个tab键变成8个空格,如果tab前面的字符长度不足8个,则补全8个,如果tab键前面的字符长度超过8个不足16个则补全16个,以此类推每次补全8个。
ret4 = a2.expandtabs()
print(ret4)


# startswith 判断是否以...开头
# endswith 判断是否以...结尾
a4 = "dkfjdkfasf54"
ret4 = a4.endswith('jdk', 3, 6)  # 顾头不顾腚,到第几个字符,就用索引号-1
print(ret4)  # 返回的是布尔值true
ret5 = a4.startswith('jdk', 3)  # 以...开始的,可以省略末尾索引
print(ret5)  # 返回的是布尔值 true
ret6 = a4.endswith('f54', 9)  # 以...结束的,可以省略末尾索引
print(ret6)  # 返回的是布尔值true
ret7 = a4.startswith("kfj", 1, 4)
print(ret7)  # 返回的是布尔值true


# find  通过元素找索引,找不到返回-1  ***
# index 通过元素找索引,找不到报错  ***
s = 'oldboy'
print(s.find('d'))  # 结果为 2
print(s.find('o'))  # 结果为 0
print(s.find('A'))  # 结果为 -1,因为没找到
print(s.index('d'))  # 结果为 2
print(s.index('A'))  # 结果报错
print(s.find("db", 1, 4))  # 结果为2,只返回d的索引


# split 以什么分割,最终形成一个列表此列表不含有这个分割的元素。可将str 转换为 list
ret9 = 'title, Tilte, atre,'.split('t')
print(ret9)  # 结果为: ['', 'i', 'le, Til', 'e, a', 're,']
ret91 = 'title, Tilte, atre,'.rsplit('t', 1)
print(ret91)  # 结果为: ['title, Tilte, a', 're,'] ,参数为1, 只分割右边第一个
s = '我 是 谁'
print(s.split())  # 默认按照空格分割,结果为: ['我', '是', '谁']


# format的三种玩法 格式化输出
res = '{} {} {}'.format('egon', 18, 'male')
print(res)  # 结果为: egon 18 male
res1 = '{1} {0} {1}'.format('egon', 18, 'male')
print(res1)  # 结果为: 18 egon 18
res2 = '{name} {age} {sex}'.format(sex='male', name='egon', age=18)
print(res2)  # 结果为: egon 18 male

# strip 默认去除str前后两端换行符,制表符  空格  ***  中文
name = '*egon**'
print(name.strip('*'))  # 去除所有的*
print(name.lstrip('*'))  # 只去除左边的*
print(name.rstrip('*'))  # 只去除右边的*

# replace  把字符串中的 旧字符串 替换成 新字符串
ame = '我 是 大鱼 我 是 大鱼'
print(name.replace('大鱼', '小美'))  # 结果为: 我 是 小美 我 是 小美
print(name.replace('大鱼', '小美', 1))  # 结果为: 我 是 小美 我 是 大鱼,加了参数1后,只替换了第一个元素


# join   将原有的 列表 或 字符串 中的 元素 以指定的 字符 连接生成一个新的 字符串,用途将 list 转换为 str
s = '-*—'
s1 = 'bcd'
s2 = ['b', 'c', 'd']
print('_'.join(s1))  # 结果为 b_c_d
print(s.join(s1))  # 结果为 b-*—c-*—d
print(s.join(s2))  # 结果为 b-*—c-*—d ,列表(list)也可以用此方法
print(s1.join(s))  # 结果为-bcd*bcd—,因为s中的元素被s1连接的时候,
print('x'.join(s1))  # 结果为 bxcxd
l1 = ['wo', 'shi', 'shui'] # 转换为字符换 'wo shi shui'
print(' '.join(l1))  # 结果为: wo shi shui


# is系列
name='dachui456'
print(name.isalnum())  # 判断字符串是否由字母或数字组成
print(name.isalpha())  # 判断字符串是否只由字母组成
print(name.isdigit())  # 判断字符串是否只由数字组成  str ---> int 可以作为一个判断条件
print(name.isspace())  # 判断字符串是否只有空格组成


# is: 比较内存地址
s1 = 1000
s2 = 1000
print(s1 is s2)  # 返回true, 证明这两个内存地址一样


# 公共方法 len count
# len 测量个数,返回对象(字符、列表、元组等)长度或项目个数
s = 'qwer123 qwq'
ss = ''
print(len(s))  # 结果为11,空格也会统计
print(len(ss))  # 结果为0,统计不到不会报错,会返回0
# count 某个元素出现的次数,可选参数为在字符串搜索的开始与结束位置
print(s.count('q'))  # 结果为3
print(s.count('4'))  # 结果为0,统计不到不会报错,会返回0

四、 tuple

元组被称为只读列表,即数据可以被查询,但不能被修改,所以,字符串的切片操作同样适用于元组。例:(1,2,3)("a","b","c")

 tu = (1, True, [12, 3], 'afdlsfa')
可以索引,可以切片(步长)。
不能增删改(儿子不能,孙子有可能),只能查询。
index  count  for 循环。

五、list

列表相比于字符串,不仅可以储存不同的数据类型,而且可以储存大量数据,32位python的限制是 536870912 个元素,64位python的限制是 1152921504606846975 个元素。而且列表是有序的,有索引值,可切片,方便取值。

1. 索引切片。(与字符串一样)

# 1,索引切片。(与字符串一样)
l1 = ['孙悟空', '猪八戒', '唐僧', 100, 'lily']
print(l1[0], type(l1[0]))
print(l1[-2], type(l1[-2]))
print(l1[:2])

2. 增删改查,以及其他操作。

l1 = ['alex', 'wusir', 'wusir', 'wusir','太白', 100, '女神']

#1、 增

# append追加
l1.append('文刚')
print(l1.append('文刚'))
print(l1)

# insert 插入
l1.insert(1,'oldboy')
print(l1)

# extend() 迭代的追加
l1.extend('abc')
l1.extend(['abc', 'erf'])
print(l1)



# 2、删

# pop 按照索引删除,有返回值

ret = l1.pop(1)
print(ret)
print(l1)

# remove 移除列表中某个值的第一个匹配项,无返回值
l1.remove('alex')
print(l1)

# clear 清空列表,无返回值
l1.clear()
print(l1)

# del 按照索引,不返回删除值
del l1[1]
print(l1)
# 按照切片(步长)
del l1[:2]
print(l1)
del l1[::2]
print(l1)


# 3、改

# 按照索引
l1[1] = 'SB'
print(l1)
# 按照切片(步长)
l1[:2] = 'fsdjksdhfjsdf'
l1[::2] = 'abc' # 加上步长一定要一一对应。
l1[::2] = ['alex', [12,3], 'c'] # 加上步长一定要一一对应。
print(l1)

# 4 、查
# 索引,切片,切片(步长)
for i in l1:
    print(i)


# 5、其他方法:
print(l1.index('太白')) 通过元素查索引
len()
print(len(l1))

# count 计算个数
print(l1.count('wusir'))

#  排序 翻转
l2 = [2, 3, 5, 1, 9, 8, 7, 6]
l2.sort()  # 从小到大排序
l2.sort(reverse=True)  # 从大到小排序
l2.reverse()  # 翻转

# 大小写
l1 = ['alex', 'wusir', [1,'taibai'],'LiLy']
l1[1] = l1[1].upper() # 'wusir'全部大写
print(l1)

l1[3] = l1[3].lower() # 'LiLy' # 全部小写
print(l1)

l1[-1][-1] = l1[-1][-1].capitalize() # 'taibai' # 首字母大写
print(l1)
print(l1[-1][-1])

3. 列表的嵌套。

l1 = ['alex', 'wusir', 'wusir', 100, '女神']
for i in range(len(l1)):
    print(i)  # 利用for range 打印出列表的索引。

六、 dict

  键值对   Key:value 字典的key唯一重复,可以存储大量的关系型数据。
  字典3.5版本包括3.5之前是无序的。3.6之后有序。

     

  字典的key:str,int,(bool值,tuple不常用) 不可变的数据类型(可哈希的)
  字典的value:任意数据类型。

dic = {'name_list':['张三', '李四'],
       'alex': {'sex':'','爱好': '非男'},
       }

print(dic)

1. 增删改查  以及其他操作

dic = {'name': 'TaiBai', 'age': 25, 'sex': '',}
# 1、增
# 按照键值对  有则改之,无则添加
dic['job'] = 'Teacher'
dic['name'] = 'alex'


# setdefault
dic.setdefault('job')  # 无则添加,有则不变。返回值是这个键值对的值
dic.setdefault('job', 'Teacher')
dic.setdefault('name', 'alex')
print(dic)


# 2、删
ret = dic.pop('name')
print(ret) # 返回值是删除的值
print(dic)


# 3、清空
dic.clear()
print(dic)

del
del dic['name']
print(dic)


# 4、改
dic['name'] = 'alex'
print(dic)

dic = {"name":"jin", "age":18,"sex":"male"}
dic2 = {"name":"alex", "weight":75}
dic2.update(dic)  # 将dic 的所有键值对覆盖并添加到dic2中。dic不变。
print(dic)
print(dic2)

# 5、查
print(dic['name'])
print(dic['name1'])

# 查--get 返回指定键的值,如果值不在字典中返回默认值
print(dic.get('name'))
print(dic.get('name1'))
print(dic.get('name1', '没有此键'))

# 类似于列表的容器
print(dic.keys())
for i in dic.keys():
    print(i)
print(list(dic.keys()))
print(dic.values())
print(list(dic.items()))

a, b, c = 1, 2, 3
print(a, b, c)
a, b, c = [1, 2, 3]
print(a, b, c)

a = 10
b = 100
a, b = b, a
print(a, b)

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

# 嵌套
dic = {'name': 'alex',
       'name_list': ['wusir', 'taibai'],
       1: {'name': '日天'}}

# 改变指定值
# 将wusir全部变成大写
print(dic['name_list'][0])
dic['name_list'][0] = dic['name_list'][0].upper()
print(dic)
# 将日天 改成 泰迪。
dic[1]['name'] = '泰迪'
print(dic)

七  、基础数据类型补充

# tuple 元祖中如果只有一个元素且没有逗号,则他不是元组而是该元素对应的类型。
tu1 = (1)
print(tu1, type(tu1))
tu2 = ('alex')
print(tu2, type(tu2))
tu3 = ([1, 2, 3])
print(tu3, type(tu3))

tu1 = (1,)  # 如果只有一个元素,则需加逗号才能成为一个元组
print(tu1, type(tu1))


dict
dic = dict.fromkeys('abc', 'alex')
print(dic)


# == 比较的是两边的数值是否相同
# is 比较的是内存地址是否相同
# id 查询的是内存地址


# 在 正向 循环一个list中,如果改变的列表的大小,那么结果可以和你预想的不一样。
l1 = [11, 22, 33, 44, 55, 66]
# 将索引为奇数位置的元素删除。
del l1[1::2]
print(l1)

# for循环。
for ind in range(len(l1)):
    print(ind, l1)
    if ind % 2 == 1:
        del l1[ind]
    print(ind, l1)
print(l1)

# 倒叙删除
for ind in range(len(l1)-1, -1, -1):
    if ind % 2 == 1:
        del l1[ind]
print(l1)


dic = {'k1': 'v1', 'k2': 'v2', 'k3': 'v3', 'name': 'alex'}
# 将字典中的key键含有'k'元素的所有键值对删除。
# 在循环一个字典时,不能改变该字典的大小。
for key in dic:
    if 'k' in key:
        del dic[key]
l1 = []
for key in dic:
    if 'k' in key:
        l1.append(key)
print(l1)
for key in l1:
    del dic[key]
print(dic)

课后练习

'''
1、有变量name = "aleX leNb" 完成如下操作:
1)  移除 name 变量对应的值两边的空格,并输出处理结果
'''
name = "   aleX leNb   "
print(name.strip())
'''
 2)  移除name变量左边的"al"并输出处理结果
'''
# 第一种方法
name = "aleX leNb"
name = list(name)  # 先将字符串转换为列表形式
del name[:2]  # 通过操作列表,删除前两个元素
print(''.join(name))  # 最后,将元素重新连接,组成新的字符串

# 第二种方法
name = "aleX leNb"
print(name.lstrip('al'))  # 直接用lstrip命令

'''
3)  移除name变量右面的"Nb",并输出处理结果
'''
# 第一种方法
name = "aleX leNb"
name = list(name)  # 先将字符串转换为列表形式
del name[-1:-3:-1]  # 通过操作列表,删除最后两个元素
print(''.join(name))


# 第二种方法
name = "aleX leNb"
print(name.rstrip('Nb'))
'''
 4)  移除name变量开头的a"与最后的"b",并输出处理结果
'''
name = "aleX leNb"
name = name.lstrip('a')
name = name.rstrip('b')
print(name)

'''
 5)  判断 name 变量是否以 "al" 开头,并输出结果
'''
name = "aleX leNb"
if name.startswith('al'):
    print('该字符串是以al开头')
else:
    print('该字符串不是以al开头')

'''
6)  判断name变量是否以"Nb"结尾,并输出结果
'''
name = "aleX leNb"
if name.endswith('Nb'):
    print('该字符串是以Nb结尾')
else:
    print('该字符串不是以Nb结尾')
'''
 7)  将 name 变量对应的值中的 所有的"l" 替换为 "p",并输出结果
'''
name = "aleX leNb"
print(name.replace('l', 'p'))
'''
 8)  将name变量对应的值中的第一个"l"替换成"p",并输出结果
'''
# 第一种
name = "aleX leNb"
name = list(name)
name[1] = 'p'
print(''.join(name))

# 第二种方法
name = "aleX leNb"
print(name.replace('l', 'p', 1))

'''
 9)  将 name 变量对应的值根据所有的"l" 分割,并输出结果。
'''
name = "aleX leNb"
print(name.split('l'))

'''
 10) 将name变量对应的值根据第一个"l"分割,并输出结果。
'''
name = "aleX leNb"
print(name.split('l', 1))
'''
 11) 将 name 变量对应的值变大写,并输出结果
'''
name = "aleX leNb"
print(name.upper())

'''
 12) 将 name 变量对应的值变小写,并输出结果
'''
name = "aleX leNb"
print(name.lower())


'''
 13) 将name变量对应的值首字母"a"大写,并输出结果
     将name变量对应的值首字母"a"和"l"大写,并输出结果
'''
name = "aleX leNb"
print(name.capitalize())  # 只有a大写

name = "aleX leNb"
print(name.title())  # a和l大写

'''
 14) 判断name变量对应的值字母"l"出现几次,并输出结果
'''
namx

'''
 15) 如果判断name变量对应的值前四位"l"出现几次,并输出结果
'''
name = "alelX leNb"
print(name.count('l', 0, 3))

'''
 16) 从name变量对应的值中找到"N"对应的索引(如果找不到则报错),并输出结果
'''
name = "aleX leNb"
print(name.index('N'))
'''
 17) 从name变量对应的值中找到"N"对应的索引(如果找不到则返回-1)输出结果
'''
name = "aleX leNb"
print(name.find('N'))

'''
 18) 从name变量对应的值中找到对应的索引,并输出结果
'''
name = "aleX leNb"
name = name.find("X le")
print(name)
'''
 19) 请输出 name 变量对应的值的第 2 个字符?
'''
name = "aleX leNb"
print(name[1])
'''
 20) 请输出 name 变量对应的值的前 3 个字符?
'''
name = "aleX leNb"
print(name[:3])

'''
 21) 请输出 name 变量对应的值的后 2 个字符?
'''
name = "aleX leNb"
print(name[-1:-3:-1])
'''
 22) 请输出 name 变量对应的值中 "e" 所在索引位置?
'''
name = "aleX leNb"
x = 0
for i in name:
    if i == 'e':
        print(x)
    x += 1

'''
2、有字符串s = "123a4b5c"
1)通过对s切片形成新的字符串s1,s1 = "123"
'''
s = "123a4b5c"
print(s[:3])
'''
2)通过对s切片形成新的字符串s2,s2 = "a4b"
'''
s = "123a4b5c"
print(s[3:6])
'''
3)通过对s切片形成新的字符串s3,s3 = "1345"
'''
s = "123a4b5c"
print(s[::2])
'''
4)通过对s切片形成字符串s4,s4 = "2ab"
'''
s = "123a4b5c"
print(s[1:-2:2])
'''
5)通过对s切片形成字符串s5,s5 = "c"
'''
s = "123a4b5c"
print(s[-1])
'''
6)通过对s切片形成字符串s6,s6 = "ba2"
'''
s = "123a4b5c"
print(s[-3:0:-2])
'''
3、使用while或for循环分别打印字符串s="asdfer"中每个元素。
'''
s = "asdfer"
for i in s:
    print(i)
'''
4、使用for循环对s="asdfer"进行循环,但是每次打印的内容都是"asdfer"。
'''
s="asdfer"
for i in s:
    print(s)
'''
5、使用for循环对s="abcdefg"进行循环,每次打印的内容是每个字符加上sb, 例如:asb, bsb,csb,...gsb。
'''
s="asdfer"
for i in s:
    print(i + 'sb')
'''
6、使用for循环对s="321"进行循环,打印的内容依次是:"倒计时3秒","倒计时2秒","倒计时1秒","出发!"。
'''
s = "321"
for i in s:
    print('倒计时%d秒' % int(i))
print('出发')
'''
7、实现一个整数加法计算器(两个数相加):
    如:content = input("请输入内容:") 用户输入:5+9或5+ 9或5 + 9,然后进行分割再进行计算。
'''
content = input("请输入内容:")
content = content.split('+')
content[0].strip()
content[1].strip()
print(int(content[0])+int(content[1]))

'''
8、升级题:实现一个整数加法计算器(多个数相加):
如:content = input("请输入内容:") 用户输入:5+9+6 +12+  13,然后进行分割再进行计算。
'''
content = input("请输入内容:")
content = content.split('+')
i = 0
sum = 0
content[i] = content[i].strip()
for x in content:
    sum += int(content[i])
    i += 1
print(sum)

'''
9、测量用户输入的内容的个数(以个位数为单位)。
 如:content = input("请输入内容:")   # 如fhdal234slfh98769fjdla
'''
content = input("请输入内容:")
print(len(content))

'''
10、写代码,完成下列需求:
用户可持续输入(用while循环),用户使用的情况:
输入A,则显示走大路回家,然后在让用户进一步选择
是选择公交车,还是步行?
选择公交车,显示10分钟到家,并退出整个程序。
选择步行,显示20分钟到家,并退出整个程序。
输入B,则显示走小路回家,并退出整个程序
输入C,则显示绕道回家,然后在让用户进一步选择:
是选择游戏厅玩会,还是网吧?
选择游戏厅,则显示 ‘一个半小时到家,爸爸在家,拿棍等你。’并让其重新输入A,B,C选项。
选择网吧,则显示‘两个小时到家,妈妈已做好了战斗准备。’并让其重新输入A,B,C选
'''
while 1:
    msg = input('请输入 A/B/C:')
    if msg.upper() == 'A':
        print('大路')
        msg1 = input('公交or不行? G/B')
        if msg1.upper() == 'G':
            print('10分钟到家')
        else:
            print('20分钟')
        break
    elif msg.upper() == 'B':
        print('小路回家')
        break
    elif msg.upper() == 'C':
        print('绕道回家')
        msg2 = input('游戏厅or网吧  Y/W')
        if msg2.upper() == 'Y':
            print('一个半小时到家,爸爸在家,拿棍等你')
        elif msg2.upper() == 'W':
            print('两个小时到家,妈妈已做好了战斗准备')
    else:
        print('输入错误啦,重选')
        
'''
11、写代码:计算 1 - 2 + 3 ... + 99 中除了88以外所有数的总和?
'''
n = 0
sum = 0
while n < 100:
    n += 1
    if n % 2 == 1:
        sum += n
    if n % 2 == 0:
        sum -= n
    if n == 88:
        continue
print(sum)


'''
16、制作趣味模板程序需求:等待⽤户输⼊名字、地点、爱好,根据⽤户的名字和爱好进⾏任意现实
如:敬爱可亲的xxx,最喜欢在xxx地⽅⼲xxx
'''
name = input('请输入姓名:')
age = input('请输入年龄:')
hobby = input('请输入爱好:')
msg = '我叫%s,今年%d岁,爱好%s。' % (name, int(age), hobby )
print(msg)
'''
17、等待⽤户输⼊内容,检测⽤户输⼊内容中是否包含敏感字符?
如果存在敏感字符提示“存在敏感字符请重新输⼊”,并允许⽤户重新输⼊并打印。敏感字符:“⼩粉嫩”、“⼤铁锤”
'''
msg = ['大傻子', '混蛋', '白痴', '']
while 1:
    msg1 = input('请输入内容:')
    if msg1 in msg:
        print('您输入的内容中包含敏感词汇:' + msg1)
    else:
        break
print('输入很规范,您输入的内容是:' + msg1)

'''
18、写代码,有如下列表,按照要求实现每一个功能
li = ["alex", "WuSir", "ritian", "barry", "wenzhou"]
1)计算列表的长度并输出
'''
li = ["alex", "WuSir", "ritian", "barry", "wenzhou"]
print(len(li))
'''
2)列表中追加元素"seven",并输出添加后的列表
'''
li = ["alex", "WuSir", "ritian", "barry", "wenzhou"]
li.append('seven')
print(li)
'''
3)请在列表的第1个位置插入元素"Tony",并输出添加后的列表
'''
li = ["alex", "WuSir", "ritian", "barry", "wenzhou"]
li.insert(0, 'Tony')
print(li)
'''
4)请修改列表第2个位置的元素为"Kelly",并输出修改后的列表
'''
li = ["alex", "WuSir", "ritian", "barry", "wenzhou"]
li[1] = "Kelly"
print(li)
'''
5)请将列表l2=[1,"a",3,4,"heart"]的每一个元素添加到列表li中,一行代码实现,不允许循环添加。
'''
li = ["alex", "WuSir", "ritian", "barry", "wenzhou"]
li.extend([1, "a", 3, 4, 'heart'])
'''
6)请将字符串s = "qwert"的每一个元素添加到列表li中,一行代码实现,不允许循环添加
'''
li = ["alex", "WuSir", "ritian", "barry", "wenzhou"]
li.extend("qwert")
'''
7)请给列表添加元素"eric",并输出添加后的列表
'''
li = ["alex", "WuSir", "ritian", "barry", "wenzhou"]
li.append("eric")
print(li)
'''
8)请删除列表中的第2个元素,并输出删除的元素和删除元素后的列表
'''
li = ["alex", "WuSir", "ritian", "barry", "wenzhou"]
li1 = li.pop(2)
print(li1)
print(li)
'''
9)请删除列表中的第2至4个元素,并输出删除元素后的列表
'''
li = ["alex", "WuSir", "ritian", "barry", "wenzhou"]
del li[2:5]
print(li)
'''
10)请将列表所有得元素反转,并输出反转后的列表
'''
li = ["alex", "WuSir", "ritian", "barry", "wenzhou"]
li.reverse()
print(li)
'''
11)请计算出"alex"元素在列表li中出现的次数,并输出该次数。
'''
li = ["alex", "WuSir", "ritian", "barry", "wenzhou"]
print(li.count('alex'))
'''
19、写代码,有如下列表,利用切片实现每一个功能
    li = [1, 3, 2, "a", 4, "b", 5,"c"]
1)通过对li列表的切片形成新的列表l1,l1 = [1,3,2]
'''
li = [1, 3, 2, "a", 4, "b", 5,"c"]
l2 = li[0:3]
'''
2)通过对li列表的切片形成新的列表l2,l2 = ["a",4,"b"]
'''
li = [1, 3, 2, "a", 4, "b", 5,"c"]
l2 = li[3:6]
'''
3)通过对li列表的切片形成新的列表l3,l3 = ["1,2,4,5]
'''
li = [1, 3, 2, "a", 4, "b", 5,"c"]
l3 = li[::2]
'''
4)通过对li列表的切片形成新的列表l4,l4 = [3,"a","b"]
'''
li = [1, 3, 2, "a", 4, "b", 5,"c"]
l4 = li[1:-1:2]
'''
5)通过对li列表的切片形成新的列表l5,l5 = ["c"]
'''
li = [1, 3, 2, "a", 4, "b", 5,"c"]
l5 = li[-1]
'''
6)通过对li列表的切片形成新的列表l6,l6 = ["b","a",3]
'''
li = [1, 3, 2, "a", 4, "b", 5,"c"]
l6 = li[-3:0:-2]
'''
20、写代码,有如下列表,按照要求实现每一个功能。
lis = [2, 3, "k", ["qwe", 20, ["k1", ["tt", 3, "1"]], 89], "ab", "adv"]
1)将列表lis中的"tt"变成大写(用两种方式)。
'''
# 方式一:
lis = [2, 3, "k", ["qwe", 20, ["k1", ["tt", 3, "1"]], 89], "ab", "adv"]
lis[3][2][1][0] = lis[3][2][1][0].upper()
print(lis)

# 方式二:
lis = [2, 3, "k", ["qwe", 20, ["k1", ["tt", 3, "1"]], 89], "ab", "adv"]
lis[3][2][1][0] = lis[3][2][1][0].replace('tt', 'TT')
print(lis)

'''
2)将列表中的数字3变成字符串"100"(用两种方式)
'''
# 方式一:
lis = [2, 3, "k", ["qwe", 20, ["k1", ["tt", 3, "1"]], 89], "ab", "adv"]
lis[1] = '100'
lis[3][2][1][1] = '100'
print(lis)

# 方式二:
lis = [2, 3, "k", ["qwe", 20, ["k1", ["tt", 3, "1"]], 89], "ab", "adv"]
lis[1] = str(lis[1]).replace('3', '100')
lis[3][2][1][1] = str(lis[3][2][1][1]).replace('3', '100')
print(lis)

'''
3)将列表中的字符串"1"变成数字101(用两种方式)
'''
# 方式一:
lis = [2, 3, "k", ["qwe", 20, ["k1", ["tt", 3, "1"]], 89], "ab", "adv"]
lis[1] = '100'
lis[3][2][1][2] = int(101)
print(lis)

# 方式二:
lis = [2, 3, "k", ["qwe", 20, ["k1", ["tt", 3, "1"]], 89], "ab", "adv"]
lis[3][2][1][2] = int(lis[3][2][1][2].replace('1', '101'))
print(lis)

'''
21、请用代码实现:
 li = ["alex", "eric", "rain"]
 利用下划线将列表的每一个元素拼接成字符串"alex_eric_rain"
'''
li = ["alex", "eric", "rain"]
print('_'.join(li))

'''
22、利用for循环和range打印出下面列表的索引。
 li = ["alex", "WuSir", "ritian", "barry", "wenzhou"]
'''
li = ["alex", "WuSir", "ritian", "barry", "wenzhou"]
for i in range(len(li)):
    print(i)
'''
23、利用for循环和range找出100以内所有的偶数并将这些偶数插入到一个新列表中
'''
lis = []
for i in range(100):
    if i%2 == 0:
        lis.append(i)
print(lis)

'''
24、利用for循环和range 找出50以内能被3整除的数,并将这些数插入到一个新列表中
'''
lis = []
for i in range(50):
    if i % 3 == 0:
        lis.append(i)
print(lis)

'''
25、利用for循环和range从100~1,倒序打印。
'''
for i in range(100, 0, -1):
    print(i)
'''
26、利用for循环和range从100~10,倒序将所有的偶数添加到一个新列表中,
    然后对列表的元素进行筛选,将能被4整除的数留下来。
'''
li = []
for i in range(100, 9, -1):
    if i % 4 == 0:
        li.append(i)
print(li)

'''
26、利用for循环和range,将1-30的数字一次添加到一个列表中,并循环这个列表,将能被3整除的数改成*
'''
li = []
x = 0
for i in range(1, 31):
    li.append(i)
    if i % 3 == 0:
        li[x] = '*'
    x += 1
print(li)
'''
27、查找列表li中的元素,移除每个元素的空格,并找出以"A"或者"a"开头,
    并以"c"结尾的所有元素,并添加到一个新列表中,最后循环打印这个新列表。
'''
l2 = []
li = ["TaiBai ", "alexC", "AbC ", "egon", " riTiAn", "WuSir", "  aqc"]
for i in li:
    if (i.strip().startswith('a') or i.strip().startswith('A')) and i.strip().endswith('c'):
        l2.append(i)
for i in l2:
    print(i)
'''
28、开发敏感词语过滤程序,提示用户输入评论内容,如果用户输入的内容中包含特殊的字符:
    敏感词列表 li = ["苍老师", "东京热", "武藤兰", "波多野结衣"]
    则将用户输入的内容中的敏感词汇替换成等长度的*(苍老师就替换***),
    并添加到一个列表中;如果用户输入的内容没有敏感词汇,则直接添加到上述的列表中。
'''
li = ["苍老师", "东京热", "武藤兰", "波多野结衣"]
l2 = []
msg = input('请输入内容:')
for i in li:
    if i in msg:
        msg = msg.replace(i, '*'*len(i))  # 第二个* 代表乘以的意思
l2.append(i)
print(msg)
'''
29、有如下变量(tu是个元祖),请实现要求的功能
    tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11,22,33)}, 44])
    a. 讲述元祖的特性
'''
# 数据可以被查询,但不能被修改
'''
    b. 请问tu变量中的第一个元素 "alex" 是否可被修改?
'''
# 不能
'''
    c. 请问tu变量中的"k2"对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素 "Seven"
'''
# "k2"对应的值是 列表
# 可以被修改
tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11, 22, 33)}, 44])
tu2 = tu[1][2]['k2']
tu2 = tu2.append('Seven')
print(tu)

'''
    d. 请问tu变量中的"k3"对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素 "Seven"
'''
# "k3"对应的值是 元祖
# 不可被修改

'''
30、字典dic,dic = {'k1': "v1", "k2": "v2", "k3": [11,22,33]}
    a. 请循环输出所有的key
'''
# 第一种方法:
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
for i in dic:
    print(i)

# 第二种方法:
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
for i in dic.keys():
    print(i)
'''
    b. 请循环输出所有的value
'''
# 第一种方法:
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
for i in dic:
    print(dic[i])

# 第二种方法:
for i in dic.values():
    print(i)

'''
    c. 请循环输出所有的key和value
'''
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
for i in dic.items():
    print(i)

'''
    d. 请在字典中添加一个键值对,"k4": "v4",输出添加后的字典
'''
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
dic['k4'] = 'v4'
print(dic)

'''
    e. 请在修改字典中 "k1" 对应的值为 "alex",输出修改后的字典
'''
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
dic['k1'] = 'alex'
print(dic)
'''
    f. 请在k3对应的值中追加一个元素 44,输出修改后的字典
'''
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
dic['k3'].append(44)
print(dic)

'''
    g. 请在k3对应的值的第 1 个位置插入个元素 18,输出修改后的字典
'''
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
dic['k3'].insert(0, 18)
print(dic)

'''
31.av_catalog = {
    "欧美":{
        "www.youporn.com": ["很多免费的,世界最大的","质量一般"],
        "www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"],
        "letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"],
        "x-art.com":["质量很高,真的很高","全部收费,屌丝请绕过"]
    },
    "日韩":{
    "tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","verygood"]
    },
        "大陆":{
    "1024":["全部免费,真好,好人一生平安","服务器在国外,慢"]
    }
}
'''

'''
a,给此 ["很多免费的,世界最大的","质量一般"]列表第二个位置插入一个  元素:'量很大'。
'''
# av_catalog['欧美']['www.youporn.com'].insert(1, '量很大')

'''
b,将此 ["质量很高,真的很高","全部收费,屌丝请绕过"]列表的 "全部收费,屌丝请绕过" 删除。

'''
# 方法一
# av_catalog['欧美']['x-art.com'].remove('全部收费,屌丝请绕过')

# 方法二
# del av_catalog['欧美']['x-art.com'][1]

# 方法三
# av_catalog['欧美']['x-art.com'].pop(1)

'''
d,将此["质量怎样不清楚,个人已经不喜欢日韩范了","verygood"]列表的 "verygood"全部变成大写。

'''
# av_catalog['日韩']['tokyo-hot'][1] = av_catalog['日韩']['tokyo-hot'][1].upper()

'''
e,给 '大陆' 对应的字典添加一个键值对 '1048' :['一天就封了']

'''
# av_catalog['大陆']['1048'] = '一天就封了'

'''
f,删除此"letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"]键值对。

'''
# 方法一
# av_catalog['欧美'].pop('letmedothistoyou.com')

# 方法二
# del av_catalog['欧美']['letmedothistoyou.com']

'''
g,给此["全部免费,真好,好人一生平安","服务器在国外,慢"]列表的第一个元素,加上一句话:'可以爬下来'

'''
# av_catalog['大陆']['1024'][1] = '可以爬下来,服务器在国外,慢'

'''
32、有字符串"k:1|k1:2|k2:3|k3:4" 处理成字典 {'k':1,'k1':2....}
'''
dic = {}
s = 'k:1|k1:2|k2:3|k3:4'
s = s.split('|')
for i in s:
    i = i.split(':')
    dic[i[0]] = int(i[1])
print(dic)
'''
33、元素分类
    有如下值li= [11,22,33,44,55,66,77,88,99,90],
    将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
    即: {'k1': 大于66的所有值列表, 'k2': 小于66的所有值列表}
'''
li = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90]
dic = {'k1': [], 'k2': []}
for i in li:
    if i > 66:
        dic['k1'].append(i)
    if i < 66:
        dic['k2'].append(i)
print(dic)


'''
作业:购物车
1. 用户先给自己的账户充钱:比如先充3000元。
2. 页面显示 序号 + 商品名称 + 商品价格,如:
    1 电脑 1999
    2 鼠标 10
    …
    n 购物车结算
3. 用户输入选择的商品序号,然后打印商品名称及商品价格,并将此商品,添加到购物车,用户还可继续添加商品。
4. 如果用户输入的商品序号有误,则提示输入有误,并重新输入。
5. 用户输入n为购物车结算,依次显示用户购物车里面的商品,数量及单价,
   若充值的钱数不足,则让用户删除某商品,直至可以购买,若充值的钱数充足,则可以直接购买。
6. 用户输入Q或者q退出程序。
7. 退出程序之后,依次显示用户购买的商品,数量,单价,以及此次共消费多少钱,账户余额多少。
'''

# 定义商品信息
shoping = {'1': {'name': '电脑', 'price': 1999},  # 选择商品编号的时候,输入的是字符串,所以此处编号用str型
           '2': {'name': '鼠标', 'price': 10},
           '3': {'name': '键盘', 'price': 20},
           }
# 定义购物车信息
my_car = {
    'accounts_money': 0,  # 账户余额
    'shopping_cart': {},  # 购物车内的商品,因为商品有多种,每种商品有价格和名称,所以用dic型
}

# 充值
while 1:
    money = input('请先充值:').strip()  # 去除输入时的左右空格等
    if money.isdigit():  # 判断输入的金额是否是数字
        my_car['accounts_money'] = int(money)  # 将充值金额传给账户余额
        print('成功充值%s元' % money)
        break
    else:
        print('充值失败,请输入正确的金额')

while 1:
    # 循环打印购物车商品信息,共用户选择添加到购物车
    for i in shoping:
        print(i, shoping[i]['name'], shoping[i]['price'])
    
    num = input('请输入商品序号,将会添加至购物车,退出请输入Q/q,结算请输入n:')
    if num in shoping:  # 判断输入的商品序号是否在商品信息内
        # 记录购物车物品数量
        count = my_car['shopping_cart'].setdefault(num, 0)  # setdefault表示新建一个键值对(x, 0),并将value的值会返给count
        my_car['shopping_cart'][num] = count + 1  # 用户每次输入商品序号,购物车中该商品的数量+1
    
    # 购物车结算
    elif num.lower() == 'n':
        total_money = 0  # 初始化购物车的总金额
        for i in my_car['shopping_cart']:
            # 计算购物车内商品的总金额,每循环一次商品,金额都会在原来的基础上累加
            total_money += shoping[i]['price'] * my_car['shopping_cart'][i]  # 总金额 = 商品单价*商品数量
        
        # 判断购物车中的金额是否超出当前账户余额
        if total_money > my_car['accounts_money']:  # 如果账户余额>购物车中的总金额
            for i in my_car['shopping_cart']:  # 判断哪些商品在购物车中
                # 打印购物车商品信息,序号、商品名称、商品单价、商品数量,供用户删除
                print(i, shoping[i]['name'], shoping[i]['price'], my_car['shopping_cart'][i])
            del_num = input('余额不足,请删除购物车任意商品:')
            
            # 判断要删除的商品是否在购物车内
            if del_num in my_car['shopping_cart']:
                my_car['shopping_cart'][del_num] -= 1  # 购物车内输入的编号对应的商品数量-1
                
                # 如果购物车内该商品只剩下一件,则直接删除该商品
                if my_car['shopping_cart'][del_num] == 0:
                    my_car['shopping_cart'].pop(del_num)
        
        else:  # 如果账户余额<=购物车中的总金额
            print('购物车商品如下:')
            # 打印当前购物车剩余商品信息,商品名称、商品单价、商品数量
            for i in my_car['shopping_cart']:
                print(shoping[i]['name'], shoping[i]['price'], my_car['shopping_cart'][i])
            # 购物完成后,计算当前账户余额
            my_car['accounts_money'] -= total_money
            print('本次共消费%s元,账户余额%s元' % (total_money, my_car['accounts_money']))
            break
    
    # 退出程序
    elif num.upper() == 'Q':
        print('您已退出购物车')
        break
    else:
        print('输入错误,请重新输入')
day2练习和作业--初级购物车
原文地址:https://www.cnblogs.com/caoyinshan/p/9883495.html