您的位置:首页 > 编程语言 > Python开发

Python全栈问答小技巧_1

2017-02-13 14:13 351 查看
                        Python全栈测试题

                                          作者:尹正杰

声明:答案如有偏差,欢迎指正!欢迎加入高级运维工程师之路:598432640

本文答题用的Python版本是:Python 3.5.2,请知晓!

1、执行 Python 脚本的两种方式

A.在命令行中执行

  执行方式:python 文件名称.py #这里要注意的是你是否有使用python命令的权限。( 举例子:python test.py 或者./test.py)

B.在python解释器中执行

  这个需要我们在命令行中敲击"python",然后会进入python解释器,我们可以通过import或者form ... import的形式导入python脚本,并调用。

2、简述位、字节的关系

  位:又称“bit”,是二进制位,它是计算机存储信息的基本单位(因为cpu只认识“0”和”1”),代表1个二进制数位,其值为0或1.

  字节:8个连续的二进制位被当做一个字节,可以存放一个西文字符的编码。

3、简述 ascii、unicode、utf-­8、gbk 的关系

  ascii编码:它使用一个字节编码(8个连续的二进制位被当作一个字节),所以它的范围基本是只有英文字母,数字和一些特殊符号,只有256个字符;

  unicode编码:它被称为“万国码”,也就是说它包含了任何国家的编码,(比如“utf-8”是无法直接转成“gbk”的,但是我们可以先将"utf-8"先转成unicode,然后再转成“gbk”);

  utf-­8编码:它是对Unicode编码的压缩和优化,用了1-6个字节编码的Unicode字节(他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存{中国的汉字就是用3个字节表示一个汉字的哟}...),用在网页上可以同一页面显示中文简体繁体及其它语言(如:英文,日文,韩文等等);

  gbk编码:它是只用来编码汉字的,GBK全称<<汉字内码扩展规范>>,使用双字节编码;

4、请写出 “尹正杰” 分别用 utf-­‐8 和 gbk 编码所占的位数

我执行的环境是python3.6执行的以下代码:
name = "尹正杰"    #定义一个变量
gbk = name.encode("gbk")   #将他转码成“gbk”
utf_8 = name.encode("utf-8")  #将他转码成“utf-8”
print(gbk)
print(utf_8)

打印结果如下:
b'\xd2\xfc\xd5\xfd\xbd\xdc'  #这就是gbk用2个字节存数据的证据。
b'\xe5\xb0\xb9\xe6\xad\xa3\xe6\x9d\xb0' #这就是utf-8用3个字节存数据的证据哟


5、Pyhton 单行注释和多行注释分别用什么?

  

1 #name = "尹正杰"     #单行注释:用“#”号注释
2
3 #多行注释:用单个连续的三个单引号包裹其中的内容均不生效。
4 '''gbk = name.encode("gbk")
5 utf_8 = name.encode("utf-8")
6 print(gbk)
7 print(utf_8)
8 '''
9 print("尹正杰")
10
11 代码执行结果:
12 尹正杰  #说明上面被单行或者多行注释的都没有生效!


6、声明变量注意事项有那些?

变量定义的规则:

  1>.变量名只能是 字母、数字或下划线的任意组合

  2>.变量名的第一个字符不能是数字

  3>.以下关键字不能声明为变量名
  ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']

7.如何查看变量在内存中的地址?

1 #我们可以先定义一个变量,然后用python的内置函数来帮我们返回这个变量的内存地址。
2 name = "尹正杰"
3 print(id(name))
4
5 代码执行结果:
6 13838816


8.执行 Python 程序时,自动生成的 .pyc 文件的作用是什么?

在说这个问题之前,我们先来说两个概念,PyCodeObject和pyc文件。

  我们在硬盘上看到的pyc自然不必多说,而其实PyCodeObject则是Python编译器真正编译成的结果。我们先简单知道就可以了,继续向下看:

  1>.当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中;

  2>.当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程;

  3>.当然Python解释器会自动对比pyc文件和python程序的修改时间,如果时间一致就直接加载pyc文件,否则还是会重新加载程序,变异后生成PyCodeObject对象,然后生成新的pyc文件哟!

  所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。

9.小试牛刀:

  a.实现用户输入用户名和密码,当用户名为 “yinzhengjie”且 密码为 “123”时,显示登陆成功,否则登陆失败!

1 #!/usr/bin/env python
2 #_*_coding:utf-8_*_
3 #@author :yinzhengjie
4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
5 #EMAIL:y1053419035@qq.com
6 username = input("Please enter your username:>>>")
7 password = input("Please enter your password:>>>")
8 if username == "yinzhengjie" and password == "123":
9     print("登陆成功")
10 else:
11     print("登陆失败")
12
13 #成功测试结果如下:
14 Please enter your username:>>>yinzhengjie
15 Please enter your password:>>>123
16 登陆成功
17 #失败测试结果如下:
18 Please enter your username:>>>alex
19 Please enter your password:>>>123
20 登陆失败


   b.实现用户输入用户名和密码,当用户名为 “yinzhengjie”且 密码为 “123”时,显示登陆成功,否则登陆失败,失败时允许重复输入三次 :

#!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com
counts = 0 #定义一个计数器
while counts < 3:
username = input("Please enter your username:>>>")
password = input("Please enter your password:>>>")
if username == "yinzhengjie" and password == "123":
print("登陆成功")
break
else:
print("登陆失败")
counts += 1 #当用户输入一次用户名称或者密码的时候让这个计数器自加“1”

#验证成功测试结果:
Please enter your username:>>>yinzhengjie
Please enter your password:>>>123
登陆成功
Process finished with exit code 0

#验证失败测试结果
Please enter your username:>>>yinzheng
Please enter your password:>>>1231
登陆失败
Please enter your username:>>>jie
Please enter your password:>>>3213
登陆失败
Please enter your username:>>>yinzhengjie
Please enter your password:>>>jie
登陆失败
Process finished with exit code 0


c.实现用户输入用户名和密码,当用户名为 “yinzhengjie” 或 “alex” 且密码为 “123” 时,显示登陆成功,否则登陆失败,失败时允许重复输入三次

#!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com
counts = 0 #定义一个计数器
while counts < 3:
username = input("Please enter your username:>>>")
password = input("Please enter your password:>>>")
if username == "yinzhengjie"or username == "alex" and password == "123":
print("登陆成功")
break
else:
print("登陆失败")
counts += 1 #当用户输入一次用户名称或者密码的时候让这个计数器自加“1”


10.while与for循环的练习

  a. 使用 while 循环实现输出 2 -­ 3 + 4 ­‐ 5 + ... + 100 的和:

1 #!/usr/bin/env python
2 #_*_coding:utf-8_*_
3 #@author :yinzhengjie
4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
5 #EMAIL:y1053419035@qq.com
6 total = 0 #定义一个存储总和的变量
7 i = 2  #定义起始值
8 while i <= 100:
9     if i % 2 == 0 : #判断当前的循环的数字是否是偶数
10         total += i
11     else:
12         total -= i
13     i += 1
14 print(total)


  b. 使用 for 循环和 range 实现输出 1 ‐ 2 + 3 ­‐ 4 + 5 ­‐ 6 ... + 99 的和 :

1 #!/usr/bin/env python
2 #_*_coding:utf-8_*_
3 #@author :yinzhengjie
4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
5 #EMAIL:y1053419035@qq.com
6 total = 0
7 for i in range(1,100): #表示循环的起始值是1,结束值是99。
8     if i % 2 == 0 :
9         total -= i
10     else:
11         total += i
12     i += 1
13 print(total)


   c. 使用 while 循环实现输出 1,2,3,4,5, 7,8,9, 11,12 :

1 #!/usr/bin/env python
2 #_*_coding:utf-8_*_
3 #@author :yinzhengjie
4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
5 #EMAIL:y1053419035@qq.com
6 count = 1
7 num_list = []  #定义一个空列表,用来存储我需要存储的数字
8 while count <= 12:
9     if count == 6 or count == 10:
10         count += 1
11         continue
12     num_list.append(count) #将符合的数字追加到列表中
13     count += 1
14 str_num = str(num_list).replace("[","").replace("]","") #将列表变成字符串处理,去掉两边的空格
15 print(str_num)


  d. 使用 while 循环实现输出 1-­‐100 内的所有奇数:

1 #!/usr/bin/env python
2 #_*_coding:utf-8_*_
3 #@author :yinzhengjie
4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
5 #EMAIL:y1053419035@qq.com
6 start_num = 1
7 while start_num <= 100:
8     if start_num % 2 != 0:
9         print(start_num)
10     start_num += 1


   e. 使用 while 循环实现输出 1-­‐100 内的所有偶数:

1 #!/usr/bin/env python
2 #_*_coding:utf-8_*_
3 #@author :yinzhengjie
4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
5 #EMAIL:y1053419035@qq.com
6 start_num = 1
7 while start_num <= 100:
8     if start_num % 2 == 0:
9         print(start_num)
10     start_num += 1


11.分别书写数字 5,10,32,7 的二进制表示 :

#!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com
'''十进制数字“5”用2进制表示方式:
5>>>对应二进制:00000101
10>>>对应二进制:00001010
32>>>对应二进制:00100000
7>>>对应二进制:00000111
'''


12.现有如下两个变量,请简述list_1,list_2,list_3的区别:

#!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com
list_1 = ["尹正杰","吴东航","alex"]  #定义一个列表
list_2 = ["尹正杰","吴东航","alex"]  #定义一个列表
list_3 = list_1  #拷贝一个列表
def print_list():
print(list_1)
print(list_2)
print(list_3)
print_list()
list_1.append("廖雪峰")  #对列表进行修改
print_list()

#执行代码结果:
['尹正杰', '吴东航', 'alex']
['尹正杰', '吴东航', 'alex']
['尹正杰', '吴东航', 'alex']
['尹正杰', '吴东航', 'alex', '廖雪峰']
['尹正杰', '吴东航', 'alex']
['尹正杰', '吴东航', 'alex', '廖雪峰']

#根据执行结果反推原理:
1>.list_1和list_2是单独开辟出来的2块内存;
2>.而list_3是浅拷贝list_1的执行结果,也就是说list_1和list_3同时指向了同一快内存地址!所以当我们更改list_1的内容时,list_3也会跟着变化!


13.现有如下两个变量,请简述 n1 和 n2 是什么关系?

#!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com
n1 =123
n2 =123
print(id(n1))  #打印对应变量的内存地址
print(id(n2))

#执行脚本结果如下:
492527792
492527792

#根据结果反推原理:
从结果我们可以看出来,n1和n2这2个变量都指向了同一块内存地址!这是python解释器内部优化的机制。


14.现有如下两个变量,请简述 n1 和 n2 是什么关系?

C:\Users\yzj>python
Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:01:18) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> n1 = 123456
>>> n2 = 123456
>>> id(n1)
10059344
>>> id(n2)
10059392
>>>

#从结果反推理论:
我们发现当我们将数字变大之后,发现n1和n2的内存地址发生了变化,这是为什么呢?经查阅资料发现python内部的优化机智只适用“-5~256”之间,在这以外的数字会重新开辟内存空间哟!


15.现有如下两个变量,请简述 n1 和 n2 是什么关系?

#!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com
n1 =12345678786
n2 = n1
print(id(n1))  #打印对应变量的内存地址
print(id(n2))

#指向脚本测试结果如下:
28531120
28531120

#根据结果反推理论
n1和n2指向同一个内存地址,说明赋值是赋给一个索引,内存地址也就一样


16.如有一下变量 n1 = 5,请使用 int 的提供的方法,得到该变量最少可以用多少个二进制位表示?

#!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com
n1 = 5
binary_length = n1.bit_length() #使用 int 的提供的方法,得到该变量最少可以用多少个二进制位表示
print(binary_length)

#脚本执行结果:
3


17.布尔值分别有什么?

  真True(非零为真)

  假False (为零)

18.阅读代码,请写出执行结果 :

#!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com
a = "yinzhengjie"
b = a.capitalize() #首字母大写
print(a)
print(b)

#代码执行结果如下:
yinzhengjie
Yinzhengjie


19.字符串方法练习,请按照要求实现每个功能 :

1 #!/usr/bin/env python
2 #_*_coding:utf-8_*_
3 #@author :yinzhengjie
4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
5 #EMAIL:y1053419035@qq.com
6 name = "    yinzhengJie"
7 #a.移除"name"变量对应的值两边的空格,并输入移除的的内容
8 print(name.strip())
9 #b.判断"name"变量对应的值是否以"al"开头,并输出结果
10 print(name.startswith("al"))
11 #c.判断"name"变量对应的值是否以"Jie"结尾,并输出结果
12 print(name.endswith("Jie"))
13 #d.将"name"变量对应的值中的“z”替换为“Z”,并输出结果
14 print(name.translate(str.maketrans("z","Z")))
15 #e.将"name"变量对应的值根据“J”分割,并输出结果。
16 print(name.split("J"))
17 #f.请问,上一题以“J”分割之后得到值是什么类型?
18 print(type(name.split("J"))) #答案是列表
19 #g.将“name”变量对应的值变大写,并输出结果
20 print(name.swapcase()) #可以将字符串大写变小写,将小写变大写
21 #h.将“name”变量对应的值变小写,并输出结果
22 print(name.lower()) #将大写变成小写
23 #i.请输出"name"变量对应的值的第 9 个字符?
24 print(name[10]) #一个字符串也包含空格哟
25 #j.请输出"name"变量对应的值的前 10 个字符?
26 print(name[:11])
27 #k.请输出"name"变量对应的值的后 2 个字符?
28 print(name[-2:len(name)])
29 #l.请输出"name"变量对应的值中“e”所在索引位置?
30 print(name.index("e")) ##查找出列表中的某个值所对应的索引ID,从左往有返回第一个匹配到的索引
31 #l.请输出"name"变量对应的值中“e”出现的次数
32 print(name.count("e"))
33
34
35
36 #测试结果如下:
37 yinzhengJie
38 False
39 True
40     yinZhengJie
41 ['    yinzheng', 'ie']
42 <class 'list'>
43     YINZHENGjIE
44     yinzhengjie
45 n
46     yinzhen
47 ie
48 9
49 2


20.字符串是否可迭代?如可以请使用 for 循环每一个元素?

  答案是肯定的,测试结果如下:

1 #!/usr/bin/env python
2 #_*_coding:utf-8_*_
3 #@author :yinzhengjie
4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
5 #EMAIL:y1053419035@qq.com
6 name = "    yinzhengJie"
7 for i in name:
8     print(i)
9
10
11 #脚本执行结果如下:
12
13
14
15
16 y
17 i
18 n
19 z
20 h
21 e
22 n
23 g
24 J
25 i
26 e


21.请用代码实现:利用下划线将列表的每一个元素拼接成字符串,li = ['alex', 'yinzhengjie', 'rain']

#!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com
li = ["alex","yinzhengjie","rain"]
print("_".join(li))  #将一个列表的中的每一个元素用前面的“—”隔开,形成一个字符串。

#执行代码结果如下:
alex_yinzhengjie_rain


22.Python2 中的 range 和 Python3 中的 range 的区别?

  python2中range一旦生成 就会在内存里将所有数字显示;

  python3中每循环一次释放当次数字;

23.列表练习,有如下列表,按照要求实现每一个功能 :

1 #!/usr/bin/env python
2 #_*_coding:utf-8_*_
3 #@author :yinzhengjie
4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
5 #EMAIL:y1053419035@qq.com
6 li = ["alex","yinzhengjie","rain","尹正杰","廖雪峰","吴三江","孝杰","吴东航"]
7 #a.计算列表长度并输出
8 print(len(li))
9 #b.列表中追加元素“seven”,并输出添加后的列表
10 li.append("server")
11 print(li)
12 #c.请在列表的第"1"个位置插入元素“Tony”,并输出添加后的列表
13 li.insert(0,"Tony")
14 print(li)
15 #d.请修改列表第"2"个位置的元素为“Kelly”,并输出修改后的列表
16 li[1] = "kelly"
17 print(li)
18 #e.请删除列表中的元素 “server”,并输出修改后的列表
19 li.remove("server")
20 print(li)
21 #f.请删除列表中的第"2"个元素,并输出删除的元素的值和删除元素后的列表
22 print(li.pop(1))
23 print(li)
24 #g.请删除列表中的第"3"个元素,并输出删除元素后的列表
25 del li[2]
26 print(li)
27 #h.请删除列表中的第2至4个元素,并输出删除元素后的列表
28 del li[2:5]
29 print(li)
30 #i.请将列表所有的元素反转,并输出反转后的列表
31 # print(id(li))
32 li.reverse()
33 # print(id(li.reverse())) #这里是指令地址返回值是None,意思是让li这个列表原地反转一下,不会使得li这个列表的内存地址变换!
34 # print(id(li))
35 print(li)
36 #j.请使用 for、len、range 输出列表的索引
37 for i in range(len(li)):
38     print(i)
39 #k.请使用"enumrate"输出列表元素和序号(序号从 100 开始)
40 for index,item in enumerate(li):
41     print(index+100,item)
42 #l.请使用"for"循环输出列表的所有元素
43 for i in li:
44     print(i)
45
46
47
48
49 #测试结果如下:
50
51 8
52 ['alex', 'yinzhengjie', 'rain', '尹正杰', '廖雪峰', '吴三江', '孝杰', '吴东航', 'server']
53 ['Tony', 'alex', 'yinzhengjie', 'rain', '尹正杰', '廖雪峰', '吴三江', '孝杰', '吴东航', 'server']
54 ['Tony', 'kelly', 'yinzhengjie', 'rain', '尹正杰', '廖雪峰', '吴三江', '孝杰', '吴东航', 'server']
55 ['Tony', 'kelly', 'yinzhengjie', 'rain', '尹正杰', '廖雪峰', '吴三江', '孝杰', '吴东航']
56 kelly
57 ['Tony', 'yinzhengjie', 'rain', '尹正杰', '廖雪峰', '吴三江', '孝杰', '吴东航']
58 ['Tony', 'yinzhengjie', '尹正杰', '廖雪峰', '吴三江', '孝杰', '吴东航']
59 ['Tony', 'yinzhengjie', '孝杰', '吴东航']
60 ['吴东航', '孝杰', 'yinzhengjie', 'Tony']
61 0
62 1
63 2
64 3
65 100 吴东航
66 101 孝杰
67 102 yinzhengjie
68 103 Tony
69 吴东航
70 孝杰
71 yinzhengjie
72 Tony


24.列表取值练习,请按照功能要求实现每一个功能 :

#!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com
li = [['Tony', 'alex',  'kelly','yinzhengjie', 'rain'],['尹正杰', '廖雪峰', ['吴三江', '孝杰', '吴东航'],"ALL"],123,666]
#a.请输出“Kelly”
print(li[0][2])
#b.请使用索引找到'all'元素并将其修改为“ALL”
print(li[1][3])

#代码执行结果:
kelly
ALL


25.元组练习,按照要求实现每一个功能 :

#!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com
tu = ("alex","yinzhengjie","吴三江")
#a.计算元组长度并输出
print(len(tu))
#b.获取元组的第2个元素,并输出
print(tu[1])
#c.获取元组的第1-2个元素,并输出
print(tu[:2])
#d.请使用 for 输出元组的元素
for i in tu:
print(i)
#e.请使用 for、len、range 输出元组的索引
for i in range(len(tu)):
print(i)
#f.请使用“enumrate”输出元祖元素和序号(序号从 10 开始)
for index ,item in enumerate(tu):
print(index,item)

#代码执行结果
3
yinzhengjie
('alex', 'yinzhengjie')
alex
yinzhengjie
吴三江
0
1
2
0 alex
1 yinzhengjie
2 吴三江


26.元组小试牛刀练习,有如下变量,请实现要求的功能 :

1 #!/usr/bin/env python
2 #_*_coding:utf-8_*_
3 #@author :yinzhengjie
4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
5 #EMAIL:y1053419035@qq.com
6 tu = ('alex', [11,22,{"k1":"v1","k2":["age","name"],"k3":(11,22,33)},44])
7 #a.讲述元组的特性
8 '''
9 tuple也是有序的集合,它和list不同的是它只能在初始化的时候赋值,之后就不能再进行添加删除元素了,用 () 表示。
10 元组的三个特性:
11     ①创建之后不能加减修改元素;
12     ②元素也可以是数字、字符、变量或者混杂;
13     ③元组也可以嵌套。
14 '''
15 #b.请问 tu 变量中的第一个元素“alex”是否可被修改?
16 '''
17     答案是否定的,不能对其进行修改!元组是写死的,不能增删改
18 '''
19 #c.请问tu变量中的"k2"对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素“Seven”
20 print(type(tu[1][2]["k2"])) #"k2"对应的值是一个列表,是可以被修改的。
21 tu[1][2]["k2"].append("Seven")  #添加一个值
22 print(tu)
23 #d.请问“tu”变量中的"k3"对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素“Seven”
24 print(type(tu[1][2]["k3"])) #"k3"对应的值是一个元组,是不可以被修改的,故无法添加元素!
25
26
27
28 #代码执行结果:
29
30 <class 'list'>
31 ('alex', [11, 22, {'k3': (11, 22, 33), 'k1': 'v1', 'k2': ['age', 'name', 'Seven']}, 44])
32 <class 'tuple'>


27.字典练习

1 #!/usr/bin/env python
2 #_*_coding:utf-8_*_
3 #@author :yinzhengjie
4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
5 #EMAIL:y1053419035@qq.com
6 dic = {"k1":"v1","k2":"v2","k3":[11,22,33]}
7 #a.请循环输出所有的 key
8 for i in dic:
9     print(i)
10 #b.请循环输出所有的 value
11 for i in dic:
12     print(dic[i])
13 #c.请循环输出所有的 key 和 value
14 for i in dic:
15     print(i,dic[i])
16 #d.请在字典中添加一个键值对,"k4": "v4",输出添加后的字典
17 dic["k4"] = "v4"
18 print(dic)
19 #e.请在修改字典中“k1”对应的值为 “alex” ,输出修改后的字典
20 dic["k1"] = "alex"
21 print(dic)
22 #f.请在k3对应的值中追加一个元素44,输出修改后的字典
23 dic["k3"].append(44)
24 print(dic)
25 #g.请在 k3 对应的值的第 1 个位置插入个元素 18,输出修改后的字典
26 dic["k3"].insert(0,18)
27 print(dic)
28
29
30 #代码执行结果如下:
31 k3
32 k2
33 k1
34 [11, 22, 33]
35 v2
36 v1
37 k3 [11, 22, 33]
38 k2 v2
39 k1 v1
40 {'k3': [11, 22, 33], 'k4': 'v4', 'k2': 'v2', 'k1': 'v1'}
41 {'k3': [11, 22, 33], 'k4': 'v4', 'k2': 'v2', 'k1': 'alex'}
42 {'k3': [11, 22, 33, 44], 'k4': 'v4', 'k2': 'v2', 'k1': 'alex'}
43 {'k3': [18, 11, 22, 33, 44], 'k4': 'v4', 'k2': 'v2', 'k1': 'alex'}


28.数据类型互相转换

1 #!/usr/bin/env python
2 #_*_coding:utf-8_*_
3 #@author :yinzhengjie
4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
5 #EMAIL:y1053419035@qq.com
6 #a.将字符串s="alex"转换成列表
7 s = "alex"
8 print(s)
9 s = list(s)
10 print(s)
11 #b.将字符串s="alex"转换成元祖
12 s = "alex"
13 print(s)
14 s = tuple(s)
15 print(s)
16 #b.将列表li = ["alex","yinzhengjie"]转换成元组
17 li = ["alex","yinzhengjie"]
18 print(li)
19 li = tuple(li)
20 print(li)
21 #c.将元祖tu = ('Alex',"yinzhengjie")转换成列表
22 tu = ('Alex',"yinzhengjie")
23 print(tu)
24 tu = list(tu)
25 print(tu)
26 #d.将列表li = ["alex","yinzhengjie"]转换成字典且字典的key按照10开始向后递增
27 li = ["alex","yinzhengjie"]
28 num = []
29 def Transformation_dict(list_1,linst_2):
30     for i in range(10, 10 + len(list_1)):
31         linst_2.append(i)
32     list_1 = dict(zip(linst_2, list_1))
33     return list_1
34 print(Transformation_dict(li,num))
35
36 #代码执行结果:
37
38 alex
39 ['a', 'l', 'e', 'x']
40 alex
41 ('a', 'l', 'e', 'x')
42 ['alex', 'yinzhengjie']
43 ('alex', 'yinzhengjie')
44 ('Alex', 'yinzhengjie')
45 ['Alex', 'yinzhengjie']
46 {10: 'alex', 11: 'yinzhengjie'}


29:字符串转码

1 #!/usr/bin/env python
2 #_*_coding:utf-8_*_
3 #@author :yinzhengjie
4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
5 #EMAIL:y1053419035@qq.com
6 #a.将字符串s="alex"转换成列表
7 n = "尹正杰"
8 #a.将字符串转换成utf-8编码的字节,并输出,然后将该字节再转换成utf-8编码字符串再输出
9 transcoding_byte = n.encode("utf-8")
10 print(transcoding_byte)
11 transcoding_code = transcoding_byte.decode("utf-8")
12 print(transcoding_code)
13 #b将字符串转换成gbk编码的字节,并输出,然后将该字节再转换成 gbk 编码字符串,再输出
14 transcoding_gbk = n.encode("gbk")
15 print(transcoding_gbk)
16 transcoding_code_gbk = transcoding_gbk.decode("gbk")
17 print(transcoding_code_gbk)
18
19
20 #代码测试结果如下:(注意:这是我在pycharm测试的结果!)
21 b'\xe5\xb0\xb9\xe6\xad\xa3\xe6\x9d\xb0'
22 尹正杰
23 b'\xd2\xfc\xd5\xfd\xbd\xdc'
24 尹正杰


30.求 1-­‐100 内的所有数的和

1 #!/usr/bin/env python
2 #_*_coding:utf-8_*_
3 #@author :yinzhengjie
4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
5 #EMAIL:y1053419035@qq.com
6 total = 0
7 for i in range(1,101):
8     total += i
9     i += 1
10 print(total)
11
12
13 #代码执行结果
14 5050


31.元素分类

  有如下值集合 [11,22,33,44,55,66,77,88,99,90],将所有大于 66 的值保存至字典的第一个 key 中,将小于 66 的值保存至第二个 key 的值中。

1 #!/usr/bin/env python
2 #_*_coding:utf-8_*_
3 #@author :yinzhengjie
4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
5 #EMAIL:y1053419035@qq.com
6 num_list = [11,22,33,44,55,66,77,88,99,90]
7 num_dict = {"k1":[],"k2":[]}
8 for i in num_list:
9     if i > 66:
10         num_dict.get("k1").append(i)
11     elif i < 66:
12         num_dict.get("k2").append(i)
13 print(num_dict)
14
15
16 #代码执行结果如下:
17 {'k2': [11, 22, 33, 44, 55], 'k1': [77, 88, 99, 90]}


32.自定义购物车小程序:

1 #!/usr/bin/env python
2 #_*_coding:utf-8_*_
3 #@author :yinzhengjie
4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
5 #EMAIL:y1053419035@qq.com
6 import sys,time
7 '''
8 功能要求:
9         要求用户输入总资产,例如:2000
10         显示商品列表,让用户根据序号选择商品,加入购物车
11         购买,如果商品总额大于总资产,提示账户余额不足,否则,购买成功。
12     goods  =  [
13         {"name":  "电脑",  "price":  1999},
14         {"name":  "鼠标",  "price":  10},
15         {"name":  "游艇",  "price":  20},
16         {"name":  "美女",  "price":  998},
17     ]
18 '''
19 goods = [
20     ("电脑",9000),
21     ("鼠标",600),
22     ("游艇",20000000),
23     ("美女",998)
24 ]
25 shopping_list = []
26 total_consuption = 0
27 customer_deposit = input("请问您的总资产:>>>")
28 Initial_money = customer_deposit
29 if customer_deposit.isdigit():
30     customer_deposit = int(customer_deposit)
31 else:
32     print("对不起,您仅仅能输入数字")
33 while True:
34     for index,item in enumerate(goods):
35         print(index,item)
36     user_choice = input("请选择相应的序列号来挑选商品>>:  ")
37     if user_choice.isdigit():
38         user_choice = int(user_choice)
39         if user_choice < len(goods) and user_choice >=0:
40             purchase_item = goods[user_choice]
41             if purchase_item[1] <= customer_deposit:
42                 shopping_list.append(purchase_item)
43                 customer_deposit -= purchase_item[1]
44                 total_consuption += purchase_item[1]
45                 print("已经订单的商品:'%s'" % purchase_item[0])
46                 continue_shopping = input("请问是否要继续购物呢(按任意键继续,按'Q'或者'q'停止购物)>>:    ")
47                 if continue_shopping == "q" continue_shopping == "Q":
48                     for i in shopping_list:
49                         print("您已经订单的商品‘%s’,需要花费‘%s’元人名币" % (i[0], i[1]))
50                         print("您的存款是\033[31;1m%s\033[0m" % (Initial_money))
51                         print("共需要消费\033[31;1m%s\033[0m人民币" % total_consuption)
52                         spend = input("是否确认购买物品(按任意键退出退出程序,按'y'确认结账)")
53                         if spend == "y" spend == "Y":
54                             print("欢迎来到尹正杰商城进行消费!当前您的余额是:\033[31;1m'%s'\033[0m" % customer_deposit)
55                             sys.exit()
56                         else:
57                             print("退出商城")
58                             sys.exit()
59             else:
60                 print("\033[41;1m您的余额只剩【%s】啦,还买个毛线啊\033[0m" % customer_deposit)
61         else:
62             print("                            对不起您输入的序列号不正确!请重新输入!!!   ")
63             time.sleep(1)
64             continue
65
66
67
68 #代码执行结果如下:
69
70 #输入错误序号:
71 请问您的总资产:>>>1111111111111
72 0 ('电脑', 9000)
73 1 ('鼠标', 600)
74 2 ('游艇', 20000000)
75 3 ('美女', 998)
76 请选择相应的序列号来挑选商品>>:  66
77                             对不起您输入的序列号不正确!请重新输入!!!
78 0 ('电脑', 9000)
79 1 ('鼠标', 600)
80 2 ('游艇', 20000000)
81 3 ('美女', 998)
82 请选择相应的序列号来挑选商品>>:
83
84
85 #未结账退出测试:
86 请问您的总资产:>>>222222222222222222
87 0 ('电脑', 9000)
88 1 ('鼠标', 600)
89 2 ('游艇', 20000000)
90 3 ('美女', 998)
91 请选择相应的序列号来挑选商品>>:  2
92 已经订单的商品:'游艇'
93 请问是否要继续购物呢(按任意键继续,按'Q'或者'q'停止购物)>>:    q
94 您已经订单的商品‘游艇’,需要花费‘20000000’元人名币
95 您的存款是222222222222222222
96 共需要消费20000000人民币
97 是否确认购买物品(按任意键退出退出程序,按'y'确认结账)
98 退出商城
99
100
101 #成功结账:
102 请问您的总资产:>>>55555555555555555555
103 0 ('电脑', 9000)
104 1 ('鼠标', 600)
105 2 ('游艇', 20000000)
106 3 ('美女', 998)
107 请选择相应的序列号来挑选商品>>:  2
108 已经订单的商品:'游艇'
109 请问是否要继续购物呢(按任意键继续,按'Q'或者'q'停止购物)>>:    Q
110 您已经订单的商品‘游艇’,需要花费‘20000000’元人名币
111 您的存款是55555555555555555555
112 共需要消费20000000人民币
113 是否确认购买物品(按任意键退出退出程序,按'y'确认结账)y
114 欢迎来到尹正杰商城进行消费!当前您的余额是:'55555555555535555555'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: