Python实验一

第二题

#利用 if 判断来制作一个猜数字的小游戏
import random
y=random.randint(0,100)
print("请猜这个数是多少")
x = int (input())#input输入的只能是字符串,所以需要转换为int类型
while 1:
    if x<y:
        print("你猜小了")
    if x>y:
        print("你猜大了")
    if x==y:
        print("恭喜你猜对了")
        break
    x=int(input("请继续猜"))

第三题

#3、有 1、2、3、4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
#import time
digits=(1,2,3,4)
#start=time.time()
for i in range(1000):
    x=0
    result=[]
    for i in digits:
        i1=i
        i=i*100
        for j in digits :
            j1=j
            j=j*10
            for k in digits:
                if(i1!=j1 and j1!=k and i1!=k):#判断其无重复数字
                    result.append(i+j+k)#如符合条件将其加入到列表尾部
                    x+=1
#print(time.time()-start)
print(result)
x2=str(x)#强制类型转化
print("能组成"+x2+"个三位数")

在这里插入图片描述

第四题

#4、一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如 6=1+2+3.编程找出 1000 以内的所有完数
def WanShu(numb):#利用函数进行计算
    wan=[]#设置列表存储完数
    for i in range(1,numb+1):
        yinshu=[]#存储因子的列表
        sum=0
        for j in range(1,i):
            if i%j==0:#找因子
                yinshu.append(j)
                sum+=j#将所找到的因数累加起来
            else :
                continue
            if i==sum:#一个数如果恰好等于它的因子之和,则为完数
                wan.append(i)
    wan1=str(wan)
    print("1000以内的完数为:"+wan1)
WanShu(1000)#函数调用

在这里插入图片描述

第五题

#5、编写程序,生成一个包含 50 个随机整数的列表,然后删除其中所有奇数(提示:从后向前删除)
#编写一个程序,生成一个包含50个随机整数的列表,然后删除其中所有的奇数
import random
list_1=[]
for i in range(50):#循环50次,则生成一个包含50个元素的列表
    list_1.append(random.randint(0,100))#不断往列表中添加新的随机数
print("生成的随机整数列表是")
print(list_1)
l=len(list_1)#用len()得到列表的长度
for i in range(l):
    s=l-1-i#表示从后往前删
    if list_1[s]%2!=0:#列表中元素除二取余!=0则为奇数
        del list_1[s]
print("删除列表中奇数,得到的列表是")
print(list_1)

在这里插入图片描述

第六题:

#6、编写程序,生成一个包含 20 个随机整数的列表,然后对其中偶数下标的元素进行降序排列,奇数下标的元素不变。
import random
x=[]
for i in range(20):
    x.append(random.randint(0,100))
print('随机生成的列表为',x)
x1=[]
for i in range(20):
    if(i%2==0):#将偶数下标的元素加到x1中
        x1.append(x[i])
print('偶数下标的列表x1为',x1)
x1=sorted(x1,reverse=True)#reverse=True表示进行降序排列
print('降序排列后的x1为',x1)
count=0
for i in range(20):
    if(i%2==0):
        x[i]=x1[count]#将排序好的偶数下标的元素加到原先随机列表中,覆盖原先未排序好的
        count+=1
print('偶数下标降序排列,奇数下标不动的序列为',x)

运行结果截图
在这里插入图片描述

第七题

#7、编写函数用来计算斐波那契数列中小于参数 n 的所有值
#斐波那契数列:兔子繁殖问题,从1,1开始,后一项等于前两项的和,如1,1,2,3,5……
x=[]
def feibo(n):
    a, b = 1, 1
    while a<n:
        x.append(a)
        x.append(b)
        a=a+b
        b=b+a


n=int(input("请输入n的值"))
feibo(n)
print(x)

Python实验一_第1张图片

第八题

#8、利用列表实现筛选法求素数,问题描述:编写程序,输入一个大于 2 的自然数,然后输出小于该数字的所有素数组成的列表。
#素数:又称质数,其约数只有1和它本身,且1不是素数
import math
def prime(n):
    x=[x for x in range(2,n+1)]#列表推导式,初始化列表
    k=0
    for i in range(0,math.floor(math.sqrt(n+1))):#floor函数:取整,sqrt表示开根号,开平方减少循环次数提高效率,如:3*3=9则必定不是素数。
        for j in range(2,n+1):#被除数
            if j%x[k]==0 and j!=x[k]:#j从1-k开始挨个除,此为判断其是非素数的条件
                if j in x:#非素数且在列表则移除
                    x.remove(j)
        k+=1
    print(x)
n=int (input("请输入一个整数"))
prime(n)


在这里插入图片描述

第九题

#9、编写函数:判断回文,也就是正读反读都一样的字符串例如:abcba”
s = input('')
if not s:
    print('请不要输入空字符串!')
    s = input('请重新输入一个字符串:')
a = reversed(list(s))#将列表元素进行原地翻转
if list(a) == list(s):
    print('是回文')
else:
    print('不是回文')

第十题

#10、编写函数:随机产生包含 n 个整数的列表,返回一个元组,其中第一个元素为所有参数的平均值,其他元素为所有参数中大于平均值的整数。
 #例如: 随机产生长度为 3 的列表[2, 1, 3],输出为(2.0, 3)
import random
def txt(n):
    list=[]
    x= int
    for i in range(n):
        list.append(random.randint(0,10))
    print('list:',list)
    list2=[]
    x=sum(list,0)#sum函数:返回序列x中所有元素之和
    list2.append(x/n)
    for k in range(1,n):
        if list[k]>list2[0]:
            list2.append(list[k])
        else:
            list2.append(0)
    print('list2:',list2)
txt(3)

第十一题

#11、编写函数: 一年 365 天, 每周工作 5 天,休息 2 天,休息日水平下降 0.01,
#工作日要努力到什么程度一年后的水平才与每天努力 1%所取得的效果(即 37.78 倍)一样呢?
import math
dayup_365=math.pow(1+0.01,365)#计算每天努力的数值是1.01的365次幂,每天努力1%表示在原先1的基础上+0.01
def day_up(ef):#ef表示努力的程度
    day_up=1.0
    for i in range(365):
        j=i%7#j表示星期几
        if j in range(1,5):#周一至周五
            day_up=day_up*(1+ef)
        else:#周六周日
            day_up=day_up*(1-0.01)
    return day_up
dayfactor=0.001
while(day_up(dayfactor) <dayup_365 ):#与目标值进行比较,如果小于目标值则不断+0.001,直到大于或等于目标值
    dayfactor+=0.001#每天努力的程度不断增加直至满足条件
print('每天的努力参数是:{:.3}'.format(dayfactor))#{:.3}.format()的作用是保留三位小数,format格式化输出

第十二题*

#12、查找两个字符串首尾交叉的最大子串长度,连接两个字符串,首尾交叉部分只保留一份。例如,1234 和 2347 连接为 12347
#要求:程序中使用 lambda 表达式以及函数
def jiaocha(str1,str2):
    length1=len(str1)#取两个字符串长度
    length2=len(str2)
    length=min(length1,length2)
    k= max(range(0,length+1),key=lambda i :i if str1[length1-i:] == str2[:i]  else False)#lambda表达式,找出重复数
    print('重复数为:',k)
    return (str1+str2[k:])
str1=input("请输入字符串:")
str2=input("请输入字符串:")
print(jiaocha(str1,str2))

Python实验一_第2张图片

第十三题*

#(1)问题描述:编写程序,先生成包含 1000 个随机字符的字符串,然后统计每个字符出现的次数。
import random
m_str = "".join(random.choices("qwertyuioplkjhgfdsazxcvbnm", k=1000))
print("字符串长度",len(m_str))
# set集合去重
m_set = set(m_str)
# 遍历,长度为set集合,键值放入字典中
m_dict = {}
for i in m_set:
    nums = m_str.count(i)  # 母串中每个字符出现的次数
    m_dict[i] = nums
# 打印结果
for i in m_dict.items():#items()方法可以返回字典的“键:值”对
    print(i, end="   ")#end=''表示取消换行

在这里插入图片描述

第十四题


#(1).问题描述:编写程序,输入两个集合 setA 与 setB,分别输出它们两个交集的交、差、并。
def test2():
    seta=eval(input())#eval()执行一个字符串表达式,并返回表达式的值
    setb=eval(input())
    print("交集{},并集{},差集{}".format(seta&setb,seta|setb,seta-setb))
test2()

2.编写一个程序,接受一系列空格分隔的单词作为输入,并在除所有重复的单词并按字母数字排序后打印这些单词。
word = input().split()
for i in word:
    if word.count(i)>1:
        word.remove(i)
word.sort()
print(*(word))

Python实验一_第3张图片

第十五题

#15、字符串与列表推导式的应用
#问题描述: 编写程序,生成含有 n 个元素的嵌套列表,即列表的每个元素
#仍是列表,要求列表中的元素是长度不超过 m 的数字或字符组成的字符串,并
#按照字符串长度降序输出结果。
import string
import random
ch = string.digits + string.ascii_letters#digits是生成所有数字从0-9,ascii_letterss是生成字母从a-z,A-Z
n , m=10, 10
a = [[''.join(random.sample(ch,random.randint(1,m)))] for i in range(n)]#random.sample是从序列中选N个随机且不重复的元素
print(sorted(a,key=lambda x: len(x[0]), reverse= True))#lambda表达式,得到字符串长度之后根据长度进行排序

在这里插入图片描述

第十八题

#编写程序,输入任意长度的字符串,统计每个单词出现的次数并存储到字典进行输出。
def txt(str):
    words =str.split(' ')#将字符串按照空格进行分割
    dict={ }#创建空字典
    for i in words:#遍历分隔好的单词
        if i not in dict.keys():#如果不在就字典的值为1
            dict[i]=1
        else:#如果在就在原基础上加1
            dict[i]+=1
    return dict#返回字典
str=input('请输入单词,空格进行分隔')
print(txt(str))

Python实验一_第4张图片

第十九题

#19、正则表达式的应用(1).用户输入一段英文,然后输出这段英文中所有长度为 3 个字母的单词。
# (提示:可以调用 findall 函数,也可以先调用 split 函数将字符串进行分隔,再搜索长度为 3 的单词。)
import re
words=input("Input the words:")
l=re.split('[\. ]+',words)  #使用空格分隔词语,得到各个单词,\.后面的空格表示匹配字段中的空格进行分割,+号表示重复一次或者多次
print(l)
i=0   #这里我设置的是计数器
for i in l:
    if len(i)==3:  #如果单词的长度为3  输出
        print(i)
    else:
        print('')

第二十题

20、将字符串:“a:1a1:2a2:3*a3:4”,处理成 python 字典:{‘a’:‘1’,
‘a1’:‘2’, ‘a2’:‘3’,‘a3’:‘4’ }

d = {}
l = [x for x in input().split('*')]
for i in l:
    k,v = i.split(':')
    d[k] = int(v)
print(d)

Python实验一_第5张图片

第二十一题

#用 Python 实现一个二分查找的函数
import sys
sys.setrecursionlimit(4000)#设置递归最大次数为4000次
l = [2, 3, 5, 10, 15, 16]
def find(l,m):
    mid = len(l)//2
    if l[mid]>m:
        new_l = l[:m]
        return find(new_l,m)
    elif l[mid]<m:
        new_l = l[mid:]
        return find(new_l,m)
    else:
        return l[mid]
print(find(l,5))

Python实验一_第6张图片

第二十二题

#一个列表中保存了一些整数,请输出列表中重复的数字,以及重复的次数
l = [x for x in input().split(' ')]
a = {}
for i in l:
    if l.count(i)>1:
        a[i] = l.count(i)
print(a)

Python实验一_第7张图片

第二十三题

#23、输入一个不多于 5 位的正整数,请输出它的位数,以及逆序输出各位数字。
num = input()
print("他是一个"+str(len(num))+"位数")
print('逆序输出是:',''.join(list(reversed(num))))

Python实验一_第8张图片

你可能感兴趣的:(python,python)