python思考题实验题整理

思考题实验题整理

第2章

思考题

下列哪些是合法的变量名

A、6a2b、aBc、abc-123、ab_123、_ _、hello world

合法:A、aBc、ab_123

思考题:#TempConvert_1.py

  • 让用户输入摄氏度C,输入对应的华氏度F

  • 公示:F = C *1.8 + 32

  • 样例:

请输入摄氏度:25
25对应的华摄度为:77.0
C = eval(input("请输入摄氏度:"))
F = C * 1.8 + 32
print(C,"对应的华摄度为:",F)

程序结果:

请输入摄氏度:25
25 对应的华摄度为: 77.0

第3章

练习题

1.语句a=(3/4)+3%2;运行后,a的值为( )。a=0.75+1=1.75

2.若x=3.5;z=8x+z%3/4的值为( ). 3.5+(8%3)/4=3.5+8%3/4=3.5+2/4=3.5+0.5=4.0

3.设f=g=2.0,使f为4.0的表达式是( ). D

A. f/=g*10 # f=f/(g*10)=2/20=0.1

B. f-=g+2 # f=f-g-2=-2

C. f*=g-6 # f=f*(g-6)=2 *(2-6)=-8

D. f+=g # f= f+g=4

  1. x=1,x*=3+5**2的值为( ) x*=x*(3+25)=1*28=28

思考与练习

请将下面数学表达式用Python写出来,并运算结果。

1. x = ( 2 4 + 7 − 3 × 4 ) 5 x=\frac{(2^4+7-3\times4)}{5} x=5(24+73×4)

2. x = ( 1 + 3 2 ) × ( 16 m o d 7 ) / 7 x=(1+3^2)\times(16 mod 7)/7 x=(1+32)×(16mod7)/7

>>> x=(2**4+7-3*4)/5
>>> x
2.2

>>> x=(1+3**2)*(16%7)/7
>>> x
2.857142857142857

思考

1.让用户输入一个值赋值给x,判断x是否为’男‘

2.让用户输入一个值赋值给x,判断x是否在[0,100]间

>>> x=input("")
>? 男
>>> x == "男"
True
>>> x=int(input())
>? 45
>>> 0<=x<=100
True

1.若希望当a的值为奇数时,表达式的值为“真”,a的值为偶数时,表达式的值为“假”。则不能满足要求的表达式是( ) C

A. a%2 ==1

B. not a%2 == 0

C. not a%2 # not 8%2 = True not 9%2 =False

D. a%2

2.判断t是否为闰年。闰年的条件:年份t能被400整除,或者能被4整除但不能被100整除。

t = eval(input("请输入年份:"))
if t%400==0 or t%4==0 and t%100!=0:
    print(str(t)+"年是闰年")
else:
    print(str(t)+"年不是闰年")

思考

Exer1:用户输入一个三位自然数,计算并输出其百位、十位和个位上的数字。

x = int(input("请输入一个三位自然数:"))      
a = x//100
b = (x-a*100)//10
c = x-a*100-b*10
print("百位数字为:"+str(a),"十位数字为:"+str(b),"个位数字为:"+str(c))

程序结果:

请输入一个三位自然数:324
百位数字为:3 十位数字为:2 个位数字为:4
x=int(input())      # 324
a=x//100            # 3
b=x//10%10          # 324//10 = 32 32%10=2
c=x%10              # 324%10=4
print(a,b,c)
i=input("请输入一个三位自然数:")
print("百位数字为"+i[0])
print("十位数字为"+i[1])
print("个位数字为"+i[2])
x=int(input('请输入一个三位数:'))
a,b=divmod(x,100)
b,c=divmod(b,10)
print(a,b,c)
x=input("请输入一个三位数:")
a,b,c=map(int,x)  
print(a,b,c)

思考1:A=“5”+“8” A的值是多少? ’ 58’

思考2:name=”志存高远、脚踏实地“;name[5:]、name[0:-1]、name[:5]、name[0:-5]的值分别是多少?

>>> name="志存高远、脚踏实地"
>>> name[5:]
'脚踏实地'
>>> name[0:-1]
'志存高远、脚踏实'
>>> name[:5]
'志存高远、'
>>> name[0:-5]
'志存高远'

思考题:

下列代码的结果为:

>>>x='aaa bb c d e fff '
>>>b=','.join(x.split())  # x.split=['aaa','bb','c','d','e','fff'] 
>>>b
?
>>>b.replace("c",'cc').upper() # replace=> 'aaa,bb,cc,d,e,fff'=>upper

结果:

'aaa,bb,c,d,e,fff'
'AAA,BB,CC,D,E,FFF'

测试题:

  1. 复数 z,_________________________________可获得它的实数部分。 z.real

  2. 下面类型中,Python不支持的数据类型有( ) A.double

A.double B.int    C.float D.list

  1. 关于Python内存管理,下列说法错误的是 B.

A.变量不必事先声明

B.变量无须先创建和赋值而直接使用

C.变量无须指定类型

D.可以使用del释放资源

4.下列表达式的值为True的是( ) C

A.5<3>1 B.3>2>2 C.5%2 D.‟abc‟ > “xyz‟

5.下列表达式的值为True的是( ) C

A.(2**=3)<(2*=3)  # 2**=3 2=2^3 x 正常写应该为 a**=2 a=a^2 ;

B.3>2 and 5<2

C.1==1 and 2!=1

D.not(1==1 and 0!=1) #括号里头为True但加上 not则为False

6.a=3*4**2/8%5,a的值是 1 a=3 * 4 * * 2/8%5=3 * 4^2/8%5=3 * 16/8 %5=6 % 5 =1

7.判断t是否为润年。润年的条件:年份t能被400整除,或者能被4整除但不能被100整除

(t%400==0) or (t%4==0 and t%100 !=0)

8.x=3;y=4;z=5下面选项中哪个值为True( ) B

A. x and y B.x<=y C. z or x D.not x A.4 ;B.True; C.5;D.False

( and 取后面的数无论大小 or 取前面的数无论大小)

9.请将下面数学表达式用Python写出来,并运算结果x=(2^4+7-3×4)/5

x=(2^4+7-3*4)/5=(16+7-12)/5=(23-12)/5=1111/5=2.2

10.请将下面数学表达式用Python写出来x=(1+3^2)×(16 mod 7)/7

x=(1+3^2)*(16%7)/7=(1+9)*(2)/7=(10)*2/7=20/7=2.857142

第4章

思考题

思考eg4_1:从键盘输入圆的半径,如果半径大于等于0,则计算并输出圆的面积和周长。

import math
r=eval(input("请输入圆的半径:"))
if r>=0:
    p=math.pi
    s=p*pow(r,2)
    l=2*p*r
    print("面积为:"+str(s))
    print("周长为:"+str(l))
else:
    print("输入的圆半径有误!")

思考4-2:从键盘输入年份t,如果年份t能被400整除,或者能被4整除但不能被100整除,则输出”t年是闰年“,否则输出”t年不是闰年“,t用输入的年份代替。

t=eval(input("请输入年份t:"))
if t%400==0 or (t%4==0 and t%100!=0):
    print(t,"年是闰年")
else:
    print(t,"年不是闰年")
t = eval(input("请输入年份t:"))
print("{}闰年!".format("是"if t%400==0 or (t%4==0 and t%100!=0) else "不是"))

思考:sikao3.py

按照100分制,90分以上成绩为A,80~90为B,70 ~80为C, 60~70为D,60以下为E。当输入值大于100或是小于0的打印“输入错误!”。编写一个程序,当用户输入分数,自动转换为A、B、C、D、D形式打印。

x = eval(input("请输入成绩:"))
if x>100 or x<0:
    print("输入错误!")
elif x>=90:
    print("A")
elif x>=80:
    print("B")
elif x>=70:
    print("C")
elif x>=60:
    print("D")
else:
    print("E")

思考:

打印出1~100之间能被7整除,但不能同时被5整除的所有整数。

s=[]
for x in range(101):
    if x%7==0 and x%5!=0:
        s.append(x)

print(s)

程序结果:

[7, 14, 21, 28, 42, 49, 56, 63, 77, 84, 91, 98]

法二:

a=1
while a<=100:
    if a%7==0 and a%5!=0:
        print(a)
    a+=1

程序结果

7
14
21
28
42
49
56
63
77
84
91
98

思考:下面代码的执行结果是什么

#si4_4.py
for letter in 'helloworld':
    if letter == 'l':
        break
    print('当前字母:',letter)

结果:

当前字母:h
当前字母:e

思考hw1.py:阿姆斯特朗数,该数为n位,每其各位数字的n次方和等于该数本身。如1634、54748、548834

# hw1.py
x=str(input("请输入一个数:"))
n=len(x)
s=0
for i in x:
    I=int(i)
    s=I**n+s
print(s)
x=str(input("请输入一个数:"))
n=len(x)
s=0
t=0
while t<=2:
    for i in x:
        I=int(i)
        s=I**n+s
    print(s)
    s=0
    t+=1
    if t==3:
        break
    x=str(input("请输入一个数:"))
    n=len(x)

结果:

请输入一个数:1634
1634
请输入一个数:54748
54748
请输入一个数:548834
548834

思考hw2.py:判断一个数是否为素数。

素数:质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。

# hw2.py
x=int(input("请输入一个数:"))
n=x-1
while n>1:
    if x%n==0:
        print(x,"不是素数")
        break
    n-=1
else:
    print(x,"是素数")

结果:

请输入一个数:4
4 不是素数
x=int(input("Input a integer:"))
if x<=1:
    print("请输入大于1的整数:")
else:
    m=x//2
    for i in range(2,m):
        if x%i==0:
            print(x,"不是素数")
            break
    else:
        print(x,"是素数")

p.s else和什么对齐

x=int(input("Input a integer:"))
if x==2:
    print(x,"是素数")
else:
    for i in range(2,x):
        if x%i==0:
            print(x,"不是素数")
            break
    if x==i+1:
        print(x,"是素数")
x=int(input("请输入一个数:"))
n=2
while n<=(x/2):
    if x%n==0:
        print(x,"不是素数")
        break
    n+=1
else:
    print(x,"是素数")

思考与练习

思考hw3.py:编写程序,生成一个字符串,该字符串由随机生成10个不重复的小写字母组成。输出该字符串。

import random                         
n=0                                   
s=[]                                  
while n<=10:                          
    s.append(random.randint(65,90))   
    n=n+1                             
print(s)                              
h=[]                                  
for i in s:                           
    a=chr(i).lower()                  
    h.append(a)                       
print(h)                              

结果:

[88, 68, 72, 65, 66, 78, 80, 78, 80, 87, 87]
['x', 'd', 'h', 'a', 'b', 'n', 'p', 'n', 'p', 'w', 'w']
import random
z=""
for i in range(0,26):
    z += chr(ord("a")+i)
print(''.join(random.sample(z,10)))

结果:

xnkfrscvuq
import random
list1="";i=0
while i<10:
    c=chr(random.randint(ord('a'),ord('z')))
    if c not in list1:
        i += 1
        list1=list1+c
print(list1)

思考#si4_5.py: 当输入4、'ab’执行结果分别是什么?

try:
  num = eval(input("请输入一个整数:"))
  print(num**2)
except NameError:
  print("输入错误,请输入一个整数!")

程序结果:

请输入一个整数:4
16

请输入一个整数:ab
输入错误,请输入一个整数!

思考#si4_6.py: 若在执行print(8/0)语句时,要捕捉ZeroDivisionError异常,并输出系统报错的原因

如何实现代码

try:
    print(8/0)
except ZeroDivisionError as t:
    print(t)

结果:

division by zero
  1. 下面哪个代码不能随机生成100内的1个整数( ) # C

A.random.sample(range(0,100),1) # [82]

B.random.randint(0,100) # 94

C.random.getrandbits(100) # 618015465451243308573761656840 生成一个k比特长度的随机整数

D.random.randrange(0,101,1) # 55

2.下面代码哪个能随机选取0到100间的奇数( ) A

A.random.randrange(1,101,2) # 1到100 间的奇数

B.random.randint (0,100) # 0到99任意整数

C.int(random.uniform(0,100)) # 0到99任意小数

D.random.choice(range(1,100)) # 1到99

3.下面哪个代码能从字符串’abcdefghij’中随机选取4个字符 A

A.random.sample(“abcdefghij”,4)

B.random.choice(“abcdefghij”,4) # 错误

C.random.uniform(“abcdefghij”,4) # 错误

D.random.random(“abcdefghij”,4) # 错误

4.下面哪个代码不能随机选取列表a=[‘apple’, ‘pear’, ‘peach’, ‘orange’]中的1个字符串 B

A. random.choice(a)

B. random.shuffle(a) # 将序列类型中的元素随机排列,返回打乱后的序列

C. random.sample(a,1)

D. t=random.randint(0,3) a[t]

5.下面哪个代码能随机生成[2 , 6]之间的一个小数 C

A.random.random()*4+2 # 1之间 * 4 = 4之间的小数 + 2 6取不到

B.random.randint(2.6)

C.random.uniform(2,6)

D.random.randrange(2,6)

实验1

  1. 【题目描述】:输入一个整数x,判断其能否既被3整除也被7整除。如果能被3和7整除,则输出“Yes”,否则输出“No”。文件保存为:学号_1.py。

【输入输出样例1】

输入输出
35No

【输入输出样例2】

输入输出
21Yes

解:

x = input("输入一个整数:")
if x%3==0 and x%7==0:
	print("Yes")
else:
	print("No")
  1. 【题目描述】:输入某学生的课程成绩score,按如下公式输出成绩的等级。文件保存为:学号_2.py。
90≤score≤100
80<score≤90
70<score≤80
及格60<score≤70
不及格0<score≤60
请输入正确分数score<0或是score>100

【输入输出样例1】

输入输出
45不及格

【输入输出样例2】

输入输出
103请输入正确分数

解:

s=input("学生成绩:")
if s<0 or s>100:
	print("请输入正确分数")
elif s<=60:
	print("不及格")
elif s <=70:
	print("及格")
elif s <=80:
	print("中")
elif s<=90:
	print("良")
else:
	print("优")
  1. 【题目描述】:输入3条线段长度,判断这3条线段构成的三角形类型(任意两条边之和大于等于第三条边则能构成三角形)。若不能构成三角形,则输出“不能构成三角形”,若可以构成三角形,判断构成三角形是为等边三角形、等腰三角形或一般三角形,分别输出“等边三角形”、“等腰三角形”或“一般三角形”。文件保存为:学号_3.py。

【输入输出样例1】

输入输出
4 4 5等腰三角形

【输入输出样例2】

输入输出
3 4 5一般三角形

解:

a=int(input("输入线段1长度:"))
b=int(input("输入线段2长度:"))
c=int(input("输入线段3长度:"))
if a+b<c or a+c<b or b+c<a:
	print("不能构成三角形")
else:
	if a==b and a==c and b==c:
		print("等边三角形")
	elif a!=b and a!=c and b!=c:
		print("一般三角形")
	else:
		print("等腰三角形")

实验2:

  1. 【题目描述】

输入2个正整数m和n,输出[m,n]区间内所有素数,文件保存为:学号_1.py。

【输入输出样例1】

输入输出
2 152 3 5 7 11 13

解:

n=int(input("请输入一个正整数:"))
m=int(input("请再输入一个正整数:"))
num=[]
for i in range(n,m+1):
	for j in range(2,i):
		if i % j == 0:
			break
	else:
		num.append(i)
print(num)

  1. 【题目描述】

输出如下所示的倒金字塔型图案,图案的高度(即打印*号的行数)由键盘输入。文件保存为:学号_2.py。

*********
 *******
  *****
   ***
    *

【输入输出样例】

输入4:
输出:
*******
 *****
  ***
   *

解:

x = int(input("请输入高度"))
for i in range(0,x):
	print(" "*abs(-i)+"*"*(2*(x-i)-1))

法二:

n=int(input("请输入金字塔层数:"))
for i in range(-n,0):
	str='*'*(2*abs(i)-1)
	print(str.center(10))
  1. 【题目描述】

已知表达式sum=1!+2!+3!+…+n!。输入正整数n,求解表达式sum的值并输出。文件保存为:学号_3.py。

【输入输出样例】

输入输出
12522956313

解:

import math
x=int(input("请输入正整数n"))
s=0
for i in range(1,x+1):
	s=math.factorial(i)+s
print(s)
  1. 【题目描述】

完全数是指它所有的真因子(即除了自身以外的正因子)的和恰好等于它本身。输入一个正整数n,判断该整数是否为完全数。如果是完全数,则输出“Yes”,否则输出“No”。文件保存为:学号_4.py。

【输入输出样例】

输入输出
6Yes
n=eval(input())
s=1
for i in range(2,n//2+1):
     if n%i==0:
          s=s+i
if s==n and s!=1:
     print("Yes")
else:
     print('No')

第5章

思考题

思考5_1:

def circle(r):
  if r<=0:
    print("要求输入正数!")
    return
  area=3.14*r*r
  perimeter=2*3.14*r
  return area,perimeter

r=-3
re=circle(r)

if re!=None:
  print("半径为",r,"的面积为:",re[0])
  print("半径为",r,"的圆周长为:",re[1])

运行结果为:

要求输入正数!

思考5-2(课堂):

编写一个函数sum_all,参数可以接收任意个的数字,返回值为这些参数的和。

#coding=utf-8
# 法一
def sum_all(a,*b):
	for i in b:
		a = a+i     # 也可写成 a += i
	return a
	
print(sum_all(1,2,3))
print(sum_all(1,2,3,4,5,6))

# 法2
def sum_all(*a):
	n=0
	for i in a:
		n=n+i
	return n

print(sum_all(1,2,3))
print(sum_all(1,2,3,4,5,6))

结果:

6
21
  1. Python中定义函数的关键字是( ) A.

A) def B) define C) function D) defunc

  1. 如果函数中没有return语句或return语句不带任何返回值,那么该函数( ) B

A)没有返回值 B)返回值为None C)返回值为Nun D)返回值为Null

  1. 判断题:函数在调用前不需要定义,直接拿来用就行 x

  2. x = [‘train’, ‘bus’, ‘car’, ‘ship’] 下面哪个选项的值是’car’ A.

(A)x[-2] (B) x[3] ©x[2:3] (D)x[-1]

  1. x = [‘train’, ‘bus’, ‘car’, ‘ship’] 下面哪个选项的值不是[‘train’, ‘bus’, ‘car’, ‘ship’] C.

(A)x[:4] (B) x[:] ©x[1:] (D)x

  1. x = [‘train’, ‘bus’, ‘car’, ‘ship’] 下面哪个选项的值是[‘car’, ‘ship’] C.

(A)x[-2:-1] (B) x[-2:0] ©x[-2:] (D)x[2:3] A=[‘car’] B=[] 步长错误 D=[‘car’]

  1. x=[[‘IBM’,‘Apple’,‘Lenovo’],[‘America’,1]] 下面哪个选项的值不是‘America’ D

(A)x[-1][-2] (B) x[1][0] ©x[-1][0] (D)x[-1][1]

  1. x=[[‘IBM’,‘Apple’,‘Lenovo’],[‘America’,1]] 下面哪个选项的值不是 ‘Am’ D.

(A)x[1][0][0:2] (B) x[1][0][:2:1] ©x[1][0][:-5:1] (D)x[1][0][:2:-1]

实验4

  1. 【题目描述】

编写函数Gcd( ),该函数用于求整数x和y的最大公约数,并返回最大公约数。设置两个参数的默认值都为1。打开文件shiyan4_1.py完成程序的编写。文件另存为:学号_1.py。

【输入输出样例】

输入输出
15 2515 和 25 的最小公倍数是 75

解:

########完成函数Gcd,实现x,y最大公约数
def Gcd(x=1,y=1):     # 设置两个参数的默认值为1
	r=x%y    
	while r!=0:
		x=y  
		y=r
		r=x%y
	return y

#################
#下面代码不能改动
Gcd()
a=eval(input("请输入一个数:"))
b=eval(input("请输入一个数:"))
print(a,'和',b,'的最小公倍数是',a*b//Gcd(a,b))

  1. 【题目描述】

编写函数find(*a),注意a前面有个星号。该函数可以接受多个数据,找出这些数据中与所有元素的平均值绝对偏差最大的元素,并返回该元素值。

打开shiyan4_2.p文件,完成程序的编写。文件另保存为:学号_2.py。

【输入输出样例】

输入输出
98 89

解:

import math
def find(*a):
############################
#代码请写在这个位置,其他地方的代码请不要修改
	temp=sorted(a)        # 对列表a进行排序
  s=sum(a)/len(a)       # 均值
  if math.fabs(temp[0]-s)>=math.fabs(temp[-1]-s):
    return temp[0]
  else:
    return temp[-1]

#############################

print(find(23,21,5,98,89,12,86,80,8,61))
print(find(23,21,5,78,19,12,6,10,8,66,89,67,58,34,56,32,67,87,45,32))

import math
def find(*a):
############################
#代码请写在这个位置,其他地方的代码请不要修改
   s=sum(a)/len(a)       # 均值
   temp=0                
   tmax=a[0]
   for i in a:
   	if math.fabs(i-s)>temp:    # math.fabs 为绝对值
   		temp=math.fabs(i-s)
   		tmax=i
   return tmax
#############################

print(find(23,21,5,98,89,12,86,80,8,61))
print(find(23,21,5,78,19,12,6,10,8,66,89,67,58,34,56,32,67,87,45,32))

  1. 【题目描述】

编写函数encry(s),可以将传递的多个字符串进行加密,将字符串里的字母变成其后的第4个字母,如字母A变成字母E,a变成e,Z变成D;其他字符不变。最终形成一个字符串作为返回值。主程序让用户输入多个字符串,当用户输入-1,结束输入。

打开shiyan4_3.p文件,完成程序的编写。文件另保存为:学号_3.py。

【输入输出样例】

输入输出
AZ 2ab -1[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h4L9J59R-1593709114714)(file:Users/eve/Library/Group%20Containers/UBF8T346G9.Office/TemporaryItems/msohtmlclip/clip_image001.jpg)]

解:

def encry(s):
############################
#代码请写在这个位置,其他地方的代码请不要修改
	mystr=""
	for i in s:
		if 'a'<=i<="z":
			temp=chr((ord(i)+4-ord("a"))%26+ord("a"))  # 防止最后几个字母z 超出范围
			mystr=mystr+temp 
		elif 'A'<=i<='Z':
			temp=chr((ord(i)+4-ord("A"))%26+ord("A"))
			mystr=mystr+temp
		else:
			mystr=mystr+i
	return mystr

#############################
s=''
a=input("请输入:")
while(a!="-1"):
    s=s+a
    a=input()
print('加密前的明文是:', s)
print('加密后的密文是:',encry(s))

第6章

思考题

思考:si6_4:

编写程序,输入两个分别包含若干整数的列表list1和list2。用list1元素作为键,用list2作为值,产生一个字典。该字典的元素个数为list1和list2元素较少的那个列表长度,输出该字典。

请输入list1:3,5,6,2,7,346
请输入list2:4,6,345,65,54,5,2,7
{3:4,5:6,6:345,2:65,7:54,346:5}

解:

list1=eval(input("请输入list1:"))
list2=eval(input("请输入list2:"))
c=dict(zip(list1,list2))
print(c)

思考si6_5.py

文件里dict1变量保存的是学生健康打卡信息,请在##==之间输入代码。

dict1={'张三三':[{'日期':'4月30日','省份':'福建','城市':'福州','是否健康':'是','是否接触过疑似病例':'否'},\
                            {'日期':'5月1日','省份':'福建','城市':'福州','是否健康':'是','是否接触过疑似病例':'否'}], \
            '李四四':[{'日期':'4月30日','省份':'福建','城市':'三明','是否健康':'是','是否接触过疑似病例':'否'},\
                            {'日期':'5月1日','省份':'福建','城市':'三明','是否健康':'是','是否接触过疑似病例':'否'}],
            '王五五':[{'日期':'4月30日','省份':'福建','城市':'泉州','是否健康':'是','是否接触过疑似病例':'否'},\
                            {'日期':'5月1日','省份':'福建','城市':'泉州','是否健康':'是','是否接触过疑似病例':'否'}], \
         }
name=input('请输入姓名:')
date=input('请输入日期:')
tempdata=dict1.get(name,'不存在')  # 键name存在则返回相应值,否则返回'不存在'
if  tempdata=='不存在':
     print(name+'不存在')
else:
     for i in tempdata:          # i 为键
          if i['日期']==date:
               print(i)
               break
     else:
          print("今日未打卡")
     

实验3

  1. 【题目描述】

从键盘输入一个字符串s,删除其中所有的小写字符后形成一个新字符串,然后输出。文件保存为:学号_1.py。

【输入输出样例】

输入输出
www.163.com.163.

解:

a=str(input("输入一个字串符:"))
s=""
for i in a:
	if not i.islower():
		s=s+i
print(s)
  1. 【题目描述】

生成一个列表,该列表含有20个不相同的随机整数,并且每个元素在[1,100]间,打印该列表,并输出偶数的个数。文件保存为:学号_2.py。

【输入输出样例】

输入输出
[83, 78, 55, 73, 64, 6, 52, 72, 44, 2, 63, 37, 14, 66, 77, 36, 67, 22, 76, 98] 13

解:

import random
s=[]
for i in range(20):
	s.append(random.randint(0,100))
print(s)
a=[]
for i in s:
	if i%2==0:
		a.append(i)
print(len(a))
  1. 【题目描述】

健康打卡。dict1字典保存了个人健康打卡信息,请根据题目要求输入信息。若输入的姓名不在字典中,则字典dict1添加一个新元素;若该人已经存在,则在这人的信息末尾添加一条记录。打开文件shiyan3_3.py文件,在###间补充代码,其他的代码不得修改。运行后将文件另保存为:学号_3.py。

【输入输出样例】

输入输出
请输入姓名:王五五 请输入日期:5月3日 请输入省份:福建 请输入城市:泉州 是否健康:否 家庭成员是否健康:是(‘张三三’, [{‘日期’: ‘4月30日’, ‘省份’: ‘福建’, ‘城市’: ‘福州’, ‘是否健康’: ‘是’, ‘家庭成员是否健康’: ‘是’}, {‘日期’: ‘5月1日’, ‘省份’: ‘福建’, ‘城市’: ‘福州’, ‘是否健康’: ‘是’, ‘家庭成员是否健康’: ‘是’}]) (‘李四四’, [{‘日期’: ‘4月30日’, ‘省份’: ‘福建’, ‘城市’: ‘三明’, ‘是否健康’: ‘是’, ‘家庭成员是否健康’: ‘是’}, {‘日期’: ‘5月1日’, ‘省份’: ‘福建’, ‘城市’: ‘三明’, ‘是否健康’: ‘是’, ‘家庭成员是否健康’: ‘是’}]) (‘王五五’, [{‘日期’: ‘4月30日’, ‘省份’: ‘福建’, ‘城市’: ‘泉州’, ‘是否健康’: ‘是’, ‘家庭成员是否健康’: ‘是’}, {‘日期’: ‘5月1日’, ‘省份’: ‘福建’, ‘城市’: ‘泉州’, ‘是否健康’: ‘是’, ‘家庭成员是否健康’: ‘是’}, {‘日期’: ‘5月3日’, ‘省份’: ‘福建’, ‘城市’: ‘泉州’, ‘是否健康’: ‘否’, ‘家庭成员是否健康’: ‘是’}])

【输入输出样例】

输入输出
请输入姓名:万芳 请输入日期:5月2日 请输入省份:江西 请输入城市:上饶 是否健康:否 家庭成员是否健康:是(‘张三三’, [{‘日期’: ‘4月30日’, ‘省份’: ‘福建’, ‘城市’: ‘福州’, ‘是否健康’: ‘是’, ‘家庭成员是否健康’: ‘是’}, {‘日期’: ‘5月1日’, ‘省份’: ‘福建’, ‘城市’: ‘福州’, ‘是否健康’: ‘是’, ‘家庭成员是否健康’: ‘是’}]) (‘李四四’, [{‘日期’: ‘4月30日’, ‘省份’: ‘福建’, ‘城市’: ‘三明’, ‘是否健康’: ‘是’, ‘家庭成员是否健康’: ‘是’}, {‘日期’: ‘5月1日’, ‘省份’: ‘福建’, ‘城市’: ‘三明’, ‘是否健康’: ‘是’, ‘家庭成员是否健康’: ‘是’}]) (‘王五五’, [{‘日期’: ‘4月30日’, ‘省份’: ‘福建’, ‘城市’: ‘泉州’, ‘是否健康’: ‘是’, ‘家庭成员是否健康’: ‘是’}, {‘日期’: ‘5月1日’, ‘省份’: ‘福建’, ‘城市’: ‘泉州’, ‘是否健康’: ‘是’, ‘家庭成员是否健康’: ‘是’}]) (‘万芳’, [{‘日期’: ‘5月2日’, ‘省份’: ‘江西’, ‘城市’: ‘上饶’, ‘是否健康’: ‘否’, ‘家庭成员是否健康’: ‘是’}])

解:

dict1={'张三三':[{'日期':'4月30日','省份':'福建','城市':'福州','是否健康':'是','家庭成员是否健康':'是'},\
                            {'日期':'5月1日','省份':'福建','城市':'福州','是否健康':'是','家庭成员是否健康':'是'}], \
            '李四四':[{'日期':'4月30日','省份':'福建','城市':'三明','是否健康':'是','家庭成员是否健康':'是'},\
                            {'日期':'5月1日','省份':'福建','城市':'三明','是否健康':'是','家庭成员是否健康':'是'}],
            '王五五':[{'日期':'4月30日','省份':'福建','城市':'泉州','是否健康':'是','家庭成员是否健康':'是'},\
                            {'日期':'5月1日','省份':'福建','城市':'泉州','是否健康':'是','家庭成员是否健康':'是'}] \
         }
name=input('请输入姓名:')
date=input('请输入日期:')
province=input('请输入省份:')
city=input('请输入城市:')
health=input('是否健康:')
family=input('家庭成员是否健康:')
##==========根据输入的信息往字典dict1添加记录;
##==========若没有这个人,则字典dict1添加一个新元素;若该人已经存在,则这人的信息添加一条记录

a=dict1.get(name,-1)   # 键存在则返回相应值,否则返回默认值 
if a==-1:
	dict1[name]=[{"日期":date,'省份':province,'城市':city,'是否健康':health,'家庭成员是否健康':family}]
else:
	dict1[name].append({"日期":date,'省份':province,'城市':city,'是否健康':health,'家庭成员是否健康':family})

##===========
for i in dict1.items():
     print(i)

第7章

思考题

思考7_1:下面的代码

f = open("text.txt",'wb+')     # 打开text.txt文件以覆盖写模式,二进制文件模式以及在此基础上同时增加读写功能
f.write(b"python")       # 二进制的python写入
f.seek(2,0)             # 光标为文件方向的第2个字节,光标在文件开头
print(f.read(3))        # 读取光标位置向后数3个字节 光标移动到第5个字节
f.seek(-3,1)            # 光标移到方向头为开头3个字节,光标在当前位置 从第5个字节移到第2个字节
print(f.read(1))       # 读取文件光标位置向后数1个字节
f.close()

结果为:

b'tho'
b't'

思考7_2:复制1.txt文件,生成一个名为1_1.txt新的文本文件

答:

f1 = open("1.txt","r",encoding='utf-8')
f2 = open("1_1.txt","w")
a = f1.read()
f2.write(a)
f1.close()
f2.close()

或:

f1 = open("1.txt","r",encoding='utf-8')
f2 = open("1_1.txt","w")
for i in f1:
  f2.write(i)
  
f1.close()
f2.close()

==思考7_3:==生成1至122之间的随机整数数,转成对应的字符,然后将满足以下条件(大写字母、小写字母、数字和一些特殊符号’*‘,’&‘,’^‘,’$‘)的字符逐一输入写入文本test.txt中,当光标位置达到101时停止写入。

判断是否小写字母的方法:字符串.islower()

判断是否大写字母的方法:字符串.isupper()

判断是否数字的方法:字符串.isdigit()

答:

产生随机整数 randint()

转成对应的字符 chr()

chr() in [’*‘,’&‘,’^‘,’$‘]

达到101个字节 f.tell()

import random
f1=open("test.txt",'w+')
while f1.tell() <= 101:
  a=chr(random.randint(1,122))
  if a.islower() or a.isupper() or a.isdigit() or a in['*','&','^','$']:
    f1.write(a)

f1.close()

输出结果:

打开text.txt文件

ln7KSuL5qRzQ7LJRmH5O6FOiyrKHCL$^mHwlYoVJo*DmP8MPKQKpH4uun*L*ZE91lEEs&tdtEKTSrMqxI9BwHb63fefiapy9J^VY1t

思考7_4:

逐个字节读取:'fy.txt’文件,输出该文件前10个字节字符和后10个字节字符

fy = open("fy.txt",'rb')    # 注意要使用rb方式打开,下面才可进行读写 不然会报错.UnsupportedOperation: can't do nonzero end-relative seeks
fy.seek(0)
print(fy.read(10))
fy.seek(-10,2)
print(fy.read(10))
fy.close()

程序结果:

b'1.The Chin'
b'nto orbit.'

思考7_5:

统计‘fy.txt’文件中大写字母、小写字母和数字的个数。可以利用字符串的isupper()、islower()和isdigit()方法。

输入如下所示:

大写有6个,小写有205个,数字有4

答:

f=open("fy.txt","r")
a=f.read()      # ps 注意
s=0
y=0
c=0
for i in a:
    if i.isupper():
        s=s+1
    elif i.islower():
        y=y+1
    elif i.isdigit():
        c=c+1
    else:
        pass
f.close()
print("大写有"+str(s)+"个, "+"小写有"+str(y)+"个, 数字有"+str(c)+"个")

程序结果:

大写有6, 小写有205, 数字有4

代码简化

f = open("fy.txt").read()    # 字符串
s,y,c=0,0,0
while 1:
    if f.isupper():
        s+=1
    elif f.islower():
        i+=1
    elif f.isdigit():
        d+=1
    if not f:
        break
f.close()
print('大写有{}个,小写有{}个,数字有{}个',format(s,y,c))

实验6

1.创建一个6_1.txt文件,提醒用户输入一些信息,当用户输入-1时结束输入;把用户的输入都保存到6_1.txt文件中,然后把该文件全部显示出来。

解:

f = open("6_1.txt", "a+")
x=input("请输入要编写的内容(输入-1结束输入):")
while x != '-1':
        f.write(x+'\n')
        x=input("请输入要编写的内容(输入-1结束输入):")
f.seek(0,0)
print(f.read())
f.close()

程序结果:

请输入要编写的内容(输入-1结束输入):23423
请输入要编写的内容(输入-1结束输入):435245
请输入要编写的内容(输入-1结束输入):134234
请输入要编写的内容(输入-1结束输入):Iloveyou
请输入要编写的内容(输入-1结束输入):-1

fefe adfe 
23423
435245
134234
Iloveyou

2.在text.csv文件记录了某个班级所有学生的名字、学号和3科成绩,要求读取该文件,计算每个学生的总成绩并输出,统计出每科的平均成绩并输出。请编程实现,程序保存为学号_2.py

输出如下所示:

1001 Make 221

1002 Linda 246

1003 Jone 247

#csv
学号,姓名,数学,英语,语文
1001,Make,86,67,68
1002,Linda,78,74,94
1003,Jone,90,68,89

数学平均:84.67;英语平均:69.67;语文平均:83.67

解:

f=open("text.csv",encoding='gbk')
stu=[]
j=0
f.readline()    # 已经读取了第一行 光标移动到第二行开始
for i in f.readlines():
    i=i[:len(i)-1]         #读取出来是一整行的数据,后面有个反斜杠符\n去掉 从头取到尾
    stu.append(i.split(",")) # [['1001','Make','86','67','68']]  
    stu[j][2]=int(stu[j][2]) # j=0大列表中的小列表,[2]为第三个'86' 
    stu[j][3]=int(stu[j][3]) # '67'
    stu[j][4]=int(stu[j][4]) # '68' 
    s=sum(stu[j][2:5])       # stu=[['1001', 'Make', 86, 67, 68]]  86+67+68=221
    print(stu[j][0],'\t',stu[j][1],'\t',s)  
    j=j+1

# [['1001', 'Make', 86, 67, 68], ['1002', 'Linda', 78, 74, 94], ['1003', 'Jone', 90, 68, 8]]
s1=0;s2=0;s3=0
for i in range(0,j):
    s1=stu[i][2]+s1    # 86+78+90 
    s2=stu[i][3]+s2    # 67+74+68
    s3=stu[i][4]+s3    # 68+94+8
print("数学平均:{:.2f};英语平均:{:.2f};语文平均:{:.2f}".format(s1/j,s2/j,s3/j))

程序结果:

1001 	 Make 	 221
1002 	 Linda 	 246
1003 	 Jone 	 247
数学平均:84.67;英语平均:69.67;语文平均:83.67

第八章

思考题

思考8_1:定义鸟类Bird,鸟类的共同属性feather = True和reproduction = ‘egg’。

该类有一个方法移动move(),该方法执行print(‘飞飞飞飞’)

假设养了一只鹦鹉交spring,它是Bird的一个对象,输出鹦鹉的两个属性,并调用move方法

class Bird():
    feather = True
    reproduction ='egg'
    def __init__(self,name):     # 都要写
        self.name = name
    def move(self):
        print("飞飞飞飞")
bird = Bird('spring')
print(bird.feather)
print(bird.reproduction)
bird.move()

程序结果:

True
egg
飞飞飞飞

思考si8_2: 定义Rectangle类表示矩形。该类有两个属性width和height,均在构造函数中创建,定义方法getArea和getPerimeter计算矩形的面积和周长。

class Rectangle():
    def __init__(self,width,height):
        self.width = width
        self.height = height

    def getArea(self):
        a = (int(self.width))*(int(self.height))
        return a
    def getPerimeter(self):
        b = (int(self.width))+(int(self.height))
        B = 2*b
        return B

t1 = Rectangle(15,6)
print(t1.getArea())
print(t1.getPerimeter())

程序结果:

90
42

思考8_3:下面代码的运行结果是什么?

class Testclass:
    data=100    # 类属性

    def setpdata(self,value):
        self.pdata=value

    def showpdata(self):
        print("self.pdata=",self.pdata)

x = Testclass()
x.setpdata("与时俱进")
x.showpdata()

y = Testclass()
y.setpdata("勇于创新")
y.showpdata()
print(y.data) 

程序运行结果:

self.pdata= 与时俱进
self.pdata= 勇于创新
100

思考8_4: 下面代码的运行结果是什么?

class Testclass:
    data= "有信念、有梦想"    # 类属性
    def setdata(self,value):
        self.data=value   # 创建对象属性
    def showdata(self):
        print(self.data)  # 打印对象属性

x=Testclass()
x.data="勇于创新"
y=Testclass()
Testclass.data="有奋斗、有奉献"  # 更改了类属性
print(x.data)    # 对象属性
print(y.data)    # 没有对y.data赋值 没有创建对象属性,还是修改类属性
print(Testclass.data)

程序运行结果:

勇于创新
有奋斗、有奉献
有奋斗、有奉献

思考8_5:下面代码有1处出错,如何修改

class Rectangle:
    def __init__(self,w,h):
        self.width=w
        self.height=h
    
    def getArea(self):
        return self.width*self.height
    def getPerimeter(self):
        return (self.width+self.height)*2

t1=Rectangle(2,3)
print(Rectangle.width)    # 内属性

答:

print(t1.width)

思考8_6:

class Cartoon_sheep:
    race='sheep'
    def __init__(self,namevalue,sexvalue,birthdayvalue):
        self.name=namevalue
        self.sex=sexvalue
        self.__birthday=birthdayvalue
        self._energy=0

    def eat(self,food):
        print("我正在吃",food)
  sheep1= Cartoon_sheep('喜羊羊','男','羊历3505年5月25日')

下面哪些调用是正确的?

a) sheep1.eat(‘草’) # sheep1–>self 草–>food
b) sheep1.eat(sheep1,“草”)
c) Cartoon_sheep.eat(‘草’)
d) Cartoon_sheep.eat(sheep1,‘草’) # sheep1–>self 草–>food

a) d)

思考8_7:下面Site的定义共有4处错,如何修改

class Site:
    __number=0    # 私有类属性

    def __init__(namevalue,urlvalue): # 少了self
        self.name=namevalue
        self.__url=urlvalue       # 私有对象属性
        self.number=self.number+1  # 由下文可知应为私有属性

    def printme(self):
        __privateme(self)              # 利用类属性的方法错误
        print('name:',self.name)
        print('url:',self.url)           # 利用私有对象的方法错误

    def __privateme(self):      # 私有方法
        print(Site.__number)    

wz1 = Site("福建农林大学","wwww.fafu.edu.cn")
wz1.printme()
wz2 = Site("学习强国","www.xuexi.cn")
wz2.printme()

修改

class Site:
    __number=0

    def __init__(self,namevalue,urlvalue):  # 1
        self.name=namevalue
        self.__url=urlvalue
        Site.__number=Site.__number+1      # 2

    def printme(self):
        Site.__privateme(self)     # 3
        print('name:',self.name)   
        print('url:',self.__url)   # 4

    def __privateme(self):     
        print(Site.__number)

wz1 = Site("福建农林大学","wwww.fafu.edu.cn")
wz1.printme()
wz2 = Site("学习强国","www.xuexi.cn")
wz2.printme()

程序结果:

1
name: 福建农林大学
url: wwww.fafu.edu.cn
2
name: 学习强国
url: www.xuexi.cn

思考8-12:子类Shark,继承Fish类;产生Shark对象时,能初始化其hungry属性为True,请写Shark类代码。

import random
class Fish:
     def __init__(self):
          self.x=random.randint(0,10)
          self.y=random.randint(0,10)
     def move(self):
          self.x-=1
          print("我的位置是",self.x,self.y)

答:

import random
class Fish:
     def __init__(self):
          self.x=random.randint(0,10)
          self.y=random.randint(0,10)
     def move(self):
          self.x-=1
          print("我的位置是",self.x,self.y)
class Shark(Fish):
     def __init__(self):
          self.hungry=True

a=Shark()
print(a.hungry)

思考8-13:

若Shark在产生对象时,除了能有自己的hungry属性,也想具有Fish类的x和y属性,那该如何操作?改进后的代码:

import random as ran
class Fish:
     def __init__(self):
          self.x=ran.randint(0,10)
          self.y=ran.randint(0,10)
     def move(self):
          self.x-=1
          print("我的位置是{},{}".format(self.x,self.y))
class Shark(Fish):
     def __init__(self):
          self.hungry=True
          super().__init__()
s=Shark()
s.move()

程序结果:

我的位置是0,5

思考8_14:下面代码的运行结果是什么?

class Foo(object):
  def __init__(self, a, b):
    self.a = a
    self.b = b
class Bar(Foo):
  def __init__(self, a, c):     
    super().__init__(a,"有担当")   # 创建了a,b属性
    self.c = c
n = Bar("有理想","有本领")
print (n.a)
print (n.b)
print (n.c)

程序运行结果:

有理想
有担当
有本领

思考8-15:下面红色代码哪些是错误的

class Product( ):
    id = 0
    def __init__(self,name,price):
        Product.id=Product.id+1
        self.name=name
        self.__price=price     
    def getPrice(self):       
        return self.__price    
    def __setPrice(self,value):
        self.__price=value
class MobilePhone(Product):
    def __init__(self,name,price,standard):
      ####### 一下错误的地方有哪些
        super().__init__(name,price)   
        self.netstandard=standard
        print(self.name)        
        print(self.id)
        print(self.__price)     
        print(self.getPrice())  
        print(super().__setPrice()) 
     #######   
   
class Product( ):
    id = 0
    def __init__(self,name,price):
        Product.id=Product.id+1
        self.name=name
        self.__price=price     
    def getPrice(self):       
        return self.__price    # 返回数值
    def __setPrice(self,value):
        self.__price=value
class MobilePhone(Product):
    def __init__(self,name,price,standard):
        super().__init__(name,price)
        self.netstandard=standard
        print(self.name)
        print(self.id)
        print(self.__price)    # 错误 在类的外面
        print(self.getPrice())
        print(super().__setPrice())     # 错误  私有方法在外面都不能访问它

a=MobilePhone("iphone",2000,"large")

程序运行

iphone
1
Traceback (most recent call last):
  File "/Users/eve/Desktop/PYTHON/SchoolCourse/第8章类/代码/2020-06-11/si8_15.py", line 21, in <module>
    a=MobilePhone("iphone",2000,"large")
  File "/Users/eve/Desktop/PYTHON/SchoolCourse/第8章类/代码/2020-06-11/si8_15.py", line 17, in __init__
    print(self.__price)    # 错误
AttributeError: 'MobilePhone' object has no attribute '_MobilePhone__price'

思考 si8_16.py:下面代码的运行结果是什么?


class Product(): 
    def testClassicalClass(self):
        print('执行Product类')
class Computer(Product):
    def testMethod(self):
        print('执行Computer类')
class MobilePhone(Product):
    def testClassicalClass(self):
        print('执行MobilePhone类')
class SmartMobile (Computer,MobilePhone):
    def testMethod(self):
        print('执行SmartMobile类')
s = SmartMobile()    # Computer,MobilePhone
s.testClassicalClass()  # Computer->MobilePhone->testClassicalClass->"执行MobilePhone类"
s.testMethod()    # 父类与子类如果同时定义了名称相同的属性名称,父类中的属性在子类中将被覆盖。

程序结果:

执行MobilePhone类
执行SmartMobile类

思考8_18:下面程序的运行结果是什么?

class test:
   data1=100
   def __init__(self,n):
       self.data2=n
   def __str__(self):
       return "data1={},data2={}".format(self.data1,self.data2)
a=test(20)
print(a)   # print会触发 __str__()这个方法

程序结果:

data1=100,data2=20

==思考8_19:==补充完整Rectangle类,使得该类的对象可以进行如下运算:

1.a+b:求出两个矩形的面积和。

2.a==b:判断两个面积是否相等;若a==b,表达式的值为”相等“,否则为”不相等“。

3.print(a):打印出该矩形的面积

class Rectangle:###补充完整,使其对象能进行+,==,print操作
    def __init__(self,w,h):
        self.width=w
        self.height=h
    def getArea(self):
        return self.width*self.height

############################
a=Rectangle(2,4)
print(a)
b=Rectangle(3,6)
print(a+b)
print(a==b)

答:

class Rectangle:###补充完整,使其对象能进行+,==,print操作
    def __init__(self,w,h):
        self.width=w
        self.height=h
    def getArea(self):
        return self.width*self.height
    def __add__(self, other):
        return self.getArea()+other.getArea()
    def __eq__(self, other):
        if self.getArea()==other.getArea():
            return "相等"
        else:
            return "不相等"
    def __str__(self):
        return "该矩形的面积为"+str(self.getArea())
############################
a=Rectangle(2,4)
print(a)
b=Rectangle(3,6)
print(a+b)
print(a==b)

程序结果:

该矩形的面积为8
26
不相等

思考8_19_1:

#8_19_1
class Rectangle:
    def __init__(self,w,h):
        self.width=w
        self.height=h
    def getArea(self):
        return self.width*self.height
    def __add__(self,other):
         return "两矩形的面积和是:"+str(self.getArea()+other.getArea())
    def __eq__(self,other):
          if self.getArea()==other.getArea():
               return "相等"
          else:
               return "不相等"
    def __str__(self):
          return "该矩形的面积是:"+str(self.getArea())

if __name__ == '__main__':     # 当作主程序运行
    print('I runs as main')
else: 
    print(__name__,'I runs as a module')    # 当作模块导入另一文件运行

程序结果:

I runs as main

若代码是主程序,__name__值为__main__;若代码作为import模块,__name__值为文件名

当被当作模块被导入其他文件运行

from si8_19_1 import Rectangle  # 代码模块文件导入
a=Rectangle(2,4)
print(a)
b=Rectangle(3,6)
print(a+b)
print(a==b)

程序结果:

si8_19_1 I runs as a module
该矩形的面积是:8
两矩形的面积和是:26
不相等

思考8_20:运行该程序时输入15或150的结果是什么?

def get_age():
    age = int(input('请输入年龄(1-140):'))    #15          150
    if age in range(1,141):                 #15 is in     150 is not in
        return age                          # 15         
    raise ValueError                        # 150 抛出异常

try:
    age = get_age()      # 调用这个函数
    print('用户输入的年龄是:', age)           #15
except ValueError:           
    print('用户输入的年龄不在1-140之间!')      # 150
 

程序结果:

请输入年龄(1-140):15
用户输入的年龄是: 15

请输入年龄(1-140):150
用户输入的年龄不在1-140之间!

思考8_21:下面程序的运行结果是什么?

class MyError(Exception):
    def __init__(self,value):   # 4
        self.value=value        # 4
    def  __str__(self):
        return   self.value     
    
try:
    raise MyError(2*2)
except MyError  as e :
    print("An exception flew by!",e.value)

程序结果:

An exception flew by! 4

实验7

  1. 【题目描述】

编写Queue类能实现队列的功能(先进先出)。Queue类包含:

  • __size属性(存放队列的大小)

  • list属性(存放队列数据)

  • __init__():初始化对象

  • pop():删除队列首个数据,返回该数据

  • push():把数据放入队列

  • isfull():判断队列是否存满数据

  • isempty():判断队列是否为空

请打开shiyan7_1.py补充完程序,程序另保存为学号_1.py

shiyan7_1.py

class Queue:
    def __init__(self, size):
        self.size=size
        self.list=[]
    def isfull(self):
        if len(self.list)==self.size:
            return True
        else:
            return False
    def push(self,num):
        if self.isfull():
            print("队列满")
        else:
            self.list.append(num)
################
   
       

################下面代码请不要修改
def main():
    a=Queue(10)
    for i in range(0,10):
        a.push(i)
    a.pop()
    a.pop()
    print(a.list)

if __name__=="__main__":
    main()

解:

class Queue:
    def __init__(self, size):
        self.size=size
        self.list=[]
    def isfull(self):
        if len(self.list)==self.size:
            return True
        else:
            return False
    def push(self,num):
        if self.isfull():
            print("队列满")
        else:
            self.list.append(num)
################
    def isempty(self):
        if len(self.list)==0:
            return True
        else:
            return False

    def pop(self):
        if self.isempty():
            print("为空无法删除")
        else:
            self.list.pop(0)
       

################下面代码请不要修改
def main():
    a=Queue(10)
    for i in range(0,10):
        a.push(i)
    a.pop()
    a.pop()
    print(a.list)

if __name__=="__main__":
    main()

  1. 【题目描述】

编写Timer类,该类包含:

  • __hour属性:存放小时

  • __minute属性:存放分钟

  • __second属性:存放秒数

  • __init__():初始化对象,Timer的3个属性值全部为0

  • settime():设置时间,即修改Timer的3个属性

  • showtime():输出时间,即获得Timer的3个属性,按小时:分钟:秒数的格式输出,如12:30:40

请打开shiyan7_2.py补充完程序,程序另保存为学号_2.py

shiyan7_2.py



        
        
#下面代码请不要修改
def main():
    a=Timer()
    a.settime(12,30,40)
    a.showtime()

if __name__=="__main__":
main()

解:

class Timer:
    def __init__(self):
        self.__hour=0
        self.__minute=0
        self.__second=0

   
    def settime(self,new_hour,new_minute,new_second):
        self.__hour=new_hour
        self.__minute=new_minute
        self.__second=new_second
       
    def showtime(self):
        print(str(self.__hour)+":"+str(self.__minute)+":"+str(self.__second))

        
        
#下面代码请不要修改
def main():
    a=Timer()
    a.settime(12,30,40)
    a.showtime()

if __name__=="__main__":
main()

实验8

一、 实验目的和要求

(1)类的继承;(2)调用超类的构造方法;(3)运算符重载 (4)异常处理

  1. 【题目描述】

请打开shiyan8_1.py,补充完Vecter3的定义,进行运算符重载,使得该类能进行加法和乘法运算,并能打印。程序另存为学号_1.py。程序运行结果如下:

5,7,9
10,20,30

解:

##请补充完类Vecter3的定义  vecter是向量的意思
class Vecter3(object):
    def __init__(self,x,y,z):
        self.X=x
        self.Y=y
        self.Z=z

    def __add__(self,other):
        t=Vecter3(0,0,0)
        t.X=self.X+other.X
        t.Y=self.Y+other.Y
        t.Z=self.Z+other.Z
        return t
      
    def __mul__(self, n):
        t=Vecter3(0,0,0)
        t.X=self.X*n
        t.Y=self.Y*n
        t.Z=self.Z*n
        return t

    def __str__(self):
        return str(self.X)+","+str(self.Y)+","+str(self.Z)
##下面代码请不要修改   
if __name__=='__main__':
    v1=Vecter3(1,2,3)
    v2=Vecter3(4,5,6)
    print(v1+v2)
    print(v1*10)
   

程序结果:

5,7,9
10,20,30

2.【题目描述】

以r+模式打开用户输入的文件。若文件不存在,系统会产生异常FileNotFoundError,请捕捉该异常类,然后输出“该文件不存在”。若文件存在,让用户输入字符串,保存到该文件中。当用户输入-1,结束输入。当用户输入的字符串长度大于10,要抛出InvalidError类。请捕捉InvalidError类并产生实例t,执行print(t)和fp.close()。请打开shiyan8_2.py文件,补充完代码,程序另存为学号_2.py。

  1. 当输入的文件不存在,程序运行结果如下所示:
输入文件名:ff
文件不存在
  1. 当输入的文件存在时,程序运行结果如下所示:
输入文件名:f1.txt
输入字符串:hello
输入字符串:You are welcome
输入的字符串太长,长度为15

解:

class InvalidError(BaseException):  
    def __init__(self,n):
        super().__init__()
        self.num=n
    def __str__(self):
        return "输入的字符串太长,长度为"+str(self.num)
    
####当文件不存在,要能捕捉FileNotFoundError(系统产生的异常类)
####当文件存在,用户输入数据保存到文件中
####若输入的字符串长度>10,抛出InvalidError(自定义的异常类)
####要能捕捉InvalidError
####当用户输入-1结束输入

try:
    filename = input('输入文件名:')
    fp = open(filename , "r+")
    ch = input("输入字符串:")
    while ch!='-1':
        if len(ch)<=10:
            fp.write(ch)
            ch=input("输入字符串:")
        else:
            raise InvalidError(len(ch))
except FileNotFoundError:
    print("文件不存在")
except InvalidError as t:
    print(t)
    fp.close()

程序结果:

输入文件名:ff
文件不存在
输入文件名:f1.txt
输入字符串:hello
输入字符串:You are welcome
输入的字符串太长,长度为15
相关推荐
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页