我的试题回顾(16-18)

我的试题回顾(16-18)

1. 多项选择题

根据下列代码,选择说法错误的选项。【 A 、 B 、 D 】

import random
menu = ['水煮活鱼', '海底捞', '黄焖鸡米饭']
a = random.choice(menu)
choose = input('想不想吃%s?想吃请输入:y\n' %a)
if choose == 'y':
    print('今天就吃%s了' %a)
else:
    print('今天不想吃%s' %a)


A:删掉import random这行代码,剩下的代码依然可以成功运行
B:代码运行后,输入y,输出结果一定是:今天就吃水煮活鱼了
C:代码运行后,输入的值不是y时,会执行else后面的语句
D:代码中字符串内%s的百分号不能忽略,但是字符串外的%a应该写成a

答案解析
考察重点:random模块的使用方法。

A错误,需要先导入random模块,然后才能调用相应方法,删掉后运行剩下代码会报错;
B错误,a = random.choice(menu)这行代码的作用是从序列中随机选取一个元素,因此输出结果不一定是:今天就吃水煮活鱼了;
C正确,if...else...条件成立执行if语句,否则执行else语句;
D错误,字符串内外的格式化操作符都不能忽略,%可以起到连接匹配的作用。

2. 单项选择题

下列关于csv模块的说法中,正确的是:【 D 】

A:csv模块是第三方模块,需要在终端运行pip install csv命令进行安装

B:写文件通过csv.writer()方法,如果要一次写入一行,可以使用 writerows()方法

C:假设存在test.csv文件,那么下列代码可以正常运行:
import csv
f = open('test.csv', 'r')
reader = csv.reader(f)
print(reader)
f.close()

D:csv模块专门用于读取和写入 csv 文件内容

答案解析
考察重点:csv模块是python的内置模块,专门用于读取和写入csv文件内容,读取文件通过 csv.reader()方法,写文件通过csv.writer()方法。

A错误,csv模块是python的内置模块;
B错误,如果要一次写入一行,可以使用 writerow() 方法;如果要一次写多行,可以使用 writerows()方法;
C错误,这里获得的reader变量实际上是一个迭代器,也就是不能直接打印,需要通过for循环或者next()方法读取,且只能读取一次;
D正确。

3. 单项选择题

下列代码输出为:【 B 】

s = ' '
sen = ['p', 'y', 't', 'h', 'o', 'n']
with open('test.txt', 'w', encoding='utf-8') as f:
    f.write(s.join(sen))
with open('test.txt', 'r', encoding='utf-8') as f:
    print(f.read())


A:python
B:p y t h o n
C:p,y,t,h,o,n
D:'p', 'y', 't', 'h', 'o', 'n'

答案解析
考察重点:join()方法。

join()方法用于将一个序列中的元素以指定的字符连成字符串;
语法:str.join(seq),其中,str是分隔符,可以为空字符串,seq是要连接的元素序列、字符串、元组、字典;
str.join(sen)将sen中的字符以空格相连,write()函数将其写入test文件,read()函数读取,所以输出为 p y t h o n。

4. 多项选择题

根据字典scores,判断以下哪几个选项的说法是错误的:【 C 、 D 】

scores = {'小明': 100, '小红': 90, '小敏': 100, '小陈': 85}


A:print(len(scores)),打印的是字典的长度,输出结果为:4

B:print(str(scores['小红']).encode('utf-8')),这行代码的作用是将字典scores中小红的分数提取出来,用str()函数转换成字符串类型,并用utf-8编码打印出来

C:print(str(scores[0]).encode('gbk')),这行代码可以成功将小明的分数用gbk编码并打印出来

D:print(scores['小敏'].encode('gbk')),这行代码可以成功将小敏的分数用gbk编码打印出来

答案解析
本题主要考察字典的取值和编码,还有对编码本质的了解,编码的本质是把str(字符串)类型的数据利用不同的编码表,转换成bytes(字节)类型的数据。

A说法正确,len()函数:用于检查某个数据的长度,打印结果为4;
B说法正确,注意提取出的小红的分数是整型,要用str()函数转换成字符串类型;
C说法错误,字典的索引靠的是键;
D说法错误,没有将字典scores中提取出的小敏的分数由整型转换成字符串。

5. 多项选择题

运行以下程序,说法正确的是:【 B 、 C 、 D 】

with open('one.txt', 'w') as f:
    f.write("abcd")
with open('one.txt', 'r') as f:
    print(f.read())
with open('one.txt', 'r+') as f:
    f.write("ab")
with open('one.txt', 'r') as f:
    print(f.read())


A:程序会报错

B:两个print()函数输出结果一样

C:再次运行程序,输出结果不变

D:第二个print()函数输出结果为:abcd

答案解析
本题主要考察文件读写模式的区分,w模式只能写入操作且会完全覆盖之前内容,r+模式写入和读取都可以但写入时是根据写入字符个数从文件开始覆盖部分,不会全部覆盖,r模式只能读取操作;

A错误,程序不会报错;
B正确,两次输出一样,都为abcd,第一个print()函数输出第一个写入的abcd,第三个open()函数模式为r+,且写入ab为两个字符,覆盖原文件ab,读取输出为abcd;
C正确,因为第一个open()函数模式为w,写入会覆盖全部文件内容,再次运行,结果不变;
D正确,如上所述。

6. 单项选择题

小明有月底记账的习惯,内容包括“月份”,“收入”,“支出”和“结余”三项。请你帮他补全下面的代码,完成3月份收入12000元,支出10000元,结余2000元的账目记录:【 C 】

import csv
# 代码1
    writer = csv.writer(f)
# 代码2


A:#代码1:with open('c:\Users\小明\Desktop\

B:#代码1:with open(r'c:\Users\小明\Desktop\

C:#代码1:with open('c:\Users\小明\Desktop\

D:#代码1:with open('c:\Users\小明\Desktop\

答案解析
考察重点;writer()函数。
相关知识点:
CSV模块writer()函数是往CSV文件当中写入数据的方法。在具体使用方法上是先导入CSV模块,在此基础上先打开CSV文件,然后创建一个实例化的变量,最后就可以用writer.writerow(列表)给CSV文件写入一行列表中的内容了。其中writer.writerow()与writer.writerows()的区别在于一行写入和多行写入;newline=''作为参数存在的意义在于写入csv文件时可以去除空行。

A错误,代码1的open()函数的绝对路径参数写法“\”与python转移字符混淆;
B错误,代码2只有唯一的一行内容待写入,不需要用writer.writerows(参见知识点描述);
C正确;
D错误,代码1的错误同A选项,代码2的错误同B选项。

7. 多项选择题

如果在确保输入的是数字的情况下,运行下列代码,哪些说法是正确的?【 A 、 B 、 C 、 D 】

dec = input('输入数字:')
print(int(dec))
print(bin(int(dec)))
print(oct(int(dec)))
print(hex(int(dec)))

注释说明:
#bin(x) 中x表示一个整数 int 或者长整数 long int,返回以字符串形式表示的二进制。
#oct(x) 函数将一个整数x转换成8进制字符串。
#hex(x) 函数用于将10进制整数x转换成16进制,以字符串形式表示。


A:dec是一个字符串类型
B:bin(int(dec))表示将int(dec)转换为二进制
C:oct(int(dec))表示将int(dec)转换为八进制
D:hex(int(dec))表示将int(dec)转换为十六进制

答案解析
考察重点:十进制转二进制/八进制/十六进制。

A正确,input()函数返回的是字符串类型;
BCD正确,bin()/oct()/hex()函数参数是整型,将十进制转成二进制/八进制/十六进制,因此要把input()的dec转换为int型。

8. 多项选择题

下列关于模块导入及其函数调用,正确的是:【 A 、 C 】

A:import email, smtplib

B: from time import  *
   to = time.clock()

C: from random import *
   a = random()

D:from * import csv

答案解析
考察重点:from … import 语句让你从模块中导入一个指定的部分到当前命名空间中,语法如下:
from modname import name;
from … import * 语句把一个模块的所有内容全都导入到当前的命名空间。

A正确,impor导入多个模块时,每个模块以“,”隔开;
B错误,使用from..import...语法时,调用函数时不用加模块名,如C选项;
C正确,random()用于生成一个0到1的随机浮点数;
D错误,应该是from csv import *。

9. 多项选择题

使用open()函数打开abc.txt文件时,下列哪个地址参数的绝对路径表达方式是正确的:【 B 、 D 、 E 】

A:'Users/Ted/Desktop/test/abc.txt'

B:'/Users/Ted/Desktop/test/abc.txt'

C:'\Users\Ted\Desktop\test\abc.txt'

D:'C:\Users\Ted\Desktop\test\abc.txt'

E:r'C:\Users\Ted\Desktop\test\abc.txt'

答案解析
考察重点:“绝对路径”是指文件的所在地址的完整路径,与相对于当前文件夹存在的相对路径对应。绝对路径在Mac和Windows电脑中的表达方式略有不同。当将abc.txt文件拖拽到操作台时,Mac电脑可以直接复制粘贴到open中,但Windows电脑需要做一下处理。

A错误,Users前缺少'/';
B正确,Mac电脑的绝对路径表达方式;
C错误,这是Windows电脑缺少盘符的地址,放到open()函数中需要对''进行处理,因为与python的转义字符冲突;
D正确,Windows电脑的绝对路径表达方式;
E正确,Windows电脑的绝对路径表达方式。

10. 多项选择题

关于下列代码说法正确的有哪些?【 A 、 B 、 C 、 D 】

from datetime import timedelta
from datetime import datetime
dt = datetime.now()
yest = dt - timedelta(days=1)
tomo = dt + timedelta(days=1)
days_count = tomo-yest
print(days_count.days)
print(days_count.total_seconds())


A:from  datetime import timedelta表示导入datetime模块中的timedelta方法

B:datetime.now()是获取当前时间

C:变量tomo保存的是明天的时间

D:打印结果为:
  2
  172800.0

答案解析
考察重点:time模块函数。

A正确,datetime和timedelta是datetime模块的两个方法,需要先导入再使用;
B正确,datetime.now() 表示获取当前日期,时间精确到秒后面6位,并把获取的时间赋值给变量dt;
C正确,timedelta()是datetime中的一个方法,一般放的参数顺序为
timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]]);timedelta(days=1)表示返回day为1的值,加上当天的时间,得到的就是明天的时间;
D正确,days_count.days是把明天和昨天的时间差换成天数,得到结果为2天; total_seconds() 方法表示把天数转成秒,那么22460*60得到172800秒。