python开发案例教程-清华大学出版社(张基温)答案(2.3)

目录

习题 2.3

1、判断题

2、选择题

3、填空题

4、代码分析题

5、程序设计题


习题 2.3


1、判断题


(1) 元组与列表的不同仅在于一个是用圆括号作边界符,一个是用方括号作边界符。         (
(2) 列表是可变的,即使它作为元组的元素,也可以修改。                                                 ( ✔ 


2、选择题


(1) Python 语句 s = 'Python';print(s[1:5])的执行结果是(  B   ).

A. Python
B. ytho
C. ython
D. Pyth


(2) Python 语句 list1 = [1,2,3]; list2 =list1;list1[1] = 5;print(list1)的执行结果是(  B  ).
A. [1,2,3]        B. [1,5,3]        C. [5,2,3 ]       D. [1,2,5]

(3) Python 语句 list1 =[1,2,3];list1.append([4,5]);print(len(list1))的执行结果是(  B  ).
A. 3                B. 4                C. 5                D. 6

(4) Python 中列表切片操作非常方便,若 l = range(100),以下选项中正确的切片方式是(  C   ).
A. l[-3]
B. l[-2:13]
C. l[::13]
D. l[2-3]

3、填空题


(1) Python 语句 list1=[1,2,3,4];list2=[5,6,7];print(len(list1 + list2))的执行结果是___7____
(2) Python 语句 print(tuple(range(2)),list(range(2)))的执行结果是__(0, 1) [0, 1]_____
(3) Python 语句 print(tuple([1,3,]),list([1,3,])的执行结果是___(1, 3) [1, 3]____
(4) 设有 Python 语句 t=('a','b','c','d','e','f','g'),则 t[3]的值为___‘d’____、t[3:5]的值为__('d', 'e')____,t[:5]的值为__('a', 'b', 'c', 'd', 'e')___,t[5:]的值为上__('f', 'g')_____、t[2::3]的值为___('c', 'f')____、t[-3]的值为__'e'___、t[:-2]的值为___('g', 'e', 'c', 'a')____、t[-3:-1]的值为__('e', 'f')_____、t[-3:]的值为__('e', 'f', 'g')_____、t[-99: -7]的值为__()_____、t[-99:-5]的值为___('a', 'b')____、t[::]的值为__('a', 'b', 'c', 'd', 'e', 'f', 'g')_____、t[1:-1]的值为__('b', 'c', 'd', 'e', 'f')_____。

( 5)设有 Python 语句 list1=[‘a’,‘b’],则语句系列 list1=append([1,2]);list1.extend('34');list1.extend([5,6]);list1.insert(1,7);list1.insert(10,8);list1.pop();list1.remove('b');list1[3: ] = [];list1.reverse() 执行后,list1的值为___[[1, 2], 7, 'a']_______。


4、代码分析题


(1) 执行下面的代码,会出现什么情况?

a=[]

for i in range(10) :
        a[i] = i *i 

 IndexError: list assignment index out of range

(2) 对于 Python 语句

s1 = '''I'm(Zhang, and I like Python.''';s2 = s1
s3 = '''I'm wang I like Python.''';s4 = "too"


下列各表达式的值是什么?

A. s2 == s1                                                     B. s2.count('n')         
C. id(s1) == id(s2)                                          D. id(s1) == id(s3)
E. s1 <= s4                                                     F. s2 >= s4
G. s1 != s4                                                     H. s1.upper()                                     
I.  s1.find(s4)                                                  J. len(s1)
K. s1[4:8]                                                        L. 3 * s4
M. s1[4]                                                          N. s1[-4]
O. min(s1)                                                      P. max(s1) 
Q. s1.lower()                                                  R. s1.rfind('n')
S. s1.startswith("n")                                       T. s1.isalpha()
U. s1.endswith("n")                                        V. sl + s2

>>> s1 = '''I'm(Zhang, and I like Python.'''
>>> s2 = s1
>>> s3 = '''I'm wang I like Python.'''
>>> s4 = "too"
>>> s2 == s1
True
>>> s2.count('n')
3
>>> id(s1) == id(s2)
True
>>> id(s1) == id(s3)
False
>>> s1 <= s4
True
>>> s2 >= s4
False
>>> s1 != s4
True
>>> s1.upper()
"I'M(ZHANG, AND I LIKE PYTHON."
>>> s1.find(s4)
-1
>>> len(s1)
29
>>> s1[4:8]
'Zhan'
>>> 3 * s4
'tootootoo'
>>> s1[4]
'Z'
>>> s1[-4]
'h'
>>> min(s1)
' '
>>> max(s1)
'y'
>>> s1.lower()
"i'm(zhang, and i like python."
>>> s1.rfind('n')
27
>>> s1.startswith("n")
False
>>> s1.isalpha()
False
>>> s1.endswith("n")
False
>>> s1 + s2
"I'm(Zhang, and I like Python.I'm(Zhang, and I like Python."

(3) 阅读下面的代码片段,给出第 2、4、6、8 行的输出。

[1] list = [ [ ] ] * 5
[2] list                        # output?
[3] list[0].append(10)
[4] list                        # output?
[5] list[1].append(20)
[6] list                        # output?
[7] list.append(30)
[8] list                        # output?

>>> list = [ [ ] ] * 5
>>> list
[[], [], [], [], []]
>>> list[0].append(10)
>>> list
[[10], [10], [10], [10], [10]]
>>> list[1].append(20)
>>> list
[[10, 20], [10, 20], [10, 20], [10, 20], [10, 20]]
>>> list.append(30)
>>> list
[[10, 20], [10, 20], [10, 20], [10, 20], [10, 20], 30]
>>> 


(4)下面代码的输出是什么? 请解释你的答案。

def extendList(val, list=[]):

        list.append(val)

        return list


list1 = extendList(10)
list2 = extendList(123,[])
list3 = extendList('a')

print("list1 = %s" % list1)

print("list2 = s" % list2)

print("list3 = %s" % list3)

 如何修改函数 extendList 的定义,才能得到希望的行为?

list1 = [10, 'a']
list2 = [123]
list3 = [10, 'a']

5、程序设计题


(1) 编写代码,实现下列变换:
A.将字符串 s="alex”转换成列表
B.将字符串 s ="alex”转换成元组
C.将列表 li=["alex", "seven"] 转换成元组
D.将元祖 u =("Alex", "seven") 转换成列表

if __name__ == '__main__':
    s = "alex"
    # 转换成列表
    print(list(s))
    # 转换成元组
    print(tuple(s))
    li = ["alex", "seven"]
    # 转换成元组
    print(tuple(li))
    u = ("Alex", "seven")
    # 转换成列表
    print(list(u))

(2) 有如下元组:

tu = ("alex","eric","rain")


请编写代码,实现下列功能:
A. 计算元组长度并输出
B. 获取元组的第 2 个元素,并输出
C. 获取元组的第 1~2 个元素,并输出
D. 使用 for 输出元组的元素
E. 使用 for、len、range 输出元组的索引
F. 使用 enumerate 输出元祖元素和序号 (序号从 10 开始)

if __name__ == '__main__':
    tu = ("alex", "eric", "rain")
    # A.计算元组长度并输出
    # B.获取元组的第2个元素,并输出
    # C.获取元组的第1~2个元素,并输出
    # D.使用for 输出元组的元素
    # E.使用for、len、range 输出元组的索引
    # F.使用 enumerate 输出元祖元素和序号(序号从10开始)
    print(len(tu))
    print(tu[1])
    print(tu[:2])
    for i in tu:
        print(i)
    for i in range(len(tu)):
        print(i)
    for i, j in enumerate(tu):
        print("id:", i, "value:", j)

(3) 现在有 2 个元组(('a'), ('b'), ('c'), ('d')),请使用 Python 中的匿名函数生成列表[{'a':'c'},{'b':'d'}]。

if __name__ == '__main__':
    tuples = (('a', 'c'), ('b', 'd'))
    result = []
    for i in tuples:
        result.append({i[0] : i[1]})
        
    print(result)

(4) 一位经常参加国际学术会议的学者有一个通讯录,每条通讯信息都有国家、城市、姓名、电话号码、邮件地址和专业。有一次,他要到某个城市出差。请设计一个程序,帮他找出这个城市的朋友的姓名和电话号码。

# 一位经常参加国际学术会议的学者有一个通讯录,
# 每条通讯信息都有国家、城市、姓名、电话号码、邮件地址和专业。
# 有一次,他要到某个城市出差。请设计一个程序,
# 帮他找出这个城市的朋友的姓名和电话号码

import sqlite3
from sqlite3 import OperationalError
import re
import sys


# 连接数据库
def connect_sqlite():
    conn = sqlite3.connect("./data/address.db")
    cur = conn.cursor()
    sql = """CREATE TABLE IF NOT EXISTS address_book (
                        id integer primary key autoincrement,
                        name varchar(15) not null,
                        province  varchar(15),
                        country varchar(15),
                        major varchar(15),
                        email varchar(20),
                        number varchar(20)
                    );"""
    cur.execute(sql)
    print("create table success")
    cur.close()
    conn.commit()
    conn.close()
    return


# 向数据库中插入数据
def insert_data(data):
    name = data[0]
    province = data[1]
    country = data[2]
    major = data[3]
    email = data[4]
    number = data[5]
    conn = sqlite3.connect("./data/address.db")
    cur = conn.cursor()
    sql = """INSERT INTO address_book (name, province, country, major, email, number) VALUES (?, ?, ?, ?, ?, ?);"""
    cur.execute(sql, (name, province, country, major, email, number))

    print("插入数据成功!")
    cur.close()
    conn.commit()
    conn.close()
    return


# 向数据库中删除数据
def delete_data(f):
    if f == 1:
        pass
    else:
        pass

    return


def input_data():
    data_l = [''] * 6
    while True:
        data_l[0] = input("姓名:")
        ret = re.findall('[\u4e00-\u9fa5]', data_l[0])
        if ret:
            break
        else:
            print("输入姓名格式错误, 只能输入中文,请重新输入!")

    while True:
        data_l[1] = input("城市:")
        ret = re.findall('[\u4e00-\u9fa5]', data_l[1])
        if ret:
            break
        else:
            print("输入城市格式错误, 只能输入中文,请重新输入!")

    while True:
        data_l[2] = input("国家:")
        ret = re.findall('[\u4e00-\u9fa5]', data_l[2])
        if ret:
            break
        else:
            print("输入国家格式错误, 只能输入中文,请重新输入!")

    data_l[3] = input("专业:")

    while True:
        data_l[4] = input("邮箱:")
        # ret = re.match(r"(^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$)", data_l[4])
        ret = re.match(r"^[\w-]+@[\w-]+(\.(com|cn|net))*$", data_l[4])
        if ret:
            print("输入邮箱格式错误, 请检查后重新输入!")
        else:
            break
    while True:
        data_l[5] = input("电话号码:")
        ret = re.match(r"^1[3456789]\d{9}$", data_l[5])
        if ret:
            break
        else:
            print("输入号码格式错误,请重新输入!")

    return data_l


if __name__ == '__main__':
    try:
        mode = input("请选择您的查询方式!\n"
                     "-----1 列表查询------\n"
                     "-----2 字典查询------\n"
                     "-----3 GUI界面查询------\n"
                     "----- 默认GUI查询------\n"
                     "选择查询方式后,功能有:q 退出\t n 新建联系人\t u 更新联系人\t d 删除联系人\n")
        if mode == "1":
            while True:
                flag = 0
                city = input("请输入你要查询的城市名: ")
                if city == "q":
                    break
                elif city == 'n':
                    list_message = input_data()
                    List.append(list_message)
                    # Dict[list_message[0]] = list_message
                else:
                    for i in List:
                        if city in i:
                            flag += 1
                            print(i)

                    if flag == 0:
                        print("该城市{}暂无好友\n 您可键入 n 创建新好友".format(city))

        elif mode == "2":
            while True:
                flag = 0
                city = input("请输入你要查询的城市名: ")
                if city == "q":
                    break
                elif city == 'n':
                    list_message = input_data()
                    Dict[list_message[0]] = list_message
                else:
                    for _, value in Dict.items():
                        if city in value:
                            print(value)
                    if flag == 0:
                        print("该城市{}暂无好友\n 您可键入 n 创建新好友".format(city))

            pass
        elif mode == 'q':
            sys.exit(0)
    except KeyboardInterrupt:
        print('\n程序停止运行')

你可能感兴趣的:(python开发案例教程,python,开发语言)