madsnotes

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

# python3 hello.py 
Hello World!
你好

# cat hello.py |python
Hello World!
你好

2、简述位、字节的关系

位:计算机的计算单位,代表0或者1
字节:一字节相当于8位

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

4、请写出"李杰"分别用utf-8和gbk编码所占的位数

>>> len(bytes(name,encoding=\'utf-8\'))
6
>>> len(bytes(name,encoding=\'gbk\'))  
4

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

单行注释: # 被注释内容
多行注释: \'\'\' 被注释内容 \'\'\'

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

1)由字母、数字和下划线构成,不能以数字开头,不能任意特殊字符
2)变量定义规范,使用驼峰式或者下划线式格式
3)变量定义尽量简明,易懂,方便使用者应用

7、利用内置函数chr(),ord()以及random模块写一个简单随机4位验证码

import random
tmp=\'\'                        # 最后生成的随机码
for i in range(4):
    n=random.randrange(0,2)            # 生成随机数1或0,用来判断下面,是生成随机数字,还是字母
    if n==0:
        num = random.randrange(65, 91)      # 为0时候,生成大写字母
        tmp+=chr(num)
    else:
        k=random.randrange(0,10)         # 为1时候,生成数字
        tmp+=str(k)
print(tmp)                      # 这里运行的时候每次生成的4为随机码都不同

8、如何查看变量在内存中的地址?

>>> name = \'Alex\'                        
>>> id(name)
3071018080

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

Python执行前生成的编译字节码文件

10、写代码

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

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

username = input("请输入用户名:")
password = input("请输入密码:")
if username == \'seven\' and password == \'123\':
    print("登录成功")
else:
    print("登录失败")

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

# cat a.py 
#!/usr/bin/env python
# _*_ coding:utf-8 _*_

error_num = 0
while True:
    username = input("请输入用户名:")
    password = input("请输入密码:")
    if username == \'seven\' and password == \'123\':
        print("登录成功")
        break
    else:
        print("登录失败")
        error_num += 1
        if error_num == 3:
            exit()
        else:
            continue

# python3 a.py
请输入用户名:1
请输入密码:1
登录失败
请输入用户名:1
请输入密码:1
登录失败
请输入用户名:1
请输入密码:1
登录失败
mads@mads-virtual-machine:~$ python3 a.py
请输入用户名:seven
请输入密码:123
登录成功

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

# cat a.py 
#!/usr/bin/env python
# _*_ coding:utf-8 _*_

error_num = 0
while True:
    username = input("请输入用户名:")
    password = input("请输入密码:")
    if username == \'seven\' or username == \'alex\' and password == \'123\':
        print("登录成功")
        break
    else:
        print("登录失败")
        error_num += 1
        if error_num == 3:
            exit()
        else:
            continue
# python3 a.py
请输入用户名:3
请输入密码:3
登录失败
请输入用户名:3
请输入密码:3
登录失败
请输入用户名:33
请输入密码:33
登录失败
#  python3 a.py
请输入用户名:seven
请输入密码:123
登录成功
# python3 a.py
请输入用户名:alex
请输入密码:123
登录成功

11、写代码

1)使用while循环实现输出2-3+4-5+6.....+100的和

#!/usr/bin/env python
sum = 0
for i in range(2,101):
    if i % 2 == 0:
       sum += i
    else:
       sum -= i
    print(i,sum)
print("sum:",sum)

 2)求1-2+3-4+5 ... 99的所有数的和

方法1:傻逼到家的方法
sum1 =0
sum2 = 0
for i in range(1,100,2):
    sum1 += i
for j in range(2,100,2):
    sum2 +=j
sum3 = sum1 -sum2
print(sum3)

方法2:正常程序猿的方法
sum=0
for i in range(0,100):
    if i%2==0:
        sum-=i
    else:
        sum+=i
print(sum)

3)使用while循环输入 1 2 3 4 5 6     8 9 10

i=0
while i<10:
    i += 1
    if i == 7:
        continue
    else:
        print(i)

4)输出 1-100 内的所有奇数

for i in range(1,100,2):
        print(i)

5)输出 1-100 内的所有偶数

for i in range(2,100,2):
        print(i)

 12、分别书写数字5,10,32,7的二进制表示

bin()  # 二进制
oct()  # 八进制
hex()  # 十六进制

>>> a = [5,10,32,7]
>>> for i in a:
...     print(i,":",bin(i))
...
 5 : 0b101
10 : 0b1010
32 : 0b100000
 7 : 0b111

13、简述对象和类的关系

对象是类的实例化

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

# 两个变量引用同一个内存地址
>>> n1 = 123
>>> n2 = 123
>>> print(id(n1),id(n2))
1582456464 1582456464

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

# 两个变量引用同一个内存地址
>>> n1 = 123456
>>> n2 = n1
>>> print(id(n1),id(n2))
1990112 1990112

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

>>> n1 = 5
>>> bytes(n1)
b\'\x00\x00\x00\x00\x00\'
>>> len(bytes(n1))
5

17、布尔值分别有什么?

真 假
True False
0 1

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

a = "alex"
b = a.capitalize()
print(a)
print(b)

结果:
>>> a = "alex" >>> b = a.capitalize() >>> print(a) alex >>> print(b) Alex

19、写代码,有如下变量,请按照要求实现每个功能

name = " aleX "
a.移除name变量对应的值两边的空格,并输入移除有的内容
b.判断name变量对应的值是否以 "al"开头,并输出结果
c.判断name变量对应的值是否以 "X"结尾,并输出结果
d.将name变量对应的值中的 " l" 替换为 " p",并输出结果
e.将name变量对应的值根据 " l" 分割,并输出结果。
f.请问,上一题 e分割之后得到值是什么类型?
g.将name变量对应的值变大写,并输出结果
h.将name变量对应的值变小写,并输出结果
i.请输出name变量对应的值的第2个字符?
j.请输出name变量对应的值的前3个字符?
k.请输出name变量对应的值的后2个字符?
l.请输出name变量对应的值中 "e" 所在索引位置?

>>> name = " aleX "
>>> name.strip()
\'aleX\'
>>> name.startswith("al")
False
>>> name.endswith("X")
False
>>> name.replace("l","p")
\' apeX \'
>>> name.split(\'l\')
[\' a\', \'eX \']
>>> type(name.split(\'l\'))
<class \'list\'>
>>> name.upper()
\' ALEX \'
>>> name.lower()
\' alex \'
>>> name[1]
\'a\'
>>> name[:2]
\' a\'
>>> name[-2:]
\'X \'
>>> name.index("e")
3

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

>>> name = " aleX "
>>> for i in name:
...     print(i)
...

a
l
e
X

>>>

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

>>> li = [\'alex\',\'eric\',\'rain\']
>>> "_".join(li)
\'alex_eric_rain\'

22、写代码,有如下列表,按照要求实现每一个功能(所有练习题同样适用于元组)

li = [\'alex\',\'eric\',\'rain\']    
a.计算列表长度并输出
b.列表中追加元素"seven",并输出添加后的列表
c.请在列表的第1个位置插入元素 "Tony",并输出添加后的列表
d.请修改列表第2个位置的元素为 "Kelly",并输出修改后的列表
e.请删除列表中的元素"eric",并输出修改后的列表
f.请删除列表中的第2个元素,并输出删除的元素的值和删除元素后的列表
g.请删除列表中的第3个元素,并输出删除元素后的列表
h.请删除列表中的第2至4个元素,并输出删除元素后的列表
i.请将列表所有的元素反转,并输出反转后的列表
j.请使用for、len、range 输出列表的索引
k.请使用enumrate输出列表元素和序号(序号从 100 开始)
l.请使用for循环输出列表的所有元素

>>> li = [\'alex\',\'eric\',\'rain\']
>>> print(len(li))
3
>>> li.append("seven")
>>> li
[\'alex\', \'eric\', \'rain\', \'seven\']
>>> li.insert(0,"Tony")
>>> li
[\'Tony\', \'alex\', \'eric\', \'rain\', \'seven\']
>>> li[1] = \'Kelly\'
>>> li
[\'Tony\', \'Kelly\', \'eric\', \'rain\', \'seven\']
>>> li.remove(\'eric\')
>>> li
[\'Tony\', \'Kelly\', \'rain\', \'seven\']

f:
>>> li[1]
\'Kelly\'
>>> del li[1]
>>> li
[\'Tony\', \'rain\', \'seven\']

g:
>>> del li[2]
>>> li
[\'Tony\', \'rain\']

h:
>>> li
[\'Tony\', \'alex\', \'eric\', \'rain\']
>>> li[1:3]
[\'alex\', \'eric\']
>>> del li[1:3]
>>> li
[\'Tony\', \'rain\']

i:
>>> li[::-1]
[\'Tony\', \'alex\', \'eric\', \'rain\']

>>> li = [\'alex\',\'eric\',\'rain\']
>>> li.reverse()
>>> li
[\'rain\', \'eric\', \'alex\']

j:
>>> li
[\'rain\', \'eric\', \'alex\']
>>> for i in range(len(li)):
...     print(i)
...
0
1
2

k:
>>> li
[\'rain\', \'eric\', \'alex\']
>>> for k,v in enumerate(li,100):
...     print(k,".",v)
...
100 . rain
101 . eric
102 . alex

l:
>>> li
[\'rain\', \'eric\', \'alex\']
>>> for i in li:
...     print(i)
...
rain
eric
alex

 22、写代码,有如下列表,请按照功能要求实现每一个功能
li = ["hello",\'seven\',["mon",["h","kelly"],\'all\'],123,446]
a.请输出"Kelly"
b.请使用索引找到 \'all\'元素并将其修改为"ALL"

>>> li = ["hello",\'seven\',["mon",["h","kelly"],\'all\'],123,446]
>>> li[2][1][1]
\'kelly\'
>>> s = li[2][1][1]
>>> s.capitalize()
\'Kelly\'

>>> index = li[2].index("all")
>>> li[2][index] = "ALL"
>>> li
[\'hello\', \'seven\', [\'mon\', [\'h\', \'kelly\'], \'ALL\'], 123, 446]

25、有如下变量,请实现要求的功能
tu=("alex",[11,22,{"k1":\'v1\',"k2":["age","name"],"k3":(11,22,33)},44])
a. 讲述元祖的特性
b. 请问 tu 变量中的第一个元素 "alex" 是否可被修改?
c. 请问 tu 变量中的"k2"对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素 "Seven"
d. 请问 tu 变量中的"k3"对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素 "Seven"

a:元组具有列表的全部特性,不同的是,元组的元素不能修改
b:不能
>>> tu[0] = \'cc\'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: \'tuple\' object does not support item assignment
c:列表,能被修改
>>> tu
(\'alex\', [11, 22, {\'k2\': [\'age\', \'name\'], \'k1\': \'v1\', \'k3\': (11, 22, 33)}, 44])
>>> tu[1][2]["k2"].append("cc")
>>> tu
(\'alex\', [11, 22, {\'k2\': [\'age\', \'name\', \'cc\'], \'k1\': \'v1\', \'k3\': (11, 22, 33)}
 44])

d:元组,不能
>>> tu=("alex",[11,22,{"k1":\'v1\',"k2":["age","name"],"k3":(11,22,33)},44])
>>> tu[1][2]["k3"].append("cc")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: \'tuple\' object has no attribute \'append\'

26、字典
dic={\'k1\':"v1","k2":"v2","k3":[11,22,33]}
a. 请循环输出所有的 key
b. 请循环输出所有的 value
c. 请循环输出所有的 key 和 value
d. 请在字典中添加一个键值对, "k4":"v4",输出添加后的字典
e. 请在修改字典中 "k1" 对应的值为 "alex",输出修改后的字典
f. 请在 k3 对应的值中追加一个元素 44,输出修改后的字典
g. 请在 k3 对应的值的第 1 个位置插入个元素 18,输出修改后的字典

>>> dic={\'k1\':"v1","k2":"v2","k3":[11,22,33]}
>>> for k in dic.keys():
...     print(k)
...
k2
k1
k3

>>> for v in dic.values():
...     print(v)
...
v2
v1
[11, 22, 33]
>>> for k,v in dic.items(): ... print(k,v) ... k2 v2 k1 v1 k3 [11, 22, 33] >>> dic {\'k2\': \'v2\', \'k1\': \'v1\', \'k3\': [11, 22, 33]} >>> dic["k4"] = "v4" >>> dic {\'k2\': \'v2\', \'k1\': \'v1\', \'k4\': \'v4\', \'k3\': [11, 22, 33]} >>> dic["k1"] = "alex" >>> dic {\'k2\': \'v2\', \'k1\': \'alex\', \'k4\': \'v4\', \'k3\': [11, 22, 33]} >>> dic["k3"].append(44) >>> dic {\'k2\': \'v2\', \'k1\': \'alex\', \'k4\': \'v4\', \'k3\': [11, 22, 33, 44]} >>> dic["k3"].insert(0,18) >>> dic {\'k2\': \'v2\', \'k1\': \'alex\', \'k4\': \'v4\', \'k3\': [18, 11, 22, 33, 44]}

27、转换
a. 将字符串 s="alex" 转换成列表
b. 将字符串 s="alex" 转换成元祖
b. 将列表 li=["alex","seven"] 转换成元组
c. 将元祖 tu=(\'Alex\',"seven") 转换成列表
d. 将列表 li=["alex","seven"] 转换成字典且字典的 key 按照 10 开始向后递增

>>> s = "alex"
>>> list(s)
[\'a\', \'l\', \'e\', \'x\']

>>> tuple(s)
(\'a\', \'l\', \'e\', \'x\')

>>> li=["alex","seven"]
>>> tuple(li)
(\'alex\', \'seven\')

>>> tu=(\'Alex\',"seven")
>>> list(tu)
[\'Alex\', \'seven\']

>>> li=["alex","seven"]
>>> li_dic = {}
>>> for k,v in enumerate(li,10):
...     li_dic[k] = v
...
>>> li_dic
{10: \'alex\', 11: \'seven\'}

27、转码
n="老男孩"
a. 将字符串转换成 utf-8 编码的字节,并输出,然后将该字节再转换成 utf-8 编码字符串,再输出
a. 将字符串转换成 gbk 编码的字节,并输出,然后将该字节再转换成 gbk 编码字符串,再输出

>>> n = "老男孩"
>>> n.encode("utf-8")
b\'\xe8\x80\x81\xe7\x94\xb7\xe5\xad\xa9\'
>>> n.encode().decode("utf-8")
\'老男孩\'

>>> n = "老男孩"
>>> n.encode(\'gbk\')
b\'\xc0\xcf\xc4\xd0\xba\xa2\'
>>> n.encode(\'gbk\').decode(\'gbk\')
\'老男孩\'

28、求 1-100 内的所有数的和

>>> sum = 0
>>> for i in range(1,101):
...     sum += i
...
>>> sum
5050

29、元素分类
有如下值集合 [11,22,33,44,55,66,77,88,99,90],将所有大于 66 的值保存至字典的第一个 key 中,将小于 66 的值保存至第二个 key 的值中。
即: {\'k1\': 大于 66 的所有值,\'k2\': 小于 66 的所有值}

# 自定义方法实现

def f1(args):
    result = []
    for item in args:
        if item > 66:
            result.append(item)
    return result

li = [11, 22, 33, 44, 55]
ret = f1(li)
print(ret)


# 通过filter功能实现需求
def f2(a):
    if a > 66:
        return True
li = [11, 22, 33, 44, 55]
res = filter(f2, li)
print(list(res))

30、购物车
功能要求:
要求用户输入总资产,例如: 2000
显示商品列表,让用户根据序号选择商品,加入购物车
购买,如果商品总额大于总资产,提示账户余额不足,否则,购买成功。
goods=[
{"name":"电脑","price":1999},
{"name":"鼠标","price":10},
{"name":"游艇","price":20},
{"name":"美女","price":998},
]

31、查找元素,移除空格,并查找以 a或A开头 并且以 c 结尾的所有元素
li = ["alec", " aric", "Alex", "Tony", "rain"]
tu = ("alec", " aric", "Alex", "Tony", "rain")
dic = {\'k1\': "alex", \'k2\': \' aric\',  "k3": "Alex", "k4": "Tony"}

for i in li:
    if i.strip().capitalize().startswith(\'A\') and i.strip().endswith(\'c\'):
        print(i)
for i in tu:
    if i.strip().capitalize().startswith(\'A\') and i.strip().endswith(\'c\'):
        print(i)
for i in dic.values():
    if i.strip().capitalize().startswith(\'A\') and i.strip().endswith(\'c\'):
        print (i)

32、用户交互,显示省市县三级联动的选择

dic = {
    "河北": {
        "石家庄": ["鹿泉", "藁城", "元氏"],
        "邯郸": ["永年", "涉县", "磁县"],
    },
    "湖南": {
        "长沙":[\'a\',\'b\',\'c\'],
        "株洲":[\'d\',\'e\',\'f\']
    },
    "湖北": {
        "武汉":[\'g\',\'h\',\'i\'],
        "黄石":[\'j\',\'k\',\'l\']
    }
}

 

分类:

技术点:

相关文章: