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))

 

posted @ 2018-04-02 20:35  一只小小的寄居蟹  阅读(780)  评论(0编辑  收藏  举报