【全解析 | 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)



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。