python学习_初级阶段综合实验 总

python学习_初级阶段综合实验 总

实验1

问题描述

要求在运行该程序后,读入当前桌面下的文本文件 words.txt,遍历文件中的所有行,并完成以下任务:

· 统计文件总行数,输出到屏幕

· 统计最长单词的长度,输出到屏幕

· 将长度超过20的单词写入到当前路径下的新的一个文件,命名为output.txt

实验代码

with open(r"G:\Python\words.txt","r") as f:
    with open(r"G:\Python\output.txt","r+") as x:
        c=0
        m=""
        while True:
            s = f.readline()
            if len(s)>len(m):
                m=s
            if len(s)>20:
                x.write(s)
            if s =="":
                break
            c+=1
        print("文件总行数是",c)
        print("最长单词的长度是",len(m))


实验结果

在这里插入图片描述

在这里插入图片描述

实验2

问题描述

定 义 函 数 is_prime 判 断 某 个 数 是 否 为 素 数 , 并 实 现 将 列 表

ls =[23,45,78,87,11,67,89,13,243,56,67,311,431,111,141] 中的素数去除,输出去除素数后的列表 ls以及ls中元素个数。

提示:素数是只能被1和它本身整除的数,因此可以用这个数去除2到它减1的所有数,若有数能整除,则说明不是素数,返回False,若循环全部执行完毕,说明不存在能被整除的数,返回True。

实验代码

ls =[23,45,78,87,11,67,89,13,243,56,67,311,431,111,141]
ls1=[]
for i in ls:
    a = i
    def is_prime(a):
        for s in range(2,a):
            aa = a % s
            if aa == 0:
                ls1.append(a)
                return False
            if aa != 0:
                return True
    is_prime(a)
for q in ls1:
    while q in ls:
        ls.remove(q)
print("去掉素数后ls列表为",ls)
print("去掉素数后ls列表长度为",len(ls))

实验结果:

在这里插入图片描述

实验3

问题描述

定义函数求两个数的最大公约数,并获得用户输入的数值 M 和 N,利用函数求 M和 N 的最大公约数。

提示:求最大公约数的步骤:

(1)将较大的数放在m,小数放在n

(2)用m除以n得到余数r

(3)判断r的值,若r为0,则最大公约数为n,否则执行(4)

(4)将上一个过程中的除数n作为被除数,余数作为除数,重复过程(2),直到余数r为0

实验代码

M = eval(input("请输入一个大值"))
N = eval(input("请输入一个小值"))
         
def cf(q,p):
    r = q % p
    if r == 0:
        print("两个数的最大公约数为:",p)
    else:
        cf(p,r)
    return
cf(M,N)

实验结果

在这里插入图片描述

实验4

问题描述

写函数,计算 Fibonacci (斐波那契)数列,编写程序输入数字n,调用该函数计算斐波那契数列前n项的和。(斐波那契数列:1、1、2、3、5、8、13、21、……)

提示:可以使用递归函数

F(n) = F(n-1) + F(n-2) 其中(n>2), F1 = F2 =1

实验代码

def fb(n):
    if n<=2:
        return 1
    else:
        return fb(n-1)+fb(n-2)
a=0
for i in range(1,int(input("请输入求几项的和"))):
    a+=int(fb(i))
print("和为",a)

实验结果

在这里插入图片描述

实验5

问题描述

已知经理有:曹操,刘备,孙权

技术员有:曹操,孙权,张飞,关羽

用集合求:

1.既是经理也是技术员的有谁?

2.是技术员但不是经理的人有谁?

3.是经理,但不是技术员的有谁?

4.张飞是经理吗?

5.身兼一职的人有谁?

6.经理和技术员共有几人?

实验代码

s1={"曹操","刘备","孙权"}
s2={"曹操","孙权","张飞","关羽"}
print("既是经理也是技术员的有",s1&s2)
print("是技术员但不是经理的人有",s2-s1)
print("是经理,但不是技术员的有",s1-s2)
print("张飞是经理吗?")
print("张飞" in s1)
print("身兼一职的人有",s1^s2)
print("经理和技术员共有",len(s1|s2),"人")

实验结果

在这里插入图片描述

实验6

问题描述

定义一个元组(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17),输出元组内7的倍数及个位是7的数。

实验代码

t1=(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17)
num={x for x in t1 if( x % 7 ==0 or x % 1 ==7 or x % 10 == 7)}
print(tuple(num))

实验结果

在这里插入图片描述

实验7

问题描述

定义列表 lst=[1,3,2,’a’,4,’b’,5,’c’]

(1)通过切片获取新的列表 lst2, lst2=[1,2,4,5]

(2)通过切片获取新的列表 lst4,lst4=[‘c’]

(3)通过切片获取新的列表 lst5,lst5=[‘b’,’a’,3]

实验代码

lst=[1,3,2,'a',4,'b',5,'c']
lst2=(lst[0:7:2])
print(lst2)
lst4=(lst[7:8])
print(lst4)
lst5=(lst[-3:-8:-2])
print(lst5)

实验结果

在这里插入图片描述

实验8

问题描述

定义字典dic = {‘k1’: ‘v1’, ‘k2’: [‘sb’, ‘aa’], (1, 2, 3, 4, 5): {‘k3’: [‘2’, 100, ‘wer’]}}

(1)k2对应的值中添加33

(2)k2对应的值的第一个位置插入一个元素‘s’

(3)将(1,2,3,4,5)对应的值添加一个键值对 ‘k4’:’v4’

(4)将(1,2,3,4)对应的值添加一个键值对(1,2,3):‘ok’

(5)将’k3’对应的值的‘wer’改为’qq’。

实验代码

dic={'k1':'v1','k2':['sb','aa'],(1,2,3,4,5):{'k3':['2',100,'wer']}}

dic['k2'].append(33)
print(dic)
print()
dic['k2'].insert(1,'s')
print(dic)
print()
dic[(1,2,3,4,5)]['k4']='v4'
print(dic)
print()
dic[(1,2,3,4)]={(1,2,3):'ok'}
print(dic)
print()
dic[(1,2,3,4,5)]['k3']=['2',100,'qq']
print(dic)

实验结果

在这里插入图片描述

实验9

问题描述

创建列表lst,包含地名值:‘北京’,’上海’,’天津’,’济南’,’郑州’,’合肥’,’南京’,’杭州’

编写代码实现下面功能:
( 1)计算列表的长度
( 2)向列表追加元素‘福州‘,并输出添加后的列表
( 3)在列表的第 3 个位置插入元素‘太原‘,并输出添加后的列表
( 4)修改列表第 3 个位置的元素为‘石家庄‘,并输出修改后的列表
( 5)删除列表中的元素‘上海‘,并输出修改后的列表
( 6)删除列表中的第 1 个元素,并输出删除元素的值以及删除后的列表
( 7)查询并输出元素‘郑州‘的索引位置;
( 8)使用切片操作,输出列表第 1 到第 5 个元素的值
( 9)使用切片操作,输出列表从开始到第 6 个元素的值

实验代码

L4=["北京","上海","天津","济南","郑州","合肥","南京","杭州"]
s=len(L4)
print("列表的长度是",s,end="\n")
L4.append("福州")#尾部添加
print(L4)
L4.insert(2,"太原")#节点插入
print(L4)
L4 [2]='石家庄'
print(L4,end= "\n")#修改第三个元素内容
L4.remove("上海")#删除匹配元素
print(L4)
b=L4.pop(0)#删除第一个元素
print("删除的元素是",b)
print(L4)
c=L4.index('郑州')#返回列表中第一个与之匹配的元素的位置
print("第一个与之匹配的元素的位置是",c)
print(L4[0:5])#切片输出
print(L4[0:6])

实验结果

在这里插入图片描述

实验10

问题描述

有元组 T1=(‘ 河北 ’,’ 河南 ’,’ 山东 ’,’ 安徽 ’,’ 江苏 ’,’ 浙江 ’,’ 河南 ’,’ 福建 ’) ,编写代码实现下面功能:

( 1 )向元组添加元素‘江西’,是否成功

( 2 )分别用 for 、 while 语句,遍历输出元组元素

( 3 )统计‘河南’在元组中出现的次数

( 4 )查找‘山东’在元组中的位置

( 5 )把元组转换成列表 L1

( 6 )把元组转换成字符串 S

( 7 )有元组 T2=(‘ 北京 ’,’ 天津 ’,’ 上海 ’) ,链接元组 T1 和 T2 生成新元组 T3

实验代码

T1=('河北','河南','山东','安徽','江苏','浙江','河南','福建')
T1=T1+('江西',)
#任务一
print("任务一结果为",T1)
#任务二
print"任务二结果为"for i in T1:
	print (i,end='')
print ()

i=0
while i<len(T1):
	print (T1[i],end='')
	i+=1
print ()
#任务三
print("任务三结果为",T1.count('河南'))
#任务四
print("任务四结果为",T1.index('山东'))
#任务五
print("任务五结果为",1ist(T1))
#任务六
print("任务六结果为",str(T1))
#任务七
T2 = ('北京','天津','上海')
print('存务七结果为',T1+T2)

实验结果

在这里插入图片描述

实验11

问题描述

通过键盘输入一个月份,判断是什么季节:

​ 3,4,5月为春季,6,7,8月为夏季,9,10,11月为秋季,12,1,2月为冬季。

​ 要求使用列表或元组实现

提示:

(1)定义列表变量spring、sumer、autumn、winter,分别将对应的月份存入相应的变量,例如:

spring = [3,4,5]

(2)使用if…elif…else语句判断输入的月份是否是某个变量中的成员,可以使用in操作符,例如:

if x in spring: # x为用户输入的月份

……

实验代码

spring=[3,4,5]
sumer=[6,7,8]
autumn=[9,10,11]
winter=[12,1,2]
a=int(input("请输入月份:"))
if a in spring:
	print(a,"月份为春季")
elif a in sumer:
	print(a,"月份为夏季")
elif a in autumn:
	print(a,"月份为秋季")
else:
	print(a,"月份为冬季")

实验结果

在这里插入图片描述

实验12

问题描述

写代码完成如下功能:

( 1)建立字典 d,包含内容是: “数学”:101, “语文”:202, “英语”:203, “物理”:204, “生物”:206。

( 2)向字典中添加键值对"化学":205。

( 3)修改"数学"对应的值为 201。

( 4)删除"生物"对应的键值对。

( 5)按顺序打印字典 d 全部信息,参考格式如下(注意,其中冒号为英文冒号,逐行打印):

201:数学

202:语文

203:(略)

实验代码

d={'数学':101,'语文':202,'英语':203,'物理':204,'生物':206}
print(d)
print()
d['化学']=205
print(d)
print()
d['数学']=201
print(d)
print()
x = d.pop('生物')
print(d)
print()
for k in d:
    print(d[k],k,sep=":")
print()

实验结果

在这里插入图片描述

实验13

问题描述

有一个列表 studs 如下:

studs= [{‘sid’:‘103’,‘Chinese’: 90,‘Math’:95,‘English’:92},{‘sid’:‘101’,

‘Chinese’: 80,‘Math’:85,‘English’:82},{‘sid’:‘102’,‘Chinese’: 70,‘Math’:75,

‘English’:72}]

将列表 studs 的数据内容提取出来,放到一个字典 scores 中,在屏幕上按学号从小到大

的顺序显输出 scores 的内容。内容示例如下:

101:[85, 82, 80]

102:[75, 72, 70]

103:[95, 92, 90]

实验代码

studs= [{'sid':'103','Chinese': 90,'Math':95,'English':92},{'sid':'101',
'Chinese': 80,'Math':85,'English':82},{'sid':'102','Chinese': 70,'Math':75,
'English':72}]
score = {k['sid']:[k['Math'],k['English'],k['Chinese']]for k in studs}
print(score)
qq = list(score.items())
qq.sort()
for i in qq:
    print(i[0],i[1],sep=':')
print()

实验结果

在这里插入图片描述

实验14

问题描述

定 义 函 数 is_prime 判 断 某 个 数 是 否 为 素 数 , 并 实 现 将 列 表

ls =[23,45,78,87,11,67,89,13,243,56,67,311,431,111,141] 中的素数去除,输出去除素数后的列表 ls以及ls中元素个数。

实验代码

ls=[23,45,78,87,11,67,89,13,243,56,67,311,431,111,141]
for i in ls:
	for j in range(2,i):
		if i%j==0:
			break
	else:
		ls.remove(i)
print("去掉素数后1s列表为",ls)
print("去掉素数后1s列表长度为",1en(ls))

实验结果

在这里插入图片描述

实验15

问题描述

定义函数求两个数的最大公约数,并获得用户输入的数值 M 和 N,利用函数求 M和 N 的最大公约数。

提示:求最大公约数的步骤:

(1)将较大的数放在m,小数放在n

(2)用m除以n得到余数r

(3)判断r的值,若r为0,则最大公约数为n,否则执行(4)

(4)将上一个过程中的除数n作为被除数,余数作为除数,重复过程(2),直到余数r为0

实验代码

M=eval(input("请输入一个大值"))
N=eval(input("请输入一个小值"))
def cf(q,p):
	r=q % p
	if r ==0:
		print("两个数的最大公约数为:",p)
    else:
		cf(p,r)
	return
		cf(M,N)

实验结果

在这里插入图片描述

实验16

问题描述

编写函数,计算 Fibonacci (斐波那契)数列,编写程序输入数字n,调用该函数计算斐波那契数列前n项的和。(斐波那契数列:1、1、2、3、5、8、13、21、……)

提示:可以使用递归函数

F(n) = F(n-1) + F(n-2) 其中(n>2), F1 = F2 =1

实验代码

def fb(n):
	if n<=2:
		return 1
	else:
		return fb(n-1)+fb (n-2)
a=0
for i in range(1,int(input("请输入求几项的和"))):
	a+=int (fb(i))
print("和为",a)

实验结果

在这里插入图片描述

实验17

问题描述

定义一个圆柱体类Cylinder,包含底面半径r和高h两个属性。编写构造方法和计算圆柱体体积的方法,并对编写的相关程序进行测试验证。

实验代码

class Cylinder:
	def __init_(self,r,h):
		self.banjing=r
		self.high=h
	def jstj(self):
		#定义一个PI的变里,用来计算
		PI=3.14
		#用tj来承载计算结果
		tj=self.banjing**2*PI*self.high
		print(“圆柱的体积为“,tj)
#从键盘输入值,并调用Cylinder类和其计算方法
a=eval(input("请输入半径值"))
b=eval(input("请输入高度值"))
C1=Cylinder(a,b)
C1.jstj()

实验结果

在这里插入图片描述

实验18

问题描述

设计一个表示动物的类:Animal,其内部有一个color(颜色)属性和call(动物叫)方法。再设计一个Dog(狗)类,该类中有tail(尾巴)和color(颜色)属性,以及一个call(动物叫)方法。要求让Dog类继承自Animal类,并重写init和call方法。

实验代码

class Animal:
	def __init__(self,co):
		self.color=co
	def call(self):
		print('这个动物有颜色,是',self.color,sep='')
		print('这个动物会叫'class Dog (Animal):
	def __init__(self,ta,co):
		self.tail=ta
		self.color=co
	def call(self):
		print('这个狗爱摇',self.tail,sep='')
		print('这个狗颜色是',self.color,sep='')
        print ('这个狗偶尔叫')
#设置自类对象,调用自类方法
D1=Dog('尾色','灰色')
D1.ca11()
print()
#检验是否是成功重写,单独调用一次父类ca11方法
super(Dog,D1).call()

实验结果

在这里插入图片描述

实验19

问题描述

一小球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?

实验代码

x=100
h=50
for i in range(2,11):
    x=x+2*h
    h=h/2
print(x,h)

实验结果

在这里插入图片描述

实验20

问题描述

编写程序,运行后用户输入4位整数作为年份,判断其是否为闰年。
如果年份能被400整除,则为闰年;如果年份能被4整除但不能被100整除也为闰年。

实验代码

n = eval(input())
if n % 400 == 0:
    print(n,"闰年")
elif n % 4 == 0  and n % 100 != 0 :
    print(n,"闰年")
else:
    print(n,"平年")

实验结果

在这里插入图片描述

实验21

问题描述

编程从键盘输入任意多个数字,当按回车键时退出,结束输入,输出放存在列表ls中的数,并统计输出最大的数和最小的数及最大的数和最小的数的平均值。

实验代码

ls = []
n = eval(input("请输入数字(直接输入回车退出):"))
while n !=' ':
    ls.append(n)
    print("请输入数字(直接输入回车退出):")
    while n ==' ':
        break  
print(ls)
#提示IOPub data rate exceeded,该代码有可能会超过IOPub数据速率,导致电脑卡顿

实验22

问题描述

韩信点兵的典故:韩信带1500名士兵去打仗,战死四五百人,3人一排多出2人,5人一排多出4人,7人一排多出6人,编程计算机剩下士兵的人数。

实验代码

for n in range(1000,1101):
    if n % 3 == 2 and n % 5 == 4 and n % 7 == 6:
        print("剩余士兵",n)

实验结果

在这里插入图片描述

实验23

问题描述

编写一个函数,从键盘上输入两个数,求最大公约数和最小公倍数,如果输入的第一个数小于第二个数时,需要交换 如:输入16,24 调用函数显示8,48

实验代码

a = int(input("a="))
b = int(input("b="))

m = max(a,b)
n = min(a,b)
r = m % n
x = m * n
while r != 0:
    m = n
    n = r
    r = m % n
    i = x / n
    print(n)
    print(int(i))

实验结果

在这里插入图片描述

实验24

问题描述

编写程序,在当前试题目录下创建一个文本文件test.txt,并向其中写入字符串hello world。

实验代码

file = open('test.txt','w')
file.write('hello world')
file = open('test.txt','r')
print(file.read())
file.close()

实验结果

在这里插入图片描述

实验25

问题描述

猴子第一天摘了若干个桃子,当天吃了一半,还不过隐,有多吃了一个,第二天早上又将剩下的桃子吃了一半,又多吃了一个,以后每天早上都吃了前一天剩下的一半零一个,到第10天早上想再吃时,见只剩下一个桃子,问第一天共摘了多少个桃子

实验代码

x = 1
for i in range(0,9):
    x = (x+1)*2
print("第一天摘了",x,"个桃子")

实验结果

在这里插入图片描述


以上就是本文全部内容,如果它对您有帮助,请您帮我点个赞,这对我真的很重要

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值