【全解析 | PTA】浙大版《Python 程序设计》题目集-第二章
wzhh_ 2024-06-28 14:35:02 阅读 79
第二章 Python语言概述
一、判断题
1.输入正整数6和5,要求和,6+66+666+6666+66666,下面程序正确吗?F
a=int(input())
n=int(input())
print(sum([int('a'*i) for i in range(1,n+1)]))
在代码中,使用了字符串 ‘a’ 而不是变量 a 的值是因为字符串 ‘a’ 在引号内被视为文本常量,而不是变量。这意味着在表达式 int('a'*i) 中,‘a’ 被视为字符 ‘a’ 的文本表示,而不是变量 a 所代表的用户输入的值。
如果您想要使用变量 a 中的值,您需要使用实际的变量而不是字符串 ‘a’。因此,需要将 ‘a’ 替换为 str(a)
2.下面程序的运行结果是4。F
i=3
++i
Python没有自增自减运算符
3.当输入是:45,8 时,下面程序的输出结果是37。F
a,b = input().split(',')
b=int(b)
c=int('a',b)
print(c)
int()函数的进制转换,这道题代码错了c=int('a',b),书p40
4.当输入是10.0时,下面程序的输出是f(10.0) = 0.1。F
x=int(input())
if x==0:
result=0
else:
result=1/x
print('f({0:.1f}) = {1:.1f}'.format(x,result))
第1行代码就错了,int不能把字符串10.0转为整型(改成float可以),因为还有一个点号呀,int能怎么对点号进行处理呢
5.表达式 -2**4 等于16。F
牢记运算符优先级
6.下面程序的输入是5,输出是:F
*****
*****
m=int(input())
print('{:^5}'.format('*'*m))
print('{:^m}'.format('*'*m))
第三行错了,m不会被直接替换为变量值
7.下面程序的输出是:这是字符串输出格式□□123。□表示空格。F
print("这是字符串输出格式{:5s}".format("123"))
无对齐格式控制,默认左对齐,填充的两个空格在右侧!!!理解清楚左对齐,正确为print("这是字符串输出格式{:>5s}".format("123")),书p66
8.下面语句的输出是:这是数字输出格式□□123。 □表示空格。T
print("这是数字输出格式{:5d}".format(123))
f ormat对于部分对象默认左对齐,对于数字默认右对齐
9. int(True)的返回值是1。T
在Python中,布尔值 `True` 和 `False` 分别对应等价为整数 `1` 和 `0`。
10. bool(FALSE)的返回值是True。F
`bool()` 函数将某个值转换为布尔类型时,遵循以下规则:
1. 任何数值类型的零值(如 `0`、`0.0`、`0j`)、空序列(如 `''`、`[]`、`()`、`{}`)以及特殊值 `None` 都会被转换为布尔值 `False`。
2. 非零数值、非空序列以及其他非空对象(包括字符串中含有内容的情况)都会被转换为布尔值 `True`。
`bool(False)` 会返回 `False`,因为 `False` 本身就是布尔值。
并且需要注意的是,FALSE是错误的,要写成False,True也同理
11. bool([])的返回值是False。T
12. bool(None)的返回值是False。T
None不能理解为0,None == 0 -> False
13. print(bin(12.5))的输出是0b1100.F
`bin()` 函数用于将整数转换为二进制字符串表示形式。然而,`bin()` 函数并不适用于浮点数。当你尝试使用 `bin()` 函数来处理浮点数时,Python 会报错,因为该函数要求输入的是整数。
14. int("92",8)的值是74。F
代表把八进制数字字符92转换成十进制数,但是9是不合法的八进制数
15.表达式3 and 0 and "hello"的值是False。F
按照从左到右的顺序进行计算。当遇到 and 运算符时,如果左边的表达式结果为 False 或者等价于 False 的值,Python 将立即返回该值;如果左边的表达式结果为 True 或者等价于 True 的值,Python 将继续计算右边的表达式。值为0!!!
print(3 and 0 and "hello");print( 3 and 0 and 5) 都是0不是False
16. z已赋值,x=(y=z+1)语句是错误语句。T
在Python中,赋值语句并不像一些其他编程语言那样可以嵌套进行。在语句 x=(y=z+1) 中,y=z+1 是一个赋值表达式,它将 z+1 的值赋给 y,然后尝试将这个赋值表达式的结果赋给 x。但这种嵌套赋值并不是 Python 语法所支持的。
二、单选题
1.下列数据类型中, Python不支持的是A.char
2. Python 语句print(type(1J))的输出结果是A.<class'complex'>
3. Python 语句print(type(1/2))的输出结果是C.<class 'float'>
4. Python 语句print(type(1//2))的输出结果是A.<class 'int'>
5. Python 语句 a=121+1.21; print(type(a))的输出结果B.<class 'float'>
整数和浮点数混合运算的结果是浮点数
6. Python 语句 print(0xA + 0xB)的输出结果是D.21
0b二进制,0o八进制,0X十六进制,输出结果为10+11=21
7. Python 语句x=’car’; y = 2; print (x+y)的输出结果是A.
语法错
字符串拼接:1、多个字符串+号拼接;2、直接放在字符串后面实现拼接,注意不能是字符串变量;3、用*号实现字符串复制‘p’*3=ppp
8.表达式1+2*3.14>0的结果类型是: D.bool 优先级,p37
9.如math模块已引入,Python 表达式 math.sqrt(4)*math.sqrt(9)的值为D.6.0
Ps:math库函数好像返回都是浮点数,可以自己编译运行一下
10.关于Python中的复数,下列说法错误的是C.虚部必须后缀j, 且必须是小写
虚部后缀j/J大小写都可以;表示复数的语法是real + imag j;实部和虚部都是浮点数;方法conjugate 返回复数的共轭复数
11. Python 语句 print(chr(65))的运行结果是D.A
12.关于Python字符串,下列说法错误的是 B.字符串以\0标志字符串的结束
在Python中,字符串不需要使用\0来标志字符串的结束。通常情况下,在Python中,字符串可以用单引号'或双引号"括起来,Python会自动识别字符串的结束位置。在C语言等其他语言中,使用\0来表示字符串的结束,但在Python中不需要这样做。
D.在三引号字符串中可以包含换行回车等特殊字符;不需要转义字符
三、填空题
1.Python表达式 10 + 5//3 –True+False的值为10
//整除运算,余数会被截取
2.Python表达式 3**2**3 的值为6561
幂的优先级最高,且是从右往左结合
3.Python表达式 round(17.0/3**2,2) 的值为1.89
round(x,n)函数返回x的四舍五入值,n为保留小数位数
4.Python表达式 0 and 1 or not 2<True 的值为True
牢记运算符优先级和结合性 P37;>,<,= > not > and > or
5. Python语句print(int("20",16), int("101",2))的输出结果是32 5
6. Python语句print(hex(16), bin(10))的输出结果是(进制用小写字母表示)0x10 0b1010
hex()0x为默认前缀,返回16进制字符串:同理还有bin(),oct(),注意返回的都是字符串
7.已知a=3;b=5;c=6;d=True,则表达式 not d or a>=0 and a+c>b+3的值是True
8. Python语句 print(abs(-10.2), round(abs(8-2j),3)) 的输出结果是10.2 8.246
abs()取绝对值,就是算复数的模
9.Python语句x=True; y=False; z=False; print(x or y and z)的程序运行结果是True 优先级啊!!!not>and>or!!!
10.Python语句 x=0; y= True; print(x>=y and‘A'<'B') 的程序运行结果是False
11.Python表达式16-25>78/2 or "XYZ"!="xyz"and not (10-6>18/2)的值是True
12. Python输出 print("hello" 'world')的结果是helloworld
13.表达式((2>=2) or (2<2)) and 2的值为多少?2
这个表达式中,((2>=2) or (2<2)) 结果为 True,因为其中一个条件 (2>=2) 为 True。然后,True and 2 等于 2,因为 and 运算符返回最后一个条件的值,而最后一个条件为 2。所以整个表达式的值为 2。(如果and中计算表达式的所有值都为真,则返回最后一个真值)
14.表达式 3 and 0 and 5的结果是什么?0
在Python中,布尔上下文中的数字0被视为False,而非零数字被视为True。在逻辑运算中,and 运算符会从左至右逐个检查表达式中的值,如果遇到 False 的情况,就会停止并返回这个 False 值。
15. 表达式 --3 的结果是什么?3
16. 表达式 ---3 的结果是什么?-3
17. 表达式32.2//6-24//6的值是1.0
18. 猜生日
运行下面程序,输入是10011时,输出是25
如果你的生日在列表中,输入1,否则输入0。如你的生日是19号,输入11001。这个程序能猜到你的生日吗?yes。能,填yes;不能,填no。
lst1=[1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31]
lst2=[2,3,6,7,10,11,14,15,18,19,22,23,26,27,30,31]
lst3=[4,5,6,7,12,13,14,15,20,21,22,23,28,29,30,31]
lst4=[8,9,10,11,12,13,14,15,24,25,26,27,28,29,30,31]
lst5=[16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]
s=input()
print((lst1[0] if s[0]=="1" else 0)
+(lst2[0] if s[1]=="1" else 0)
+(lst3[0] if s[2]=="1" else 0)
+(lst4[0] if s[3]=="1" else 0)
+(lst5[0] if s[4]=="1" else 0))
19. 汉字张的Unicode编码是24352(十进制)(U+5F20 十六进制)
ord("张")
20.下面程序输出是6
n = 39
remainders = []
while n>0:
n,remainder = divmod(n,2)
#元组解包的方式分离出整除结果和余数
remainders.insert(0,remainder)
print(len(remainders))
#divmod函数是Python的内置函数,它可以把除数和被除数的运算结果结合起来,返回一个包含商和余数的元组。
21.-7 & 5 的结果是 1
-7 | 9 的结果是 -7
-7 ^ 9 的结果是 -16
~9 的结果是 -10
&:按位与运算符的步骤:对应的二个二进位都为 1 时,结果位就为 1,否则为 0。(-7的二进制表示为,先求7的二进制00000111再取反得到反码11111000,再加1得到其补码11111001就是-7 的计算机表示形式:负数的二进制用补码表示法)
|:按位或运算符的步骤:只要对应的二个二进位有一个为 1 时,结果位就为 1,否则为 0 。-7的二进制11111001与9的二进制00001001进行按位或运算得11111001,结果仍为-7,结果都以补码形式,遵循补码表示法
^:异或运算符是对两个参数进行运算,按位异或运算符的步骤:两个二进位不相同,结果位就为 1;两个二进位相同,结果位就为 0 。-7的二进制11111001与9的二进制00001001进行按位异或运算得11110000(再算出补码的补码才知道本来的值,取反再加1)
~:按位取反运算符的步骤:二进位为 1 时,结果位就为 0;二进位为 0 时,结果位就为 1;9的二进制为00001001,按位取反为11110110,即结果为10
原码:原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值。
反码:正数的反码就是自身,负数的反码除符号位外,其他各位求反。对于正数,反码和原码一致,不需要修改。对于负数,保留符号位,其余位取反。
补码: 补码,正数的补码和原码、反码一样。而负数的补码,则在反码的基础上+1。
计算机中,使用补码代表正负数,而不是原码或者反码。使用补码可以把减法或负数,转换为加法运算,从而简化计算机的硬件。
四、编程题
7-1 计算 11+12+13+...+m
m = int(input())
s = 0
for i in range(11,m+1):
s += i
print("sum = {0}".format(s))
7-2 计算分段函数
x = float(input()) #int直接取整,小数就错了
if x == 0:
g = 0
else:
g = 1/(2*x)
print("g({0:.3f}) = {1:.3f}".format(x,g))
7-3 阶梯电价
a,b = input().split()
a = int(a)
b = float(b)
if a <= 50:
expense = a * 0.53
else:
expense = 50 * 0.53 + (a - 50) * (0.53 + b)
print("cost = {:.2f}".format(expense))
7-4 求奇数分之一序列前N项近似和
# ceil 向上取整 & 列表推导式 & math数学库
import math
n = int(input())
rlt = sum([1/i for i in list(range(1,n+1,2))])
s = math.ceil(rlt)
print("sum ≈ {}".format(s))
7-5 求交错序列前N项和
n = int(input())
lrt = [i/(2*i-1) if i%2==1 else -i/(2*i-1) for i in range(1,n+1)]
result = sum(lrt)
print("{:.3f}".format(result))
# sum求和 以及 列表推导式
7-6 产生每位数字相同的n位数
#字符串删去前后空格
a,b = input().split(',')
a=a.strip()
b=b.strip()
b=int(b)
print(a*b)
7-7 转换函数使用
a,b = input().split(',')
b = int(b)
#类型转换左边要为字符类型,右为整数类型
c = int(a,b)
print(c)
7-8 比较大小
#初学者愚蠢做法,大家别学我这个
a,b,c = input().split()
a = int(a)
b = int(b)
c = int(c)
# chr别写错了char;chr的参数类型为整数
a = chr(a)
b = chr(b)
c = chr(c)
if c<b<a:
print("{}<{}<{}".format(c,b,a))
elif b<c<a:
print("{}<{}<{}".format(b,c,a))
elif b<a<c:
print("{}<{}<{}".format(b,a,c))
elif c<b<a:
print("{}<{}<{}".format(c,b,a))
elif a<b<c:
print("{}<{}<{}".format(a,b,c))
elif a<c<b:
print("{}<{}<{}".format(a,c,b))
7-9 输出摄氏-华氏温度转换表
low,upp= input().split()
low = int(low)
upp = int(upp)
# f = c*1.8 + 32
if low > upp or upp >50:
print("Invalid.")
else:
print("celsius fahr")
for i in range(low,upp+1,2):
fahr = i*1.8 +32
# 注意输出格式
print("{0}{1:>14.1f}".format(i,fahr))
7-10 偶数位特殊序列和
a,n = input().split()
# a = int(a)
n = int(n)
lst = [int(a*i) for i in list(range(2,n+1,2))]
print(sum(lst))
7-11 求平方与倒数序列的近似和
import math
m,n = input().split()
m = int(m)
n = int(n)
lst_1 = [ i**2 for i in list(range(m,n+1))]
lst_2 = [ 1/i for i in list(range(m,n+1))]
result = math.floor(sum(lst_1)+sum(lst_2))
print("sum ≈ {}".format(result))
7-12 计算函数f(x)
# math库函数的使用 精度问题 角度弧度 log函数
import math
x = float(input())
# 35是角度的单位,需要转换成弧度!
a = math.sin(35*math.pi/180)
b = (math.pow(math.e,x) - 15*x)/math.sqrt(x**4 + 1)
# c = math.log10(7*x)
c = math.log(7*x,math.e)
result = a + b - c
print("f({})={:.3f}".format(x,result))
7-13 分段计算居民水费
x = float(input())
if x <= 15:
y = 4*x/3
else:
y = 2.5*x - 17.5
print("{:.2f}".format(y))
7-14 输出指定图形
n = int(input())
for i in range(1,n+1):
rsl = "* " * i
print(rsl)
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。