跳转至

二、用Python语言编写程序

理论

判断题

1 输入正整数6和5,要求和,6+66+666+6666+66666,下面程序正确吗? a=int(input())
n=int(input())
print(sum([int('a'*i) for i in range(1,n+1)]))

错误: 错点在于'a'是字符串而不是数字,比如'a'*3得到的是'aaa',不能转成数字。修改的话可以改成int(a*i)或者int(str(a)*i)——str(a)得到的是'6'而不是'a'。

2 下面程序的运行结果是4。

i=3         
++i
错误: 在C等语言中,存在自增运算符++。但Python中不存在自增运算符。可以用i+=1或者i=i+1

3 当输入是:45,8 时,下面程序的输出结果是37。

a,b = input().split(',')
b=int(b)
c=int('a',b)
print(c)
错误: 相同的问题,int('a',b)使用的是字符串'a'而不是数字45,换成int(a,b)

4 当输入是10.0时,下面程序的输出是f(10.0) = 0.1。

x=int(input()) if x==0: result=0 else: result=1/x print('f({0:.1f}) = {1:.1f}'.format(x,result))

错误: int类型不能输入浮点数,会导致ValueError。可以使用float(input())

5 表达式 -2**4 等于16。

错误: 负的(2的4次方)是-16,前面打括号才是16,和数学上是一样的。

6 下面程序的输入是5,输出是:



m=int(input()) print('{:^5}'.format(''m)) print('{:^m}'.format(''m))

错误: 第一行结果是正确的,问题在第二行。format语法中,'{:^m}'不会从外部变量中查找m,可以修改成print('{:^{}}'.format('*' * m, m))。

7 下面程序的输出是:这是字符串输出格式□□123。 □表示空格。

print("这是字符串输出格式{:5s}".format("123"))

错误: :5s是指输出字符串(string)长度为5,默认左对齐(左边顶满),空格打右边去了,所以不对。(小于符号:\<5s表示左对齐,大于符号:\>表示右对齐)

8 下面语句的输出是:这是数字输出格式□□123。 □表示空格 print("这是数字输出格式{:5d}".format(123))

正确: :5d是指数字(digit)长度为5,默认右对齐,所以是正确的。(为什么数字是右对齐呢?看起来比较不习惯,是因为保留数字一般都是给高位留空,低位对齐(像竖式列两个数相加要把低位对齐一样)和字符串习惯不一样)

9 int(True)的返回值是1。

正确: True转成数字是1,False转成数字是0。如果是数字转bool,除了0转False其它全是True

10 bool(FALSE)的返回值是True。

错误: 首先FALSE是错误的拼法,Python区分大小写应该是False。会报错:NameError: name 'FALSE' is not defined. Did you mean: 'False'? 如果加上引号(单引号、双引号均可),则返回值是True(相当于bool一个非空字符串)。

11 bool([])的返回值是False。

正确: 一个空列表返回值是False。(列表是什么下一章会讲到)

12 bool(None)的返回值是False。

正确: None即为空,返回False。

13 print(bin(12.5))的输出是0b1100.1

错误: bin只能用于转换整数。

14 int("92",8)的值是74。

错误: 这个意思是92是八进制数,想要转成十进制,但八进制里不会出现9(7之后就进位了)。注意需要加引号。

15 表达式3 and 0 and "hello"的值是False。

错误: 输出是0而不是False。

16 z已赋值,x=(y=z+1)语句是错误语句

正确: 不能在表达式中进行赋值。但连续赋值x=y=z+1是可以的。需要留意一下。

选择题

1 下列数据类型中, Python不支持的是_______。

A. char

B. int

C. float

D. list

A: Python的数据类型不含char,char是C等语言中含有的字符类型。可以使用```print(dir(__builtins__))```直接查看所有的内置类型和函数。

2 Python 语句print(type(1J))的输出结果是__

A.

B.

C.

D.

A: 带j/J的类型是complex即复数类型。

3 Python 语句print(type(1/2))的输出结果是__

A.

B.

C.

D.

C: Python会自动计算出1/2是0.5,0.5是浮点数。需要注意Python没有double类型,double也是C等语言中的类型,意思是双精度浮点数。

4 Python 语句print(type(1//2))的输出结果是__

A.

B.

C.

D.

A: 1//2答案是0,整数除法的结果是整数。0的数据类型是int。

5 Python 语句 a=121+1.21; print(type(a))的输出结果是_______。

A.

B.

C.

D.

B: Python中,整数和浮点数的加法,结果会是浮点数。注意不是字符串,因为两个数都是数字而没有任何一个是字符串。

6 Python 语句 print(0xA + 0xB)的输出结果是__

A. 0xA + 0xB

B. A + B

C. 0xA0xB

D. 21

D: 0xA和0xB都是16进制数,加法会自动转换并输出十进制结果,即10+11=21.

7 Python 语句x=’car’; y = 2; print (x+y)的输出结果是______。

A. 语法错

B. 2

C. 'car2’

D. 'carcar’

A: 报错如下:TypeError: can only concatenate str (not "int") to str。即不能将数字和字符串进行拼接。

8 表达式1+2*3.14>0的结果类型是:

A. int

B. long

C. float

D. bool

D: 常见的计算顺序是幂运算(**)>正(+)负(-)号和按位取反(~)(不是加减!)>乘法(*)除法(/)整除(//)取模(%)>加(+)减(-)>位移(<<, >>)(左移和右移,可以理解成左移一位就是*2,右移一位就是//2)>按位与(&)>按位异或(^)>按位或(|)>比较运算(<, <=, >, >=, ==, !=) 所以最后一步计算的是比较,比较返回的是bool类型的值(即只有true和false)

9 如math模块已引入,Python 表达式 math.sqrt(4)*math.sqrt(9)的值为__

A. 36.0

B. 6

C. 13

D. 6.0

D: 开根号输出的类型是浮点数,浮点数相乘还是会保留浮点数。

10 关于Python中的复数,下列说法错误的是_____。

A. 表示复数的语法是real + imag j

B. 实部和虚部都是浮点数

C. 虚部必须后缀j, 且必须是小写

D. 方法conjugate 返回复数的共轭复数

C: 大小写都可以,其他都是正确的。可以记一下。

11 Python 语句 print(chr(65))的运行结果是_____。

A. 65

B. 6

C. 5

D. A

D: 转成字符的函数是chr(),A是65的ASCII码。如果chr()里面的参数不在ASCII码范围内,则运行后什么都不输出。

12 关于Python字符串,下列说法错误的是_____。

A. 字符即长度为1的字符串

B. 字符串以\0标志字符串的结束

C. 既可以用单引号,也可以用双引号创建字符串

D. 在三引号字符串中可以包含换行回车等特殊字符

B: 字符串在Python中没有结尾标志。\0结尾是C语言。

填空题

1 Python 表达式 10 + 5//3 –True+False的值为 10 .

10 + 1 - 1 + 0 = 10

2 Python 表达式 323 的值为 6561

先算后面的2**3 原式=3**8=6561

3 Python 表达式 round(17.0/3**2,2) 的值为 1.89 。

17.0/3**2=17.0/9=1.88888... round 后面是2的意思是保留2位小数四舍五入,所以是1.89

4 Python 表达式 0 and 1 or not 2 < True 的值为 True 。

先算not 2 答案是False 然后算1 or False 然后前面的项是False 所以是True(比较运算返回值是True或者False而不是1或者0)

5 Python 语句 print(int("20", 16), int("101",2))的输出结果是 32 5 。

16进制的20和2进制的101转成10进制,注意默认空一格。

6 Python 语句 print(hex(16), bin(10))的输出结果是(进制用小写字母表示) 0x10 0b1010 。

7 已知 a=3; b=5; c=6; d=True, 则表达式 not d or a>=0 and a+c>b+3的值是 True 。

False or True and True是True

8 Python 语句 print(abs(-10.2), round(abs(8-2j),3)) 的输出结果是 10.2 8.246 。

绝对值就是数学上的绝对值 复数绝对值就是求模长(注意要四舍五入保留三位小数)

9 Python 语句 x=True; y=False; z=False; print(x or y and z)的程序运行结果是 True 。

注意:先算and 再算or

10 Python 语句 x=0; y= True; print(x>=y and‘A'<'B') 的程序运行结果是 False 。

0>=1是错误的(有空格不影响)

11 Python 表达式 16-25>78/2 or "XYZ"!="xyz"and not (10-6>18/2)的值是 True 。

先把逻辑运算留下 -9 > 39 or True and not (4>9) 即 False or True and True 即 True

12 Python输出 print("hello" 'world')的结果是 helloworld 。

Python可以直接这样输出连续字符串,不需要打逗号 单引号双引号是等效的

13 表达式((2>=2) or (2<2)) and 2的值为多少? 2

(True or False) and 2 即 True and 2 Python计算and会有逻辑短路(其他语言同样会)——第一个部分若为False则返回0,不会计算第二个部分。否则返回第二个部分的值。eg:0 and 2 = 0,3 and 2 = 2,2 and 3 = 3

14 表达式 3 and 0 and 5的结果是什么? 0 。

有一个是0 连续and肯定是0

15 表达式 --3 的结果是什么? 3 。

负负得正

16 表达式 ---3 的结果是什么? -3 。

负负负得负

17 表达式32.2//6-24//6的值是 1.0 。

5.0-4(注意小数计算整除会保留浮点数,返回.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拆成16+0+0+2+1 每一位如果有 就加lst对应的值,如果不理解可以自己尝试一下~

19 汉字张的Unicode编码是 24352 。

直接百度,考试不考。

20 -7 & 5 的结果是 1 。 -7 | 9 的结果是 -7 。 -7 ^ 9 的结果是 -16 。 ~9 的结果是 -10

都转成二进制码来算,-7->1001,5->0101取and->0001 -7->11001(记住你写的最高位是符号位,最后再转就可以了,不需要一定要补到多少位),9->01001取or->11001 -7->11001,9->01001取xor->10000 9->01001取反10110 注意返回值都是十进制数

21 下面程序输出是 6 。

n = 39 remainders = [] while n>0: n,remainder = divmod(n,2) remainders.insert(0,remainder) print(len(remainders))

这个程序就是求39转成二进制之后有多少位,100111是6位

实验

  • 编程题就只放题目名和代码了,大家学习的时候可以对应着pta看一下~

7-1 计算分段函数

a=float(input())
if(a==0):
    print("g(","%.3f"%a,") = ","%.3f"%a,sep='')
else:
    b=1/2/a
    print("g(","%.3f"%a,") = ","%.3f"%b,sep='')

7-2 阶梯电价

a,b=input().split()
a=float(a)
b=float(b)
if(a<=50):
    sum=a*0.53
    print("cost =","%.2f"%sum)
else:
    sum=50*0.53+(a-50)*(0.53+b)
    print("cost =","%.2f"%sum)

7-3 比较大小

a,b,c=map(int,input().split())
if(b<c):
    b,c=c,b
if(a<b):
    a,b=b,a
if(b<c):
    b,c=c,b
print(chr(c),"<",chr(b),"<",chr(a),sep="")

7-4 输出摄氏-华氏温度转换表

a,b=map(int,input().split())
if(a<-20 or b>50 or a>b):
    print("Invalid.")
else:
    print("celsius    fahr")
    for item in range(a,b+1,2):
        c=float(item*1.8+32)
        print("%d%14.1f"%(item,c))

7-5 计算 11+12+13+...+m

a=int(input())
sum=0
for item in range(11,a+1):
    sum+=item
print("sum =",sum)

7-6 求奇数分之一序列前N项近似和

import math
n=int(input())
sum=0
for item in range(1,n+1):
    sum+=1/(2*item-1)
print("sum ≈",int(math.ceil(sum)))

7-7 求交错序列前N项和

a=float(input())
flag=1
sum=0
for item in range(0,int(a)):
    sum+=flag*(item+1)/(item*2+1)
    flag=-flag
print("%.3f"%sum)

7-8 求平方与倒数序列的近似和

import math
a,b=input().split()
a=int(a)
b=int(b)
sum=0
for c in range(a,b+1):
    item=float(c)
    sum+=item*item+1/item
print("sum ≈",math.floor(sum))

7-9 产生每位数字相同的n位数

a,b=map(int,input().split(","))
for i in range(0,b):
    print(a,end="")

7-10 偶数位特殊序列和

a,b=map(int,input().split())
sum=0
cnt=a*10+a
for i in range(0,b,2):
    sum+=cnt
    cnt=cnt*100+a*11
print(sum)

7-11 输出指定图形

a=int(input())
for i in range(0,a):
    for j in range(0,i+1):
        print("* ",end="")
    print("")

7-12 转换函数使用

import math
a,b=map(int,input().split(","))
sum=0
cnt=0
while(a!=0):
    c=a%10
    sum+=c*pow(b,cnt)
    a=(a-c)/10
    cnt+=1
print(int(sum))

7-13 计算函数f(x)

import math
x=input()
x=float(x)
sum=math.sin(35/180*math.pi)
sum+=(math.exp(x)-15*x)/math.sqrt(x*x*x*x+1)
sum-=math.log(7*x)
print("f(",x,")=","%.3f"%sum,sep="")