Python基础-练习题
练习一
#!/usr/bin/env python3 # -*- coding: utf-8 -*- # @Time : 2018/3/12 9:07 # @Author : hyang # @File : 第一套.py # @Software: PyCharm # 第一套题 # 1. 分别解释"=","==","+="的含义(口述) """ 答:=是赋值语句 ==是运算符判断两个对象的值是否相等 +=是进行相加运算后,再赋值比如a+=1 等于a = a+1 """ # 2. 两个变量值的关系?(口述) # n1 = 123456 # n2 = n1 """ n2值=n1值 n2指向n1值的所在地址,即id(n2)=id(n1) """ # 3. 请写出 “路飞学城” 分别用 utf-8 和 gbk 编码所占的位数(口述) # utf-8占3个字节, gbk 编码占两个字节 # 4. 简述Python中的几种数据类型(口述) """ 数字型(整型,float),布尔型,字符串,列表,元祖,字典,集合 """ # 5. 数据类型的可变与不可变分别有哪些?(口述) """ 可变:value变化后,id没有变化(字典,集合,列表) 不可变:value变化后,id变化(数字型(整型,float),布尔型,字符串,元祖) """ # 6. 元祖,列表,字典有没有长度的限制?(口述) """ 没有限制 """ # 7. 列表['alex','egon','yuan','wusir','666'](编程) # 1.把666替换成999 # 2.获取"yuan"索引 # 3.假设不知道前面有几个元素,分片得到最后的三个元素( [-3:] ) li = ['alex','egon','yuan','wusir','666'] li[-1] = '999' print(li) print(li.index('yuan')) print(li[-3:]) # 8. 将字符串“www.luffycity.com”给拆分成列表:li=['www','luffycity','com'] (编程) s = "www.luffycity.com" print(s.split(",")) # 9. 对字典进行增删改查(编程) # {"Development":"开发小哥","OP":"运维小哥","Operate":"运营小仙女","UI":"UI小仙 # 女"} d = {"Development":"开发小哥","OP":"运维小哥","Operate":"运营小仙女","UI":"UI小仙女"} d["artist"]="美工" d.setdefault("saler","销售") print(d) d.pop("saler") print(d) d["artist"]="美工小姐" print(d) print(d["artist"]) print(d.get("OP")) # 10. 计算1+2+3...+98+99+100 (编程题) v_sum = 0 for i in range(101): v_sum +=i print(v_sum) # 11. 制作趣味模板程序(编程题) # 需求:等待用户输入名字、地点、爱好,根据用户的名字和爱好进行任意现实 # 如:敬爱可爱的xxx,最喜欢在xxx地方干xxx name = input("user:") address = input("address:") hobby = input("hobby:") template_str = "敬爱可爱的{name},最喜欢在{address}地方干{hobby}" print(template_str.format(name=name, address=address, hobby=hobby)) # 12. 写一个三次认证(编程) # 1. 实现用户输入用户名和密码,当用户名为 seven 或 alex 且 密码为 123 时,显示登陆成功,否则登陆失败,失败时允许重复输入三次 count = 0 while count < 3: user = input("user:") pwd = input("password:") if ( user == "seven" or user == "alex" ) and pwd == "123": print("登陆成功") break else: print("登陆失败") count += 1 else: print("重复输入三次错误")
练习二
#!/usr/bin/env python3 # -*- coding: utf-8 -*- # @Time : 2018/3/12 10:50 # @Author : hyang # @File : 第二套.py # @Software: PyCharm # 第二套题 # 1. 解释'and','or','not'(口述) """ and 与 x and y 若x为真,则取y值 ,若x为假,则取x值 or 或 x or y 若x为真,则取x值 ,若x为假,则取y值 not 非 not x 若x为真False,否则为True """ # 2. 元祖和列表的区别(口述) """ 元祖是不可变类型 列表是可变类型 """ # 3. 列举一堆布尔值为False的情况(口述) """ [],{},None,False,'',数字0 """ # 4. python2和python3对于long(长整形)的区别。(口述) """ python3对于long都是int python2中int值 在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1 在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1 整数发生溢出,Python会自动将整数数据转换为长整数 """ # 6. 变量命名规范 ?(口述) """ 由字母,数字,下划线组成 数字不能开头 python语言中关键字不能作为变量,如if """ # 7. 阐述一下unicode和utf-8的区别(或者unicode在python3的作用)(口述) """ unicode对字符占2个字节 utf-8兼容ASCII码,对于中文字符占3个字节,ASCII码中的字符占1个字节 在python3中,所有字符串在内存中都为unicode编码,文件默认为utf-8编码,读取到内存中转换为unicode编码 Python2中,有str和unicode两个类型,str编码为默认为文件头编码, 如文件头编码为utf-8,字符串已utf-8形式存放,系统不会自动转换为unicode编码,在windows系统中会出现乱码,因为 windows默认字符为GBK,GBK不兼容utf-8 u开头的字符串存为unicode编码形式 转换时需要先decode为unicode编码,在encode为需要编码 """ # 8. 内存空间的考核。(口述) # 问修改前后info的id是否改变 """ 不变:字典为可变数据类型 """ # 问修改前后info['alex']['hobbies']的id是否改变 # info['alex']['hobbies'].append('play') """ 不变:info['alex']['hobbies']列表为可变数据类型 """ info={ 'egon':{'pwd':'123','hobbies':['play','music','read']}, 'alex':{'pwd':'1234','hobbies':['music','read']}, 'wupeiqi':{'pwd':'135','hobbies':['read',]}, } print(id(info)) info['egon']['pwd']='456' print(id(info)) print(id(info['alex']['hobbies'])) info['alex']['hobbies'].append('play') print(id(info['alex']['hobbies'])) # 9. 切割字符串"luffycity"为"luffy","city"(编程) s = "luffycity" ind = s.index("city") print(s[:ind], s[ind:],) # 10. 猜年龄游戏(编程题) # # 优化猜年龄的游戏,允许用户最多猜3次,中间猜对了,结束 # 如果再想玩,用户输入Y,可以再玩 count = 0 age = 26 while count < 3: guess_age = int(input('input age:->')) if guess_age == age: print("恭喜你答对了,可以抱得傻姑娘回家!") break elif guess_age > age: print('bigger') elif guess_age < age: print('smaller') count += 1 if count == 3: input_key = input('猜的次数已经达到上限,若想继续请输入Y|y,否则按任意键退出') if input_key.strip().lower() == 'y': count = 0 else: break # 11. 求1~100间所有偶数的和(亦可奇数和,使用while循环写)(编程题)。 v_sum, count = 0, 0 v_str = "" while count < 101: if count % 2 == 0: v_sum += count v_str = v_str + "+" + str(count) count += 1 print(v_str[1:],v_sum) # 12. 从键盘接收一百分制成绩(0~100),要求输出其对应的成绩等级A~E。其中,90分以上 # 为'A',80~89分为'B',70~79分为'C',60~69分为'D',60分以下为'E'。(编程题) while True: grade = input("input grade->:") if grade.isdigit(): grade = int(grade) if grade < 101: if grade > 89: print("A") elif grade > 79: print("B") elif grade > 69: print("C") elif grade > 59: print("D") else: print("E") else: print("grade小于101,大于0") else: print("输入数字")
练习三
#!/usr/bin/env python3 # -*- coding: utf-8 -*- # @Time : 2018/3/12 14:27 # @Author : hyang # @File : 第三套.py # @Software: PyCharm # 1. "is"和“==”的区别(口述) """ is 是比较id值是否相等 == 是比较两个对象的值 """ # 2. 声明变量注意事项有哪些?(口述) """ 数字不能开头 不能使用python关键字 """ # 3. 深浅copy-引用和copy(),deepcopy()的区别(口述) """ 对于嵌套列表 浅拷贝只复制了第一层,其他层公用 深拷贝复制了所有层 >>> a = [1,2,3,['h','l']] >>> b = a.copy() >>> print(id(a),id(b)) 5631432 49800584 >>> print(id(a[0]),id(b[0])) 503100480 503100480 >>> a[0]=8 >>> print(a,b) [8, 2, 3, ['h', 'l']] [1, 2, 3, ['h', 'l']] >>> print(id(a),id(b)) 5631432 49800584 >>> print(id(a[3]),id(b[3])) 52671560 52671560 >>> a[3][0]='w' >>> print(a[3],b[3]) ['w', 'l'] ['w', 'l'] >>> >>> c = copy.deepcopy(a) >>> c [8, 2, 3, ['w', 'l']] >>> a [8, 2, 3, ['w', 'l']] >>> id(c) 49870024 >>> id(a) 5631432 >>> id(c[3]) 49904584 >>> id(a[3]) 52671560 """ # 4. 各个数据类型分别是有序的?还是无序的? """ 字符串,列表,元祖,数字类型是有序的 集合和字典是无序的 """ # 5. 输入一年份,判断该年份是否是闰年并输出结果。(该程序可以重复使用 使用while # True)(编程题) # 注:凡符合下面两个条件之一的年份是闰年。 (1) 能被4整除但不能被100整除。 (2) # 能被400整除。 # while True: # year = int(input('input year: ')) # if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0: # print(year, "是闰年") # else: # print(year, "不是闰年") # 6. 有如下字符串:n = "路飞学城"(编程题) # 将字符串转换成utf-8的字符编码,再将转换的字节重新转换为utf-8的字符编码 # 将字符串转换成gbk的字符编码,再将转换的字节重新转换为utf-8的字符编码 n = "路飞学城" print(n.encode("utf-8")) print(n.encode("utf-8").decode().encode("utf-8")) print(n.encode("GBK")) print(n.encode("GBK").decode("GBK").encode("utf-8")) # 7. 将列表['alex', 'steven', 'egon'] 中的每一个元素使用 ‘_’ 连接为一个字符串(编程) a = ['alex', 'steven', 'egon'] print("_".join(a)) # 8. 自定义两个,并求交集,合集,差集。(编程) # 1. a = {1,2,3,4,5} # 2. b = {2,4,6,8,10} a = {1,2,3,4,5} b = {2,4,6,8,10} print(a & b) print(a | b) print(a - b) print(b - a) # 9. 求100以内不能被3整除的所有数,并把这些数字放在列表sum3=[]里,并求出这些数字的 # 总和和平均数。(计算的时候告诉学员,sum是一个关键词,不能当作变量)(编程) sum3 = [] count = 0 while count < 101: if count % 3 !=0: sum3.append(count) count += 1 print(sum(sum3)/len(sum3)) # 10. 根据字典内容打印出下面的形式(编程) # 可以不打印工整对齐的效果,主要是让学员获取key和value。 # {"Development":"开发小哥","OP":"运维小哥","Operate":"运营小仙女","UI":"UI小仙女"} # 效果如下: # 1. 删除了UI # 2. 修改了Operate # 1. Development --- 开发小哥 # 2. OP --- 运维小哥 # 3. Operate --- 小仙女 work_dict = {"Development":"开发小哥","OP":"运维小哥","Operate":"运营小仙女","UI":"UI小仙女"} work_dict.pop("UI") work_dict["Operate"] = "小仙女" for k in work_dict: print("%s%5s%s" %(k, "---", work_dict.get(k))) # 11. 假设一年期定期利率为3.25%,计算一下需要过多少年,一万元的一年定期存款连本带息 # 能翻番?(编程题) cash = 10000 year = 1 while cash < 20000: cash *= (1+3.25/100) year += 1 print(year) # 12. 对列表进行增删改查(查可以是索引,值是否存在列表当中)。(编程) # ['alex','egon','wusir','wen','jing'] l = ['alex','egon','wusir','wen','jing'] l.insert(0,'ago') l.append('shan') print(l) l.pop() l.remove('wen') print(l) l[3] = 'wusirstr' print(l) def search(val,li): for k, v in enumerate(li): if v == val: return k else: return -1 print(search('alex',l))