目录
习题 2.3
1、判断题
2、选择题
3、填空题
4、代码分析题
5、程序设计题
(1) 元组与列表的不同仅在于一个是用圆括号作边界符,一个是用方括号作边界符。 ( ✖ )
(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]
(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']_______。
(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']
(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程序停止运行')