python基础

# 第一阶段考试题(答案)

1. 简述解释型语言和编译型语言的区别。

   ```

   编译器和解释器的作用是将各编程语言的代码进行翻译,从而使得计算机能够识别并执行。

   编译器,全文翻译,将代码编译成`临时文件`,再执行临时文件。

   解释器,实时翻译,对代码实行边解释边执行。

   ```

2. 罗列你听说过的编程语言。

   ```

   Java、C、C++、PHP、JavaScript、C#、Golang

   ```

3. 简述位和字节的关系?

   ```

   1字节等于8位

   ```

4. 简述你理解的 ascii、unicode、utf-8、gbk 编码。

   ```

   ascii编码、unicode字符集、utf-8编码、gbk编码本质上都是字符与二进制的关系。

   - ascii,只有256种对照关系,只包含英文、符号等。

   - unicode,万国码,包含了全球所有文字和二进制之间的一个对应关系。(ucs2或ucs4)

   - utf-8,对unicode字符集的码位进行压缩处理,间接也维护了字符和二进制的对照表。

   - gbk,包含中国、日本韩国等亚洲国家的文字和二进制的对照表。

   ```

5. py2和py3默认解释器编码分别是什么?如何在代码中修改解释器的编码?

   ```

   py2:ascii

   py3:utf-8

    

   在文件的顶部通过设置: # -*- coding:编码 -*- 实现修改。

   ```

6. pass的作用?

   ```

   pass相当于空行,程序啥都不做。 用于保持语法的完整性。

   ```

7. is和==的区别?

   ```

   is,比较内存地址是否一致。

   ==,比较值是否相等。

   ```

8. 列举你了解的Python2和Python3的区别。

   ```python

   - 默认解释器编码

   - 整型和长整形

   - 地板除取整、取小数

   - 字典的keys()/values()/items() 获取的值不同。

   - py2,字典无序;py3.6+ 字典有序。

   ```

9. 变量名的命名规范有哪些?

   ```

   三条规范(必须遵循,否则定义变量会报错)

     - 变量名只能由 字母、数字、下划线 组成。

     - 变量名不能以数字开头。

     - 变量名不能是Python内置关键字

   二条建议(遵循可以显得更加专业,不遵循也可以正常运行不报错)

    - 下划线命名法,多个单词表示的变量名用下划线连接(均小写)

    - 见名知意,通过阅读变量名就能知道此变量的含义。

   ```

10. 都有那些值转换为布尔值时为False?

    ```

    0

    ""

    [] or list()

    () or tuple()

    set()

    None

    {} or dict()

    ```

11. 简述如下三个变量的区别。

    ```python

    v1 = (1)    # 整型 1

    v2 = (1,)   # 元组

    v3 = 1      # 整型 1

    ```

12. 你所学的数据类型中哪些是可变的类型?

    ```

    list

    set

    dict

    ```

13. 你所学的数据类型中哪些是可哈希的类型?

    ```

    int

    bool

    float

    str

    tuple

    ```

14. 你所学的数据类型(容器)中哪些是有序的?

    ```

    list

    tuple

    dict(py3.6之后)

    ```

15. 列举你能记得的如下数据类型的方法(独有功能)。

    - str

      ```

      strip

      split

      join

      startswith

      endswith

      upper

      lower

      ...

      ```

    - list

      ```

      append

      insert

      remove

      extend

      sort

      reverse

      ...

      ```

    - dict

      ```

      get

      keys

      values

      items

      setdefault

      update

      ...

      ```

16. 请将字符 `name = "wupeiqi"` 翻转。

    ```

    data = name[::-1]

    print(data)

    ```

17. 进制之间如何进行转换?

    ```python

    - 十进制转其他:bin、oct、hex

    - 其他进制转十进制:int("其他进制",base=2或8或16)

    ```

18. 循环过程中 break和continue的作用是什么?

    ```python

    break,终止所有循环。

    continue,停止当前循环开始下次循环。

    ```

19. 看代码写结果

    ```python

    v1 = 1 or 9 and 88 or [11,22] and (1,2,3)

     

    v2 = 1>5 or "alex" and {"K1":"v1"} or 888

     

    print(v1,v2) # 1    {'K1': 'v1'}

    ```

20. 看代码写结果

    ```python

     info = [

         {'k1':(1),'k2':{'k9':'luffy','k10':'武沛齐'}},

         (11,22,33,44),

         {199,2,3,4,5},

         True,

         ['李杰','alex', { 'extra': ("alex",[18,20],'eric') } ]

    ]

    ```

    - 利用索引获取 "luffy"

      ```python

      info[0]["k2"]["k9"]

      ```

    - 利用索引获取 44

      ```python

      info[1][-1]

      ```

    - 删除k10对应的键值对

      ```python

      del info[0]['k2']['k10']

      ```

    - 在 `{ 'extra': ("alex",[18,20],'eric') }` 字典中添加一个键值对 `"name":"武沛齐"`

      ```python

      info[-1][2]["name"] = "武沛齐"

      ```

    - 在集合` {199,2,3,4,5} `中添加一个 "北京"

      ```python

      info[2].add("北京")

      ```

    - 将列表中的True修改为 "真"

      ```python

      info[3] = "真"

      ```

    - 在列表 `[18,20]`的第0个索引位置插入 666

      ```python

      info[-1][-1]["extra"][1].insert(0,666)

      ```

       

21. 判断下面的代码是否正确?正确的话则写出结果,否则标明错误。

    ```python

    v1 = (11,22,33)                                 # 正确 (11,22,33)

    v2 = (11)                                       # 正确 11

    v3 = {11,2,33}                                  # 正确 {11,2,33}

    v4 = {11,2,("alex","eric"),33}                  # 正确 {11,2,("alex","eric"),33}

    v5 = {11,2,("alex",{"北京","上海"},"eric"),33}   # 错误

    ```

22. 看代码写结果

    ```python

    v1 = [11,22,33]

    v2 = [11,22,33]

    v1.append(666)

     

    print(v1)  # [11,22,33,666]

    print(v2)  # [11,22,33]

    ```

23. 看代码写结果

    ```python

    v1 = [11,22,33]

    v2 = v1

    v1.append(666)

     

    print(v1) # [11,22,33,666]

    print(v2) # [11,22,33,666]

    ```

24. 看代码写结果

    ```python

    v1 = [1,2,3,4,5]

    v2 = [v1,v1,v1]

     

    v2[1][0] = 111

    v2[2][1] = 222

     

    print(v1) # [111,222,3,4,5]

    print(v2) # [[111,222,3,4,5],[111,222,3,4,5],[111,222,3,4,5]]

    ```

25. 写代码实现,循环提示用户输入内容(Q或q终止),并将内容用 "_" 连接起来。

    ```python

    data_list = []

    while True:

        text = input("请输入(Q/q退出):")

        if text.upper() == "Q":

            break

        data_list.append(text)

     

    result = "_".join(data_list)

    print(result)

    ```

26. 写代码实现,将IP转换为整数。

    > 如 10.3.9.12 转换规则为:

    >         10            00001010

    >          3             00000011

    >          9             00001001

    >         12            00001100

    > 再将以上二进制拼接起来,然后再进行一次翻转。

    >

    > 最终将翻转之后的二进制转换为整型。

    ```python

    ip = "10.3.9.12"

     

    data_list = []

    num_list = ip.split(".")

    for num in num_list:

        item = bin(int(num))[2:].zfill(8)

        data_list.append(item)

     

    reverse_data = "".join(data_list)[::-1]

    result = int(reverse_data, base=2)

    print(result)

    ```

27. 写代码实现,车牌的区域划分。

    ```python

    car_list = ['鲁A32444', '沪B12333', '京B8989M', '京C49678', '黑C46555', '晋B25041', '沪C34567']

     

    # 根据以上代码获取各省车牌数量,例如:info = {"沪":2,"京":2 ...}

    ```

    ```python

    car_list = ['鲁A32444', '沪B12333', '京B8989M', '京C49678', '黑C46555', '晋B25041', '沪C34567']

     

    info = {}

     

    for item in car_list:

        city = item[0]

        if city in info:

            info[city] = info[city] + 1

        else:

            info[city] = 1

     

    print(info)

    ```

    ```python

    car_list = ['鲁A32444', '鲁B12333', '京B8989M', '京C49678', '黑C46555', '晋B25041', '沪C34567']

     

    info = {}

    for item in car_list:

        city = item[0]

        num = info.get(city, 0)

        info[city] = num + 1

    print(info)

    ```

     

28. 写代码实现,数据格式化处理。

    ```python

    text = """id,name,age,phone,job

    1,alex,22,13651054608,IT

    2,wusir,23,13304320533,Tearcher

    3,老男孩,18,1333235322,IT"""

     

    # 将上述数据处理为如下格式的结果:

    #    info = [  {'id':'1','name':'alex','age':'22','phone':'13651054608','job':'IT'},.... ..  ]

     

    # 提示:text的内容是根据 \n 分割(\n表示回车换行)。

    ```

    ```python

    text = """id,name,age,phone,job

    1,alex,22,13651054608,IT

    2,wusir,23,13304320533,Tearcher

    3,老男孩,18,1333235322,IT"""

     

    data_list = text.split("\n") # ["id,name,age,phone,job","1,alex,22,13651054608,IT"... ]

    header_list = data_list[0].split(",") # ["id","name","age"... ]

    info = []

    for index in range(1, len(data_list)):

        item = {}

        row = data_list[index] # 1,alex,22,13651054608,IT

        row_item_list = row.split(",") # ["1","alex","22",...]

        for i in range(len(row_item_list)):

            item[header_list[i]] = row_item_list[i]

        info.append(item)

    print(info)

    ```

29. 写代码实现 累乘计算器。

    ```python

    content = input("请输入内容:") # 用户可能输入 5*9*99.... 或 5* 9 * 10 * 99 或 5 * 9 * 99... (不用考虑非数字的情况)

     

    # 补充代码实现

    result = 1

    num_list = content.split("*") # ["5","9","99"]

    for num in num_list:

        # result *= int(num)

        result = result * int(num)

     

    print(result)

    ```

30. 使用for循环实现输出 9*9 乘法表

    ```

    1*1

    2*1 2*2

    3*1 3*2 3*3

    4*1 4*2 4*3 4*4

    5*1 5*2 5*3 5*4 5*5

    6*1 6*2 6*3 6*4 6*5 6*6

    7*1 7*2 7*3 7*4 7*5 7*6 7*7

    8*1 8*2 8*3 8*4 8*5 8*6 8*7 8*8

    9*1 9*2 9*3 9*4 9*5 9*6 9*7 9*8 9*9

     

     

    1*1

    1*2 2*2

    1*3 2*3 3*3

    1*4 2*4 3*4 4*4

    1*5 2*5 3*5 4*5 5*5

    1*6 2*6 3*6 4*6 5*6 6*6

    1*7 2*7 3*7 4*7 5*7 6*7 7*7

    1*8 2*8 3*8 4*8 5*8 6*8 7*8 8*8

    1*9 2*9 3*9 4*9 5*9 6*9 7*9 8*9 9*9

    ```

    ```python

    print("666",end=" ")

    print("999",end=" ")

    666 999

    ```

    ```python

    for i in range(10):

        # 0,1,2,3,4,5,6,7,8

        for j in range(i): # []  [0] [0,1] [0,1,2]

            # 0,1

    ```

    ```python

    for i in range(1, 10):

        # 1 2 3 4 5 6 7 8 9

        for j in range(1, i + 1): # [1]  [1,2]  [1,2,3]  [1,2,3,4] [1,2,3,4,5] ... [1,2,3,4...9 ]

            # j * i

            # 1 * 1

            # 1 * 2  2 * 2

            # 1 * 3 2 * 2

            text = "{}*{}".format(j, i)

            print(text, end=" ")

        print("")

    ```

31. 补充代码实现《棋牌游戏11点》

    需求:

    - 生成一副扑克牌(自己设计扑克牌的结构,小王和大王可以分别用14、15表示 )

    - 3个玩家

      ```python

      user_list = ["alex","武沛齐","李路飞"]

      ```

    - 发牌规则

      - 默认先给用户发一张牌,其中 J、Q、K、小王、大王代表的值为0.5,其他就是则就是当前的牌面值。

      - 用户根据自己的情况判断是否继续要牌。

        - 要,则再给他发一张。

        - 不要,则开始给下个玩家发牌。

      - 如果用户手中的所有牌相加大于11,则表示爆了,此人的分数为0,并且自动开始给下个人发牌。

    - 最终计算并获得每个玩家的分值,例如:

      ```python

      result = {

          "alex":8,

          "武沛齐":9,

          "李路飞":0

      }

      ```

    必备技术点:随机抽排

    ```python

    import random

     

    total_poke_list = [("红桃", 1), ("黑桃", 2), ("大王", 15), ("小王", 14)]

     

    # 随机生成一个数,当做索引。

    index = random.randint(0, len(total_poke_list) - 1)

    # 获取牌

    print("抽到的牌为:", total_poke_list[index])

    # 踢除这张牌

    data = total_poke_list.pop(index) # ("红桃", 1)

     

    print("抽完之后,剩下的牌为:", total_poke_list)

    ```

     

    代码示例:(请补充实现)

    ```python

    import random

     

    result = {}

     

    user_list = ["alex", "武沛齐", "李路飞"]

     

    # 1. 生成一副扑克牌

    total_poke_list = [ ("小王",14),("大王",15) ]

color_list = ["红桃", "黑桃", "方片", "梅花"]

    num_list = []

for num in range(1, 14):

        num_list.append(num)

    for color in color_list:

        for num in num_list:

            item = (color, num,)

            total_poke_list.append(item)

     

    # 2. 发牌 -> ["alex", "武沛齐", "李路飞"]

    for user in user_list:

        # 给用户发第一张牌

        score = 0

        index = random.randint(0, len(total_poke_list) - 1)

        poke = total_poke_list.pop(index) # ("花色",值)

        # JQK表示 0.5 点

        value = poke[1]

        if poke[1] > 10:

            value = 0.5

        score += value

        print("给{}发的牌:{}{},此刻所有牌面值总和:{}".format(user, poke[0], poke[1], score))

         

        # 用户选择是否继续要

        while True:

            choice = input("是否继续要牌(Y/N)?")

            choice = choice.upper()

     

            # 用户输入的不是Y/N/y/n

            if choice not in {"Y", "N"}:

                print("输入错误,请重新输入。")

                continue

     

            # 用户输入N,不继续要牌了

            if choice == "N":

                print("{}不要拍了".format(user))

                break

     

            # 继续要拍(再随机抽取一张)

            index = random.randint(0, len(total_poke_list) - 1)

            poke = total_poke_list.pop(index)

            value = poke[1]

            if poke[1] > 10:

                value = 0.5

            score += value

             

            print("给{}发的牌:{}{},此刻所有牌面值总和:{}".format(user, poke[0], poke[1], score))

     

            # 大于11点,则用户爆了且分值变为0

            if score > 11:

                print("用户{}爆了".format(user))

                score = 0

                break

     

        result[user] = score

     

    print(result)

    ```

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值