zoukankan      html  css  js  c++  java
  • Python基础练习


    title : Python基础练习

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

    在Windows中执行,通过cmd 进入相应的Python文件(如hello.py)的路径,在cmd中输入python hello.py就可以执行。
    通过IDE软件,如pycharm,ctrl+shift+F10执行脚本
    在Linux系统中:
    在Python文件的开头需要添加python的路径,不清楚路径通过whichis python3 查看
    执行:Python3 hello.py

    2、 简述位、字节的关系

    位(bit)是计算机中最小的单位,8位代表1字节(byte)

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

    ASCII中每个字符占1个字节,unitcode通常是2个字节,但是如果写的都是英文就会占用过多的空间。UTF-8是可变长字符编码,根据不同数字的大小编码成1-6个字节,通常英文占1个字节,汉字通常占3个字节。GBK编码是中国自己的标准,占2个字节,Windows系统默认中文的就是GBK编码。

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

    UTF-8:48位(utf-8每个中文占用3个字节,总共6个字节)
    GBK:32位(每个中文是2个字节,李杰是4个字节)
    验证:(在Python中使用encode可以转换成相应的编码格式)

    >>> '李'.encode('gbk')
    b'xc0xee'
    >>> '李'.encode('utf-8')
    b'xe6x9dx8e'
    

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

    Python单行注释用 #
    Python多行注释用三对单引号或者三对双引号

    ‘’’
    这是注释
    ‘’’
    “””
    这是注释
    “””
    

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

    首先变量是以字母下划线开头的,在Python中声明变量最好通过下划线分隔,变量名还需要见名知意,不要使用a b c 等简单的变量来代替。

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

    例如定义了变量name=1
    查看name内存地址:

    id(naem)
    

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

    .pyc文件是由.py文件经过编译后生成的字节码文件,其加载速度相对于之前的.py文件有所提高,而且还可以实现源码隐藏,以及一定程度上的反编译。

    19、写代码

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

    
    import getpass
    
    username=input("username:")
    passwd=getpass.getpass("passwd:
    ")  # 输入密码的时候不是明文
    print(username,passwd)
    
    if username=="seven" and passwd=="123":
        print("登录成功")
    else:
        print("登录失败")
    

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

    import getpass
    count = 0    #定义了一个计数器
    while True :
    
    	username=input("username:")
    	passwd=getpass.getpass("passwd:
    ") # 输入密码的时候不是明文
    	print(username,passwd)
    
    	if username=="seven" and passwd=="123":
    		print("登录成功")
    	else:
    		print("登录失败")
    		count += 1
    		if  count >= 3:   #计数器判断登录失败的次数
    			break
    

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

    import getpass
    count = 0
    while True :
    
    	username=input("username:")
    	passwd=getpass.getpass("passwd:
    ") #输入密码的时候不是明文
    	print(username,passwd)
    
    	if username=="seven"or username =='alex' and passwd=="123":   # 修改得位置
    		print("登录成功")
    	else:
    		print("登录失败")
    		count += 1
    		if  count >= 3:
    			break
    

    10、

    a.使用while循环输出2-3+4-5+6...+100的和:

    n = 0
    sum = 0
    sum_odd = 0  # 奇数
    sum_evn = 0  # 偶数
    while n < 100:
        n += 1
        if n%2 == 0:  # 这是偶数
            # continue
            sum_evn += n  # 偶数求和
        if n%2 != 0 :
            sum_odd += n  # 奇数求和
    sum = sum_evn - sum_odd + 1  # 将多减的1减去
    print(sum)
    

    结果:51

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

    sum = 0
    sum_odd = 0  # 奇数
    sum_evn = 0  # 偶数
    for num in range(100):  # range生成0-99
        if num%2 == 0:  # 这是偶数
            sum_evn += num  # 偶数求和后需要取反
        if num%2 != 0 :
            sum_odd += num  # 奇数求和
    sum = sum_odd - sum_evn
    print(sum)
    

    结果是:50

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

    n = 0    # 定义了一个计数器
    while True :
    	n += 1
    	if n < 6 :
    		print(n)  
    	elif n == 6 :
    		continue
    	elif n > 6 and n < 10:
    		print(n)
    	elif n == 10:
    		continue
    	elif n < 13:
    		print(n)
    	if n ==13 :   # 在这里对n进行清零操作
    		n = 0
    

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

    n = 0    #定义一个计数器n
    while n < 100:   
    	n += 1
    	if n%2 == 0:   # 判断是偶数的时,跳过这次循环
    		continue
    	print(n)
    	if n >= 99:  #打印完最后一个奇数后清零  重新进入循环
    		n = 0
    

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

    n = 0    #定义一个计数器n
    while n < 100:   
    	n += 1
    	if n%2 != 0:   # 判断是奇数时,跳过这次循环
    		continue
    	print(n)
    	if n >= 99:  #打印完最后一个奇数后清零  重新进入循环
    		n = 0
    

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

    十进制      二进制
    5			0101
    10			1010
    32		 	100000
    7			0111
    

    12、简述对象和 类的关系(可用比喻的手法)

    • 可以把对象比作一个人,让人做某件事情,不需要考虑中间的过程,只需要给一个指令,然后这个人就把事情做完了。

    • 类可以认为是一个模板

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

     n1	=	123	
     n2	=	123	
    

    变量通常是保存在内存中的,变量不是直接指向的内容,而是先指向存内容123的地址,这个地址就相当于门牌号。

    使用id()查看变量的地址,发现地址是相同的,即便是将n1重新复制给n3,内容也是一样的,说明n1 n2存储的内容指向同一个地址。

    >>> id(n1)
    **1584640928**
    >>> id(n2)
    **1584640928**
    
    >>> n3 = n2
    >>> id(n3)
    **1584640928**
    

    通过查找资料,发现这不是绝对的,在数字很小的时候,id是一样的,是Python对此进行了缓存。但是在pycharm中都是一样的,应该是pycharm本身处理的。

    下面是做的实验测试确定范围(在Python终端中测试):

    >>> n1 = 256
    >>> n2 = 256
    >>> id(n1)
    **1403044928**
    >>> id(n2)
    **1403044928**
    
    >>> n1 = 257
    >>> n2 = 257
    >>> id(n1)
    **34317424**
    >>> id(n2)
    **34320112**   # 此时就不一样了
    
    >>> n1 = -5
    >>> n2 = -5
    >>> id(n1)
    **1403495328**
    >>> id(n2)
    **1403495328**
    >>> ^Z
    
    >>> n1 = -6
    >>> n2 = -6
    >>> id(n1)
    **37378992**
    >>> id(n2)
    **37378960**
    >>>
    

    测试的结果是:缓存的范围是[-5~256]

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

     n1	=	123456	
     n2=	123456	
    
    >>> n1 = 123456
    >>> n2 = 123456
    >>> id(n1)
    **1945328**
    >>> id(n2)
    **37378992**
    >>>
    

    现在n1 n2的地址是不一样的,说明n1 n2 是完全不同的

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

    >>> n1 = 123456
    >>> n2 = n1
    >>> id(n1)
    5874800
    >>> id(n2)
    5874800
    >>>
    

    通过测试发现n1 n2的地址是一样的,说明n1把自己的地址赋值给了n2,这个地址指向的是同一个内容123456

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

    0b101 
    

    二进制最少是3位

    17、布尔值分别有什么?

    • True
    • False

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

     a	=	"alex"	
     b	=	a.capitalize()	  # 首字母大写
     print(a)	
     print(b)	
    
     请写出输出结果:	
    
    "alex"
    "Alex"
    

    capitalize()将变量a转换成大写并赋值给b

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

    name = " aleX"

    a. 移除 name 变量对应的值两边的空格,并输出移除后的内容 ####

    name = " aleX"
    print(name.strip())  # 通过strip()去除空格
    

    b. 判断 name 变量对应的值是否以 "al" 开头,并输出结果

    如果直接用startwith判断的时候,返回得是False,name的开头是空格,通过上一步去除空格后

    name = " aleX"
    name1 = name.strip()
    print(name1.startswith('al'))
    

    c. 判断 name 变量对应的值是否以 "X" 结尾,并输出结果 ####

    name = " aleX"
    print(name.endswith('X'))    # endswith()查看结尾
    

    d. 将 name 变量对应的值中的 “l” 替换为 “p”, 并 输 出 结 果

    
    name = " aleX"
    print(name.replace('l','p'))  # 字符串的替换
    

    e. 将 name 变量对应的值根据 “l” 分割,并输出结果。

    name = " aleX"
    print(name.split('l'))
    
    

    输出结果是:
    [' a', 'eX']

    f. 请问,上一题 e 分割之后得到值是什么类型?

    列表list

    g. 将 name 变量对应的值变大写,并输出结果

    name = " aleX"
    print(name.upper())
    

    ALEX

    h. 将 name 变量对应的值变小写,并输出结果

    name = " aleX"
    print(name.lower())
    

    alex

    i. 请输出 name 变量对应的值的第 2 个字符?

    name = " aleX"
    # print(name.find(2))
    print(name[2])  
    

    Python字符串可以看做list的对象

    j. 请输出 name 变量对应的值的前 3 个字符?

    name = " aleX"
    name = list(name)  # 将字符串转换成一个有序的列表
    print(name)
    conut = 0  # 定义count计数器
    for i in name:
        conut +=1
        if conut < 4 :
            print(i)
    

    **输出的前三个是: 空格 a l **

    k. 请输出 name 变量对应的值的后 2 个字符?

    name = " aleX"
    name = list(name)
    print(name[-2])
    print(name[-1])
    

    还是把字符串转换成列表,直接根据列表的索引值求出

    l. 请输出 name 变量对应的值中 “e” 所在索引位置?

    name = " aleX"
    print(name.index('e'))  # 直接查找字符串的索引值
    

    得出的索引值是3

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

    1. 可以迭代
    for iteration in 'abdefg':
        print iteration
    

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

    使用join直接把列表拼接成字符串,前面的分号可以添加分隔符号

    li = ['alex','eric','rain']
    # print("".join(['alex','eric','rain']))  
    print("".join(li))  # 
    

    结果:alexericrain

    21、写代码,有如下列表,按照要求实现每一个功能

    ** li=['alex','eric','rain'] **

    ** a. 计算列表长度并输出 **

    li = ['alex','eric','rain']
    print(len(li))
    

    ** b. 列表中追加元素 “seven”,并 输 出 添 加 后 的 列 表**

    li = ['alex','eric','rain']
    li.append('seven')   # 在末尾添加
    print(li)
    

    ** c. 请在列表的第 1个位置插入元素“Tony”,并 输 出 添 加 后 的 列 表 **

    li = ['alex','eric','rain']
    li.insert(1,'Tony')  # def insert(self, index, p_object):
    print(li)
    

    忘记怎么用查看下函数的定义,index在前面

    ** d.请修改列表第 2 个位置的元素为 “Kelly”,并 输 出 修 改 后 的 列 表 **

    li = ['alex','eric','rain']
    li[2] = 'Kelly'
    print(li)
    
    

    ** e. 请删除列表中的元素“eric”,并 输 出 修 改 后 的 列 表**

    li = ['alex','eric','rain']
    del li[li.index('eric')]  #  li.index('eric')   # 获取eric的索引值
    print(li)
    
    

    首先获取eric的索引值,然后通过索引来删除

    ** f.请删除列表中的第 2 个元素,并输出删除的元素的值和删除元素后的列表**

    li = ['alex','eric','rain']
    print(li[1])
    del li[1]
    print(li)
    
    

    列表的顺序是从0 开始的

    输出结果:
    eric
    ['alex', 'rain']

    g. 请删除列表中的第 3个元素,并输出删除元素后的列表

    li = ['alex','eric','rain']
    del li[2]
    print(li)
    

    ** h.请删除列表中的第 2 至 4 个元素,并输出删除元素后的列表 **

    li = ['alex','eric','rain']
    del li[1:3]  # 切片删除
    print(li)
    

    切片删除,[start : end : step] start end 是索引 的起始位置,step是步长

    ** i.请将列表所有的元素反转,并输出反转后的列表**

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

    输出结果:
    ['rain', 'eric', 'alex']

    **j. 请使用 for、len、range 输出列表的索引 **

    li = ['alex','eric','rain']
    for num in range(len(li)):     
        print(num,li[num])
    

    输出结果:
    (0, 'alex')
    (1, 'eric')
    (2, 'rain')

    k.请使用 enumerate 输出列表元素和序号(序号从 100 开始)

    li = ['alex','eric','rain']
    for index,item in enumerate(li,100) :  # 这个参数可以指定索引开始的值
        print(index,item)
    

    输出结果:
    (100, 'alex')
    (101, 'eric')
    (102, 'rain')

    **l. 请使用 for 循环输出列表的所有元素 **

    li = ['alex','eric','rain']
    for index in li:
        print(index)
    

    输出结果:
    alex
    eric
    rain

    22、写代码,有如下列表,请按照功能要求实现每一个功能

    li=["hello", 'seven', ["mon", ["h","kelly"],'all'],123,446]

    a. 请输出 “Kelly”

    li = ["hello", 'seven', ["mon", ["h", "kelly"], 'all'], 123, 446]
    name = str(li[2][1][1])
    print(name.capitalize())
    

    Kelly

    b. 请使用索引找到 'all' 元素并将其修改为 “ALL”

    li = ["hello", 'seven', ["mon", ["h", "kelly"], 'all'], 123, 446]
    li= str(li[2][2])
    print(li.upper())
    

    结果:
    ALL

    23、写代码,有如下元组,按照要求实现每一个功能

    ** tu = ('alex', 'eric', 'rain') **

    a.计算元组长度并输出

    tu = ('alex','eric','rain')
    print(len(tu))
    

    结果:3

    ** b. 获取元组的第 2 个元素,并输出**

    tu = ('alex','eric','rain')
    print(tu[1])   # 和列表一样 都是从0 开始
    

    ** c. 获取元组的第 1-2 个元素,并输出**

    tu = ('alex','eric','rain')
    print(tu[0],tu[1])
    

    结果:
    ('alex', 'eric')

    **d. 请使用 for 输出元组的元素 **

    tu = ('alex','eric','rain')
    for menu in tu:
        print(menu)
    

    结果:
    alex
    eric
    rain

    **e. 请使用 for、len、range 输出元组的索引 **

    tu = ('alex','eric','rain')
    for num in range(len(tu)):
        print(num,tu[num])
    

    结果:
    (0, 'alex')
    (1, 'eric')
    (2, 'rain')

    f. 请使用 enumrate 输出元祖元素和序号(序号从 10 开始)

    tu = ('alex','eric','rain')
    for index,item in enumerate(tu,10) :
        print(index,item)
    

    结果:
    (10, 'alex')
    (11, 'eric')
    (12, 'rain')

    24、有如下变量,请实现要求的功能

    tu=("alex",[11, 22, {"k1":'v1',"k2":["age","name"],"k3":(11,22,33)}, 44])

    a. 讲述元祖的特性

    元组tuple拥有列表的特性,唯一不同的是不能修改

    b. 请问 tu 变量中的第一个元素“alex” 是否可被修改?

    不能修改

    c. 请问 tu 变量中的"k2"对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素 “Seven”

    k2是字典dict,可以修改

    tu=("alex",[11,	22,{"k1":'v1',"k2":["age","name"],"k3":(11,22,33)},44])
    tu[1][2].setdefault('k4','Seven')
    print(tu)
    

    j结果:
    ('alex', [11, 22, {'k3': (11, 22, 33), 'k2': ['age', 'name'], 'k1': 'v1', 'k4': 'Seven'}, 44])

    d. 请问 tu 变量中的"k3"对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素 “Seven”

    k3对应的是元组类型tuple,不能修改

    25、字典

    dic ={'k1':"v1", "k2":"v2","k3": [11,22,33]}

    ** a. 请循环输出所有的 key **

    dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
    for menu in dic:
        print(menu)
    

    因为字典是无序的,所以输出的也是无序的

    结果:
    k3
    k2
    k1

    ** b. 请循环输出所有的 value**

    dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
    for menu in dic:
        print(dic[menu])  # 先找到key  然后循环把key的值输出
    

    结果:
    [11, 22, 33]
    v2
    v1

    **d.请在字典中添加一个键值对,"k4": "v4",输出添加后的字典 **

    dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
    dic.setdefault('k4','v4')
    print(dic)
    

    结果:

    {'k3': [11, 22, 33], 'k2': 'v2', 'k1': 'v1', 'k4': 'v4'}

    ** e.请在修改字典中“k1” 对应的值为 “alex” 输 出 修 改 后 的 字 典 **

    dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
    dic['k1']='alex'
    print(dic)
    

    结果:

    {'k3': [11, 22, 33], 'k2': 'v2', 'k1': 'alex'}

    ** f. 请在 k3 对应的值中追加一个元素 44,输出修改后的字典 **

    dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
    dic['k3'].append(44)
    print(dic)
    

    结果:

    {'k3': [11, 22, 33, 44], 'k2': 'v2', 'k1': 'v1'}

    ** g. 请在 k3 对应的值的第 1 个位置插入个元素 18,输出修改后的字典 **

    dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
    dic['k3'].insert(1,18)
    print(dic)
    

    {'k3': [11, 18, 22, 33], 'k2': 'v2', 'k1': 'v1'}

    26、转换

    ** a. 将字符串 s ="alex" 转换成列表 **

    s='alex'
    temp = list(s)
    print(type(temp))
    

    结果:
    <type 'list'>

    ** b.将字符串 s ="alex" 转换成元祖**

    s='alex'
    temp = tuple(s)
    print(type(temp))
    

    结果:

    <type 'tuple'>

    ** b.将列表li=["alex","seven"] 转换成元组**

    li=["alex","seven"]
    temp = tuple(li)
    print(type(temp))
    

    结果:

    <type 'tuple'>

    ** c.将元祖 tu=('Alex', "seven") 转换成列表**

    tu = ('Alex', "seven")
    temp = list(tu)
    print(type(temp))
    

    结果:

    <type 'list'>

    ** d.将列表 li=["alex","seven"] 转换成字典且字典的 key 按照10步长开始向后递增 **

    li = ["alex","seven"]
    temp = {}
    for k,v in enumerate(li,10):  # 用枚举的方式
        temp[k] = v
        print(temp)
    

    结果:

    {10: 'alex'}
    {10: 'alex', 11: 'seven'}

    27、转码

    n="老男孩"

    **a.将字符串转换成 utf-8 编码的字节,并输出,然后将该字节再转换成 utf-8 编码字符串,再输出 **

    n = "老男孩"
    print(n.encode(encoding="utf-8"))
    print(n.encode(encoding="utf-8").decode(encoding="utf-8"))
    

    **b.将字符串转换成 gbk 编码的字节,并输出,然后将该字节再转换成 gbk 编码字符串,再输出 **

    n = "老男孩"
    print(n.encode(encoding="gbk"))
    print(n.encode(encoding="gbk").decode(encoding="gbk"))
    

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

    sum = 0
    for num in range(101):
        sum += num
    print(sum)
    

    29、元素分类

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

    data = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90]
    data_end = {'k1':[],'k2':[]}
    for num in data :
        if num < 66 :
            data_end['k2'].append(num)
        if num > 66 :
            data_end['k1'].append(num)
    print(data_end)
    

    结果:
    {'k2': [11, 22, 33, 44, 55], 'k1': [77, 88, 99, 90]}

    30、购物车

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

    ]

    goods = [
    {"name": "电脑", "price": 1999},
    {"name": "鼠标", "price": 10},
    {"name": "游艇", "price": 20},
    {"name": "美女", "price": 998},
    ]
    my_money = int(input("请输入金额:"))
    while True:#用于循环购买
        for i,good in enumerate(goods,1):#循环商品信息
            print(i,goods[i-1]["name"],goods[i-1]["price"])#打印列表
        user_c = int(input("请选择商品:"))#输入商品序号
        if user_c >0 and user_c <=len(goods) :   #判断输入是否在列表中
            if int(goods[user_c-1]["price"]) <= my_money:#余额大于商品金额
                my_money = my_money - int(goods
                                        [user_c-1]["price"])   #  减商品金额
                print("购买 %s 成功,余额为 %s"%(goods[user_c-1]["name"]
                                                ,my_money))    #打印成功信息
            else:
                print("余额不足!再见!")
                break
        else:
            print("无此商品!")
            continue
    
  • 相关阅读:
    修改ZXing,使之支持条形码识别
    varchar2和varchar的区别
    “PPT Controller” 项目进度
    如何发布打包并发布自己的Android应用(APP)
    C# 新浪微博滚动抓取 WeiboGrab
    小端法与大端法(MD5疑惑解1)
    MD5的实现
    struts标签if应用
    Hibernate annotation 自增主键 与 could not initialize proxy no Session
    新的征程
  • 原文地址:https://www.cnblogs.com/Python666/p/6653909.html
Copyright © 2011-2022 走看看