#利用 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)
#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))
#(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))
#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))
#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 实现一个二分查找的函数
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))
#一个列表中保存了一些整数,请输出列表中重复的数字,以及重复的次数
l = [x for x in input().split(' ')]
a = {}
for i in l:
if l.count(i)>1:
a[i] = l.count(i)
print(a)
#23、输入一个不多于 5 位的正整数,请输出它的位数,以及逆序输出各位数字。
num = input()
print("他是一个"+str(len(num))+"位数")
print('逆序输出是:',''.join(list(reversed(num))))