Python小白入门练习试题

如下是三套Python101的检测题,你可以从中任选一套,如果你可以在40分钟之内完成,请跳过Python基础开始你的进阶之路;如果你磕磕巴巴60分钟都没有完成,请果断从0开始。

Python基础 A卷

  1. “=”,"==",在Python中分别代表什么含义。
    "=":python中赋值操作
    "==":判断数字或字符串是否相等
    "+=":例如 a+=1 等于 a = a + 1  
  1. 两个变量值的关系?(口述)(1分钟)

    • n1 = 123456

    • n2 = n1

      答案:
      n1和n2的数值相等,内存地址相等
      n2的数值更改不会带动n1数值更改
      
  2. “地铁故事” 分别用 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个字节
    

    解析:

    1. 编码的故事要从ASCII码说起,ascii 不支持中文。在计算机的存储单元中,一个ASCII码值占一个字节(8个二进制位),其最高位(b7)用作奇偶校验位。
    2. 既然你英语国家可以做ASCII,那我们中国就也可以做我们的GBK。 GBK、GB2312收编的汉字占2个字节。因为GBK是国人编码,我国人制定的规则是:GBK编码,一个汉字占2个字节,
    3. 中国有中国的GBK,日韩越有日韩越的GBK,编码就不统一了。Unicode应运而生,Unicode其实是一个字符集。缺点是:占用的内存空间比ASCII大1倍。常用中文字符用utf-8编码占用3个字节(大约2万多字),但超大字符集中的更大多数汉字要占4个字节(在unicode编码体系中,U+20000开始有5万多汉字)。
    4. 因为如上缺点“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来间接实现。

  1. 简述Python中的几种数据类型。

    答案:
      数字,字符串,列表,元组,字典,集合
    
  2. 数据类型的可变与不可变分别有哪些?

    答案:
      可变类型: list
      不可变类型:number, string,tuple, set
      区分: 是否可以被hash, 可变类型是不可以被hash的
    
  3. 元祖,列表,字典有没有长度的限制?

    答案:
        现在,这三个数据是没有长度限制的,但是会受到用户使用的系统的限制。
       eg:
       32位:536870912     
       64位:1152921504606846975
    
  4. 列表 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:]
      
  5. 将字符串s = “www.yanpeizhen.com”给拆分成列表:li=[‘www’,‘yanpeizhen’,‘com’]

    答案:
       print(s.split("."))
       或者
       c= s.split('.')
       print(c)
    
  6. 对字典进行增删改查(编程)

    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"]
    
  7. 计算1+2+3…+98+99+100 (注意不要用等差公式)。

    答案:
    
        sum = 0
        for i in range(1,101):  #range的范围 顾头不顾尾
            sum += i
    
        print(sum)
    
  8. 制作趣味模板程序。

需求:等待用户输入名字、地点、爱好,根据用户的名字和爱好进行任意现实
如:天真烂漫的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))
  1. 写一个三次验证登陆(编程):实现用户输入用户名和密码,当用户名为 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卷

  1. 解释’and’,‘or’,‘not’

    答案:
    not –表示取反运算。
    and –表示取与运算。
    or –表示取或运算。
    
    优先级是 not>and>or。
    and从左到右计算表达式,若所有值均为真,则返回最后一个值,若存在假,返回第一个假值。
    真 假   假
    真 真   真
    假 假   假
    假 真   假
    
    or 也是从左到右计算表达式,返回第一个为真的值
    真 假   真
    真 真   真
    假 假   假
    假 真   真    
    
  2. 元祖和列表的区别。

    答案:
      1, 两者的表达形式不一样 ,list  为 [], tuple 为().
      2,list  为 可变类型, tuple 为不可变类型
    
  3. 列举布尔值为False的情况。

    答案:
      [],{},None,False,'',数字0  
    
  4. python2和python3对于long(长整形)的区别。

    答案:

    python2 中数字类型分为 int(整型) 和 long(长整型)。 但是要看操作系统的位数

    32位:2…31之后就是长整型.
    64位 2…63 9223372036854775808L

    python3 中只有整型

  5. 变量命名规范有哪些?

答案:
模块名,包名 :小写字母, 单词之间用户_分割。
类名:首字母大写。
全局变量: 大写字母, 单词之间用户_分割。
普通变量: 小写字母, 单词之间用户_分割。
函数: 小写字母, 单词之间用户_分割。
实例变量: 以_开头,其他和普通变量一样 。
私有实例变量(外部访问会报错): 以__开头(2个下划线),其他和普通变量一样 。
专有变量: __开头,__结尾,一般为python的自有变量(不要以这种变量命名)。

  1. 阐述一下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 的过程。反之亦然。

  1. 内存空间的考核。

    • 问修改前后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')
      

答案: 不变,因为是字典;不变因为是列表。

  1. 切割字符串s = “wewewcity"为"wewew”,“city”(编程)

    答案:
       print(s[:5])
       print(s[-4:])      
    
  2. 猜年龄游戏。假如女主角年龄为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. 求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, 1002):
              count += i
      print(count)
    
    3sum([i for i in range(1100) if i%2==0])  
    
  2. 从键盘接收一百分制成绩(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卷

  1. "is"和“==”的区别

is是对比地址,==是对比值

  1. 声明变量注意事项有哪些?(口述)

答案:
模块名,包名 :小写字母, 单词之间用户_分割。
类名:首字母大写。
全局变量: 大写字母, 单词之间用户_分割。
普通变量: 小写字母, 单词之间用户_分割。
函数: 小写字母, 单词之间用户_分割。
实例变量: 以_开头,其他和普通变量一样 。
私有实例变量(外部访问会报错): 以__开头(2个下划线),其他和普通变量一样 。
专有变量: __开头,__结尾,一般为python的自有变量(不要以这种变量命名)。

  1. 深浅copy-引用和copy(),deepcopy()的区别。

答案:
深浅拷贝,即可用于序列,也可用于字典

>>> import copy

>>> X = copy.copy(Y)      #浅拷贝:只拷贝顶级的对象,或者说:父级对象

>>> X = copy.deepcopy(Y)  #深拷贝:拷贝所有对象,顶级对象及其嵌套对象。或者说:父级对象及其子对象
  1. 各个数据类型分别是有序的?还是无序的?

    答案:
    可变类型: list
    不可变类型:number, string,tuple, set

    区分: 是否可以被hash, 可变类型是不可以被hash的

  2. 输入一年份,判断该年份是否是闰年并输出结果。(该程序可以重复使用 使用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('你加班但并不在闰年')
  1. 有如下字符串: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)
  1. 将列表[‘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))
  1. 自定义两个集合,并求交集,合集,差集。(编程)

    a = {1,2,3,4,5}
    b = {2,4,6,8,10}

    数学符号 python符号 代表含义
    - 或 \ - 差级,相对补集
    & 交集
    != 不等于
    == 等于
    in 是成员关系
  # 交集
      print(a & b)
  # 并集
      print(a | b)
  # 差集
      print(a-b)
  1. 求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))
  1. 根据字典内容打印出下面的形式
    可以不打印工整对齐的效果,主要是让学员获取key和value。
    {“Development”:“开发小哥”,“OP”:“运维小哥”,“Operate”:“运营小仙女”,“UI”:“UI小仙女”}
    效果如下:

    1. 删除了UI
    2. 修改了Operate
      Development --- 开发小哥
      OP          --- 运维小哥
      Operate     --- 小仙女
    
  2. 假设一年期定期利率为3.25%,计算一下需要过多少年,一万元的一年定期存款连本带息能翻番?

    答案:
      money = 10000
      rate = 0.0325
      years = 0
      while money <= 20000:
          years += 1
          money  = money * (1+rate)
      print(str(years))
    
  3. 对列表进行增删改查(查可以是索引,值是否存在列表当中)。(编程)
    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"))
    
    

提高题

  1. 猜数游戏。预设一个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. 有四个数字: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)
  1. 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上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)
  1. 求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
7. 浮点数转换整形。
a= 4.3333
b = int(a)
print(b)
  1. 计算"21days"字符串的长度。
       a= "21days"
        print(len(a))
  1. 元祖,列表,字典有没有长度的限制?

目前python这些列表,字典和元祖是没有长度限制的。但是他们会受到计算机内存的限制,发生crash。

  1. 集合的特性。

因为集合中的元素是不可重复的,且无序的,所以不支持索引,切片,连接。
集合只支持成员操作符 迭代(for循环)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章