如下是三套Python101的检测题,你可以从中任选一套,如果你可以在40分钟之内完成,请跳过Python基础开始你的进阶之路;如果你磕磕巴巴60分钟都没有完成,请果断从0开始。
Python基础 A卷
- “=”,"==",在Python中分别代表什么含义。
"=":python中赋值操作
"==":判断数字或字符串是否相等
"+=":例如 a+=1 等于 a = a + 1
-
两个变量值的关系?(口述)(1分钟)
-
n1 = 123456
-
n2 = n1
答案: n1和n2的数值相等,内存地址相等 n2的数值更改不会带动n1数值更改
-
-
“地铁故事” 分别用 utf-8 和 gbk 编码所占的位数。
答案: “地铁故事”utf-8占用12个字节(3*4=12) “地铁故事”gbk占用8个字节(2*4=8) ascii 不支持中文;英文占1个字节 GBK 中文2个字节,英文1个字节 Unicode 中文2个字节,英文2个字节; utf-8 中文3个字节,英文占1个字节,欧洲2个字节
解析:
- 编码的故事要从ASCII码说起,ascii 不支持中文。在计算机的存储单元中,一个ASCII码值占一个字节(8个二进制位),其最高位(b7)用作奇偶校验位。
- 既然你英语国家可以做ASCII,那我们中国就也可以做我们的GBK。 GBK、GB2312收编的汉字占2个字节。因为GBK是国人编码,我国人制定的规则是:GBK编码,一个汉字占2个字节,
- 中国有中国的GBK,日韩越有日韩越的GBK,编码就不统一了。Unicode应运而生,Unicode其实是一个字符集。缺点是:占用的内存空间比ASCII大1倍。常用中文字符用utf-8编码占用3个字节(大约2万多字),但超大字符集中的更大多数汉字要占4个字节(在unicode编码体系中,U+20000开始有5万多汉字)。
- 因为如上缺点“Unicode占用的内存空间比ASCII大1倍。”,于是这时候有了UTF-8。utf-8(utf16/utf32),是变长编码,英文只用一个字节即可,汉字要用三个字节;扩展B区以后的汉字占四个字节,英文字母占两个字节。UTF-8中 常用中文字符用utf-8编码占用3个字节(大约2万多字);但超大字符集中的更大多数汉字要占4个字节(在unicode编码体系中,U+20000开始有5万多汉字)。为什么UTF8却使用3个字节存储字符"你"呢?这样不是明显浪费存储空间吗?UTF8没有浪费存储空间,而且UTF8还是一个精美的设计。这是UTF8为了兼容ASNI所要付出的代价,UTF8下是完全兼容asni,也就是asni标准的下的文档,在UTF8下显示完全不是问题(因为ASNI存储字节值和UTF8是一样的)。字符都是一个一个字节存储的,UTF8肯定是一个一个字节的读取,那么UTF8怎么在完全兼容ASNI前提下,是怎么知道某个字符是需要额外字节信息的?UTF8只有固定前几位二进制来决定这个字符需要以后的几个字节,又因为为了兼容ASNI,所以额外字节也需要固定前2位"10xxxxxx",来决定这个字节值不是代表ASNI字符。ASNI的格式是“0xxxxxxx”。
另外,UTF-16编码,通常汉字占两个字节,CJKV扩展B区、扩展C区、扩展D区中的汉字占四个字节(一般字符的Unicode范围是U+0000至U+FFFF,而这些扩展部分的范围大于U+20000,因而要用两个UTF-16),英文字母占两个字节。
Tips:处理的文本主要为中文时最好用gbk编码,英文较多时用utf8编码。
gbk和utf8两种编码之间转换要通过unicode来间接实现。
-
简述Python中的几种数据类型。
答案: 数字,字符串,列表,元组,字典,集合
-
数据类型的可变与不可变分别有哪些?
答案: 可变类型: list 不可变类型:number, string,tuple, set 区分: 是否可以被hash, 可变类型是不可以被hash的
-
元祖,列表,字典有没有长度的限制?
答案: 现在,这三个数据是没有长度限制的,但是会受到用户使用的系统的限制。 eg: 32位:536870912 64位:1152921504606846975
-
列表 li = [‘bbb’,‘eee’,‘yuan’,‘www’,‘666’]
-
1.把666替换成999
-
2.获取"yuan"索引
-
3.假设不知道前面有几个元素,分片得到最后的三个元素( [-3:] )
答案: 1, li[-1] = 999 或者 li[li.index('666')] ="999" 2, li.index("yuan") 3, li[-3:]
-
-
将字符串s = “www.yanpeizhen.com”给拆分成列表:li=[‘www’,‘yanpeizhen’,‘com’]
答案: print(s.split(".")) 或者 c= s.split('.') print(c)
-
对字典进行增删改查(编程)
d = { "Development":"开发小哥", "OP":"运维小哥", "Operate":"运营小仙女", "UI":"UI小仙女" }
答案: 1, 增加: name : aaa d["name"] = "aaa" 2, 修改: aaa 改为 www d["aaa"] = "www" 3, 删除: 删除 name 为 www d.pop("www") 4, 查询: "UI":"UI小仙女" d["UI"]
-
计算1+2+3…+98+99+100 (注意不要用等差公式)。
答案: sum = 0 for i in range(1,101): #range的范围 顾头不顾尾 sum += i print(sum)
-
制作趣味模板程序。
需求:等待用户输入名字、地点、爱好,根据用户的名字和爱好进行任意现实
如:天真烂漫的xxx,最喜欢在xxx干xxx
参考答案1:
name = input("你的名字")
space = input('你喜欢的活动的地方')
hobby = input('你的爱好')
print('天真烂漫的{},最喜欢在{} {}'.format(name,space,hobby))
参考答案2:
name = input("请输入姓名:")
address = input("请输入地点:")
hobby = input("请输入爱好:")
print("天真烂漫的 %s, 最喜欢在%s干%s" % (name, address, hobby))
- 写一个三次验证登陆(编程):实现用户输入用户名和密码,当用户名为 Elisabeth 或 Elizabeth 且 密码为 123321 时,显示登陆成功,否则登陆失败,失败时允许重复输入三次。
答案:
username = ['Elisabeth ', 'Elizabeth ']
password = '123321 '
count = 0
while count < 3:
username = input('用户名:')
password = input('密码:')
if username in username and password == password:
print('登陆成功!')
break
else:
print('登陆失败!')
count += 1
参考2
check = 0
user_name = ['Elisabeth','Elizabeth']
user_password='123321'
while check<3:
your_user_name = input('请输入你的用户名')
if your_user_name in user_name:
user_password = input('请输入密码')
if your_user_password == '123321':
print('登陆成功')
break
else:
print('密码错误')
check+=1
continue
else:
print('登陆账号错误')
check += 1
continue
Python 基础 B卷
-
解释’and’,‘or’,‘not’
答案: not –表示取反运算。 and –表示取与运算。 or –表示取或运算。 优先级是 not>and>or。 and从左到右计算表达式,若所有值均为真,则返回最后一个值,若存在假,返回第一个假值。 真 假 假 真 真 真 假 假 假 假 真 假 or 也是从左到右计算表达式,返回第一个为真的值 真 假 真 真 真 真 假 假 假 假 真 真
-
元祖和列表的区别。
答案: 1, 两者的表达形式不一样 ,list 为 [], tuple 为(). 2,list 为 可变类型, tuple 为不可变类型
-
列举布尔值为False的情况。
答案: [],{},None,False,'',数字0
-
python2和python3对于long(长整形)的区别。
答案:
python2 中数字类型分为 int(整型) 和 long(长整型)。 但是要看操作系统的位数
32位:2…31之后就是长整型.
64位 2…63 9223372036854775808Lpython3 中只有整型
-
变量命名规范有哪些?
答案:
模块名,包名 :小写字母, 单词之间用户_分割。
类名:首字母大写。
全局变量: 大写字母, 单词之间用户_分割。
普通变量: 小写字母, 单词之间用户_分割。
函数: 小写字母, 单词之间用户_分割。
实例变量: 以_开头,其他和普通变量一样 。
私有实例变量(外部访问会报错): 以__开头(2个下划线),其他和普通变量一样 。
专有变量: __开头,__结尾,一般为python的自有变量(不要以这种变量命名)。
- 阐述一下unicode和utf-8的区别(或者unicode在python3的作用)。
答案:
简单来说:Unicode 是「字符集」
UTF-8 是「编码规则」
其中:字符集:为每一个「字符」分配一个唯一的 ID(学名为码位 / 码点 / Code Point)。
编码规则:将「码位」转换为字节序列的规则(编码/解码 可以理解为 加密/解密 的过程)。
广义的 Unicode 是一个标准,定义了一个字符集以及一系列的编码规则,即 Unicode 字符集和 UTF-8、UTF-16、UTF-32 等等编码……
Unicode 字符集为每一个字符分配一个码位,例如「知」的码位是 30693,记作 U+77E5(30693 的十六进制为 0x77E5)。
UTF-8 顾名思义,是一套以 8 位为一个编码单位的可变长编码。会将一个码位编码为 1 到 4 个字节:U+ 0000 ~ U+ 007F: 0XXXXXXX
U+ 0080 ~ U+ 07FF: 110XXXXX 10XXXXXX
U+ 0800 ~ U+ FFFF: 1110XXXX 10XXXXXX 10XXXXXX
U+10000 ~ U+1FFFF: 11110XXX 10XXXXXX 10XXXXXX 10XXXXXX
根据上表中的编码规则,之前的「知」字的码位 U+77E5 属于第三行的范围:
7 7 E 5
0111 0111 1110 0101 二进制的 77E5
--------------------------
0111 011111 100101 二进制的 77E5
1110XXXX 10XXXXXX 10XXXXXX 模版(上表第三行)
11100111 10011111 10100101 代入模版
E 7 9 F A 5
这就是将 U+77E5 按照 UTF-8 编码为字节序列 E79FA5 的过程。反之亦然。
-
内存空间的考核。
-
问修改前后info的id是否改变
-
问修改前后info[‘July’][‘hobbies’]的id是否改变
info={ 'eee':{'pwd':'123','hobbies':['play','music','read']}, 'July':{'pwd':'1234','hobbies':['music','read']}, 'www':{'pwd':'135','hobbies':['read',]}, } info['aaa']['hobbies'].append('play')
-
答案: 不变,因为是字典;不变因为是列表。
-
切割字符串s = “wewewcity"为"wewew”,“city”(编程)
答案: print(s[:5]) print(s[-4:])
-
猜年龄游戏。假如女主角年龄为26岁,猜多少都给提示,共可以才3次。
答案:
count = 0
age = 26
while count < 3:
user_guess = int(input("your guess:"))
if user_guess == age :
print("恭喜你答对了,可以抱得傻姑娘回家!")
break
elif user_guess < age :
print("try bigger")
else :
print("try smaller")
count += 1
-
求1~100间所有偶数的和(亦可奇数和,使用while循环写)。
答案: 1, count = 0 for i in range(1, 100): if i % 2 == 0: count += i print(count) 2, count = 0 for i in range(0, 100, 2): count += i print(count) 3 , sum([i for i in range(1, 100) if i%2==0])
-
从键盘接收一百分制成绩(0100),要求输出其对应的成绩等级AE。其中,90分以上为’A’,8089分为’B’,7079分为’C’,60~69分为’D’,60分以下为’E’。(编程题)
答案: p = int(input("请输入分数:")) if p >= 90: print("A") elif 80 <= p and p <= 89: print("B") elif 70 <= p and p <= 789: print("C") elif 60 <= p and p <= 69: print("D") else: print("E")
Python基础 C卷
- "is"和“==”的区别
is是对比地址,==是对比值
- 声明变量注意事项有哪些?(口述)
答案:
模块名,包名 :小写字母, 单词之间用户_分割。
类名:首字母大写。
全局变量: 大写字母, 单词之间用户_分割。
普通变量: 小写字母, 单词之间用户_分割。
函数: 小写字母, 单词之间用户_分割。
实例变量: 以_开头,其他和普通变量一样 。
私有实例变量(外部访问会报错): 以__开头(2个下划线),其他和普通变量一样 。
专有变量: __开头,__结尾,一般为python的自有变量(不要以这种变量命名)。
- 深浅copy-引用和copy(),deepcopy()的区别。
答案:
深浅拷贝,即可用于序列,也可用于字典
>>> import copy
>>> X = copy.copy(Y) #浅拷贝:只拷贝顶级的对象,或者说:父级对象
>>> X = copy.deepcopy(Y) #深拷贝:拷贝所有对象,顶级对象及其嵌套对象。或者说:父级对象及其子对象
-
各个数据类型分别是有序的?还是无序的?
答案:
可变类型: list
不可变类型:number, string,tuple, set区分: 是否可以被hash, 可变类型是不可以被hash的
-
输入一年份,判断该年份是否是闰年并输出结果。(该程序可以重复使用 使用while True)(编程题)
注:凡符合下面两个条件之一的年份是闰年。 (1) 能被4整除但不能被100整除。 (2) 能被400整除。
while True:
year= int(input('加班那年是闰年吗'))
if (year%4==0 and year%4 !=100) or year%400==0:
print("你在闰年加班")
else:
print('你加班但并不在闰年')
- 有如下字符串:n = “不再加班”(编程题)
将字符串转换成unicode的字符编码,再将转换的字节重新转换为utf-8的字符编码
n = "不再加班"
new_unicode_n= n.encode()
print(new_unicode_n)
new_utf_n = new_unicode_n.decode()
print(new_utf_n)
- 将列表[‘workman’, ‘steven’, ‘egon’] 中的每一个元素使用 ‘_’ 连接为一个字符串(编程)
答案1:
n=['workman', 'steven', 'egon']
m = ("_").join(n)
print(m)
答案2:
s = ""
n = ['workman', 'steven', 'egon']
for i in n:
s += i
print("_".join(s))
-
自定义两个集合,并求交集,合集,差集。(编程)
a = {1,2,3,4,5}
b = {2,4,6,8,10}数学符号 python符号 代表含义 - 或 \ - 差级,相对补集 ∩ & 交集 ∪ ≠ != 不等于 = == 等于 ∈ in 是成员关系
# 交集
print(a & b)
# 并集
print(a | b)
# 差集
print(a-b)
- 求100以内不能被3整除的所有数,并把这些数字放在列表sum3=[]里,并求出这些数字的总和和平均数。
答案1:
sum3 = []
count = 0
for i in range(101):
if i % 3 != 0:
sum3.append(i)
count += i
print(count)
print(count/3)
答案2:
sum3 = []
total = 0
for i in range(0,101):
if i%3 != 0:
total+=i
sum3.append(i)
print(total)
print(total/len(sum3))
-
根据字典内容打印出下面的形式
可以不打印工整对齐的效果,主要是让学员获取key和value。
{“Development”:“开发小哥”,“OP”:“运维小哥”,“Operate”:“运营小仙女”,“UI”:“UI小仙女”}
效果如下:- 删除了UI
- 修改了Operate
Development --- 开发小哥 OP --- 运维小哥 Operate --- 小仙女
-
假设一年期定期利率为3.25%,计算一下需要过多少年,一万元的一年定期存款连本带息能翻番?
答案: money = 10000 rate = 0.0325 years = 0 while money <= 20000: years += 1 money = money * (1+rate) print(str(years))
-
对列表进行增删改查(查可以是索引,值是否存在列表当中)。(编程)
li = [‘alex’,‘egon’,‘wusir’,‘wen’,‘jing’]答案: li = ['alex', 'egon', 'wusir', 'wen', 'jing'] >> 增加 li.append("yuan") print(li) >> 删除 li.pop(0) li.remove("alex") del li[0] >> 修改 li[3] = "li" >> 查询 print(li.index("egon"))
提高题
- 猜数游戏。预设一个0~9之间的整数,让用户猜一猜并输入所猜的数,如果大于预设的数,显示“猜大了,小一点试试”;小于预设的数,显示“猜小了,大一点试试”,如此循环,直至猜中该数,显示“恭喜!你猜中了!
result = 6
flag = False
while flag==False:
your_guess = int(input(''))
if your_guess > result:
print('猜大了,小一点试试')
continue
elif your_guess<result:
print('猜小了,大一点试试')
continue
elif your_guess==result:
print('恭喜你,猜中了')
flag = True
print('Process end')
- 有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。
参照方法:
count = 0
a = [1,2,3,4]
for i in a:
for j in a:
for k in a:
if i!=j and j !=k and i !=k:
count+=1
print("{}{}{}".format(i,j,k))
print(count)
- 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。
while True:
number = int(input("请输入四位数的电话号码:"))
a = number1 = number // 1000
b = number2 = number % 1000 // 100
c = number3 = number % 100 // 10
d = number4 = number % 10
number1 = (d + 5) % 10
number2 = (c + 5) % 10
number3 = (b + 5) % 10
number4 = (a + 5) % 10
num = number1 * 1000 + number2 * 100 + number3 * 10 + number4
print(num)
- 求100以内的素数和。
#!/usr/bin/python
#-*- coding: UTF-8 -*-
lower = int(input("输入区间最小值: "))
upper = int(input("输入区间最大值: "))
for num in range(lower,upper + 1):
# 素数大于 1
if num > 1:
for i in range(2,num):
if (num % i) == 0:
break
else:
print(num)
5 . 二进制,十进制,十六进制互相转换(计算题使用计算器,别用编程的内置方法)
6. python2和python3的默认字符编码是什么?
python 2 ASCII; Python3 内存是unicode |
a= 4.3333
b = int(a)
print(b)
- 计算"21days"字符串的长度。
a= "21days"
print(len(a))
- 元祖,列表,字典有没有长度的限制?
目前python这些列表,字典和元祖是没有长度限制的。但是他们会受到计算机内存的限制,发生crash。
- 集合的特性。
因为集合中的元素是不可重复的,且无序的,所以不支持索引,切片,连接。
集合只支持成员操作符 迭代(for循环)