【】eval()函数合并及复杂模数运算等。
前言
在很多高端项目中,一个需要花费很长时间、耗费大量人力物力才找到的 Bug,往往是一个符号错误、值传递错误,或者对一个基本函数的使用没有仔细考虑等基本问题。所以,地基不牢,整栋楼就会摇摇欲坠。这真的不是开玩笑的。
今天继续更新【】系列。
1. 在该语言中,以下表达式输出值 11:
A、打印(“1+1”)
B、打印(1+1)
C.打印(eval(“1 + 1”))
D.打印(eval(“1”+“1”))
eval() 函数是一个内置函数,eval() 函数的作用是将一个字符串作为有效的表达式进行求值,并返回计算结果。相当于把字符串开头和结尾的引号去掉,去掉引号后执行语句,并返回执行结果。
主要作用有:
参考:企业因安全风险禁用的强大内置功能
本题中,选项A打印的是字符串“1+1”,选项B打印的是表达式1+1的结果2,选项C有eval()函数,会把字符串“1+1”转换成可计算的表达式1+1,与选项B等价,最后打印出结果2。选项D在eval()中先将两个字符串“1”相加得到字符串“11”,然后eval()函数把字符串“11”的引号去掉,打印的结果为11,所以答案为D。注意这里的结果11是整型,而不是字符串类型。
>>> type(eval("1"+"1"))
<class 'int'>
eval()函数比较特殊,为了加深印象,本文会继续更新三个相关问题,以后本文就不再具体介绍eval()了。
2、运行以下程序,当在键盘上输入{1:“清华大学”,2:“北京大学”}时,结果为:
x =eval(input())
print(type(x))
A。
B.
C. 错误
D.
本题中输入的字符串内容符合字典的语法格式,经过eval()函数转换后,结果类型为字典,因此本题答案为D。
3、运行以下程序,从键盘输入1+2和4j,输出结果为:
x = eval(input())
y = eval(input())
print(abs(x+y))
A.5
B.
C。
D.5.0
逐行看这道题的代码,x接收输入字符串“1+2”,经过eval()函数处理后,x的值为计算结果3,数据类型为整型。y接收输入字符串“4j”,经过eval()函数处理后,y的结果是复数4j。y的数据类型是可以打印出来的,类型为。
复数是数学中的一个概念。复数是一个实数和一个虚数的和,表示为a+bi,其中a为实部,b为虚部,i为虚数单位。问题中,虚数单位不是i,而是j。问题中输入的4j是有虚数单位的,解释器会将其识别为复数。
中的复数类型是,复数可以通过两种方式创建:
使用 () 函数创建一个复数:
z = (real, imag),其中 real 是实部,imag 是虚部。
z = complex(3, 4) # 创建一个复数 3 + 4j
通过添加实数和虚数来创建复数:
z = 3 + 4j
回到正题,第三行代码用到了abs()函数,也就是中的绝对值函数。abs()函数作用于复数时,也叫复数的模。复数的模表示原点到复平面上该复数对应点的距离,也叫复数的绝对值。对于一个复数z = a + bj,它的模计算公式为:|z| = sqrt(a^2 + b^2),其中sqrt()代表平方根。所以本题结果为5.0,答案为D。至于为什么结果是一个浮点数5.0,而不是一个整数5,是因为复数的实部和虚部都是浮点数。
>>> z = 3+4j
>>> z.real
3.0
>>> type(z.real)
<class 'float'>
>>> z.imag
4.0
4、执行下面程序,输入a,输出结果为:
a = 'python'
try:
s = eval(input('请输入整数:'))
ls = s * 2
print(ls)
except:
print('请输入整数')
A.一个
B.请输入一个整数
C。
D.
本题中a为字符串变量,其值为字符串“”。在input()中输入a时,变量a经过eval()函数处理后,会将引号去掉,所以变量s的值也是字符串“”。变量ls为s*2的值,结果为字符串“”,所以答案为C。至于input()中的“请输入一个整数:”,是误导,加入了异常捕获try:…:…,避免出错。
5、执行以下程序,输入qp,输出结果为:
k = 0
while True:
s = input('请输入q退出:')
if s == 'q':
k += 1
continue
else:
k += 2
break
print(k)
A2
B.请输入q退出:
C.3
D. 1
在无限循环while True:中,条件语句判断,如果输入的字符是字母q,则k加1,继续循环();如果输入的字符不是字母q,则k加2,并退出循环(break)。
k 的初始值为 0,第一次输入的是字符 qp(不是字母 q),k 加 2 后退出循环,所以 k 的值是 2。答案为 A。input() 中的“请输入 q 退出:”也是误导,其实输入 q 并不会退出循环。
6.以下程序的输出是:
def test(b=2, a=4):
global z
z += a * b
return z
z = 10
print(z, test())
A.18 无
B.10 18
C。
D.18 18
本题中,在自定义函数test()中使用关键字将z声明为全局变量,因此即使函数中没有为z定义初值,z在函数外也能获取当前环境中定义的值。
函数下面定义了z的值是10,所以第一个打印的z值就是10。在调用test()函数时,会将z的值加上a*b,再将返回的z的值加上8,也就是18,所以答案为B。
这里要注意的是,由于z的作用,整个运行环境中只有一个z变量(全局变量)。需要知道z值是什么时候定义的,什么时候修改的,修改前值是多少,修改后值变成什么。为了方便理解,可以从三个位置查看z的值。
1.函数定义完后立即调用test(),此时函数中并没有定义z的初值,当前环境中也没有定义z的值,即使在函数中使用,z也没有值,会报错:name 'z' is not。
2、当前运行环境中定义z=10之后,此时打印的z的值为10。
3、在当前运行环境中定义 z=10 后,调用函数 test(),z 的值被函数修改,返回值为 18。如果直接打印 z,值也是 18。因为影响了环境中 z 的值,所以函数直接修改了全局的 z 值。如果再次调用 test(),z 的值就会变成 26。
7.以下程序的输出是:
ss = list(set("jzzszyj"))
ss.sort()
print(ss)
答案:[‘z’, ‘j’, ‘s’, ‘y’]
B. [‘j’, ‘s’, ‘y’, ‘z’]
复制代码
D. ['j', 'j', 's', 'y', 'z', 'z', 'z']
set() 是 中的内置函数,也是 中的数据类型,表示集合。集合是无序且不重复的元素序列。如果将可迭代对象传递给 set(),set() 会将可迭代对象转换为集合,结果将删除重复的元素。
本题先将字符串“”转换成集合{‘j’, ‘z’, ‘s’, ‘y’},集合本身无序,所以顺序是随机的。再将集合转换成列表[‘j’, ‘z’, ‘s’, ‘y’],最后对列表进行排序,字母按照ASCII编码表排序,结果为[‘j’, ‘s’, ‘y’, ‘z’]。答案为B。
8.以下程序的输出是:
ls = list({'shandong': 200, 'hebei': 300, 'beijing': 400})
print(ls)
答案:['300', '200', '400']
B.['', '河北', '']
C.[300, 200, 400]
D.'', '河北', ''
这道题是将字典转为列表,字典转为列表的时候,获取的是字典的key,所以结果为['','hebei',''],答案为B。
9.以下程序将以下结果输出到文件text.csv:
fo = open("text.csv", 'w')
x = [90, 87, 93]
z = []
for y in x:
z.append(str(y))
fo.write(",".join(z))
fo.close()
答:[90,87,93]
版 90, 87, 93
C.“[90, 87, 93]”
D.'90, 87, 93'
代码中,首先创建一个text.csv文件。open(,mode)函数打开一个文件,如果文件不存在,则创建。mode为write mode w。x为数字列表。每个元素都转换成字符串,并添加到列表z中。join()函数将列表z中的所有元素连接成一个字符串。连接符为逗号,因此写入文件text.csv的内容为90,87,93。答案为B。
csv 是逗号分隔值的缩写,顾名思义,内容之间用逗号分隔,因此写入 csv 文件的正确格式是用逗号分隔。
参考:使用csv模块读写csv文件
10、假如当前时间是2018年5月1日 10点10分09秒,则以下代码的输出为:
import time
print(time.strftime("%Y=%m-%d@%H>%M>%S", time.gmtime()))
答:2018=05-01@10>10>09
B.2018=5-1 10>10>9
C. True@True
星期四, 2018=5-1@10>10>9
time 是一个内置库,可以用来获取时间以及转换时间格式,比如在时间戳和时间字符串之间进行转换。题目中就是导入time库,获取time.()的值,然后使用time.()函数拼接成想要的格式。
首先我们看一下time.()的结果。time.()将传入的UTC秒数转换成UTC时间元组,如果不传入任何参数,则转换当前时间。元组格式为 (, , , , , , , , )。题目中得到的元组为 (=2018, =5, =1, =10, =10, =9, =1, =121, =0)。
time.() 拼接的目标格式为“%Y=%m-%d@%H>%M>%S”,其中 Y 为年,m 为月,d 为日,H 为时,M 为分,S 为秒。将上述元组中的值拼接到相应位置,结果为 2018=05-01@10>10>09。注意 time.() 拼接时,月、日、时、分、秒均为两位数,因此答案为 A。
参考:将时间转换为时间戳和时间字符串
扫一扫在手机端查看
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。