单项选择题

2-1 下面有关字典的定义中,错误的是( )。
A. d={"中国":"北京", "法国":"巴黎", "美国":"华盛顿"}
B. d={[1]:"北京", [ 3]:"巴黎",[ 2]:"华盛顿"}
C. d={"中国":"北京", "中国":"长安", "美国":"华盛顿"}
D. d={"中国":"北京", "首都":"北京", "美国":"华盛顿"}
答案:B

2-2 创建一个集合{0,1,2,3,4,5},下面()是正确的。
A. set(0,1,2,3,4,5)
B. set("0,1,2,3,4,5")
C. set("012345")
D. set(range(6))
答案:D

2-3 已知x是一个列表,则以下选项中,不能访问列表最后一个元素的是()。
A. x[-1] B. x[len(x)-1] C. x[-1:] D. x[-1:-2]
答案:D

2-4 以下哪个指令能建立一个集合( )。
A. {} B. set(8) C. {8} D. set(2,3)
答案:C

2-5 返回集合中元素个数的函数是______。
A. size() B. len() C. elements() D. count()
答案:B

2-6 已知d={1 : 2, '3' : 4},下列修改字典的方式中,错误的是()
A. d.update({3:1})
B. d[3]=1
C. d['3']=1
D. d.get('3')=1
答案:D

2-7 对于字典dic={1:2, '3': 'd', 'd':2, 4:{1:2, 2:3} }, len(dic)的值是()
A. 3 B. 4 C. 5 D. 6
答案:B


多项选择题

3-1 已知:x=[1,2,3],y=[4,5,6],欲生成新列表x=[1,2,3,4,5,6],则下面的操作哪种方案可行?( )
A. x+=y或者x=x+y
B. x.extend(y)
C. x=x.__add__(y)
D. x=x.append(y)
答案:A B

3-2 已知:
A.

n['Q']=a.get('Q')+b.get('Q')

B.

n['Q']=n.get('Q')+a.get('Q')+b.get('Q')

C.

n['Q']=n.get('Q',0)+a.get('Q')+b.get('Q')

D.

n['Q']=n.get('Q',0)+a.get('Q')
n['Q']=n.get('Q',0)+b.get('Q')

答案:A C D

3-3 下面语句运行结果是True的是( )
A. 2 in set(range(6))
B. 2 in list(range(6))
C. 2 in range(6)
D. 2 in set("123456")
答案:A B C


填空题

4-1 字典的创建,元素访问及名字绑定(高教社,《Python编程基础及应用》习题7-2)
请写出下述程序的执行结果:

phoneBook = {'Alex':'6511-2002','Betty':'6512-7252','Dora':'6546-2708'}
phoneBook2 = phoneBook
phoneBook2['Betty'] = '1111-2222'
print(phoneBook['Betty'])
print(phoneBook2['Betty'])

执行结果第1行:( )
执行结果第2行:( )
答案
第1空:1111-2222,第2空:1111-2222

4-2 元组的编辑(高教社,《Python编程基础及应用》习题5-2)
写出下述程序的执行结果。

t = (2,4,6,8,10)
print(t[0])
print(t[-1])
print(t[:-1])
print(t[1:-1])
print(max(t))
print(len(t))

结果第1行:( )
结果第2行:( )
结果第3行:( )
结果第4行:( )
结果第5行:( )
结果第6行:( )
答案
第1空:2,第2空:10,第3空:(2, 4, 6, 8),第4空:(4, 6, 8),第5空:10,第6空:5

4-3 下面语句的输出是什么?( )@@[](2)

D1={"red":41,"blue":3}
D2={"blue":3,"red":41}
print(D1==D2)

答案
第1空:True

4-4 表达式{1,2,3}-{2,3,4}的值是( )@@[](1) 。
答案
第1空:{1}


编程题

7-1 sdut-统计字符在字符串中出现的次数

统计并输出某给定字符在给定字符串中出现的次数。
输入格式:第一行给出一个以回车结束的字符串(一行少于80个字符);第二行输入一个字符。
输出格式:在一行中输出给定字符在给定字符串中出现的次数。(如果未出现,则输出0)

输入样例:
programming is More fun!
m
输出样例:
2

参考答案

基本写法

lst, s, n = list(input()), input(), 0
for i in lst:
    if i == s:
        n += 1
print(n)

懒狗写法

s, e = input(), input()
print(s.count(e))

pop+index写法

# 写法一
lst, string, count = list(input()), input(), 0
while True:
    try:
        position = lst.index(string)
        lst.pop(position)
        count += 1
    except ValueError:
        print(count)
        break

7-2 求完全数的字典集

本题目要求读入2个正整数m和n,且m<n,求[m,n]之间所有的完全数,并形成字典。完全数:除了自己本身以外所有因子的和等于本身的数。例如6的因子为1,2,3,1+2+3=6,6即为完全数。
输入格式: 以空格分隔输入m,n两个数。
输出格式: 输出得到的字典。

输入样例1:
6 80
输出样例1:
{6: [1, 2, 3], 28: [1, 2, 4, 7, 14]}
输入样例2:
-8 -5
输出样例2:
wrong input

参考答案

import math


def getPerfect(n):
    factors = [1]
    for j in range(2, int(math.sqrt(n)) + 1):
        if (n % j) == 0:
            factors.append(j)
            if j * j != n:
                factors.append(n // j)
    if factors:
        if int(sum(factors)) == n:
            return True, sorted(factors)
    return False, None


try:
    a, b = map(eval, input().split())
    if a > b or a < 0 or b < 0:
        raise NameError
except NameError:
    print("wrong input")
else:
    dic = {}
    for current in range(2, 10002, 2):
        perfect = getPerfect(current)
        if perfect[0]:
            dic[current] = perfect[1]
    result = {}
    # 写法一 取交集
    intersection = sorted(list(set(range(a, b)) & set(dic.keys())))
    for i in intersection:
        result[i] = dic[i]
    # 写法二 遍历
    # for i in range(a, b):
    #     if i in dic:
    #         result[i] = dic[i]
    print(result)

7-3 输出星期名缩写

输入一个1到7的数字,输出对应的星期名的缩写。
1 Mon
2 Tue
3 Wed
4 Thu
5 Fri
6 Sat
7 Sun

参考答案

day = "MonTueWedThuFriSatSun"
n = eval(input())
print(day[3 * n - 3:3 * n])