python案例学习

admin 2022年1月6日01:53:01安全博客评论17 views4566字阅读15分13秒阅读模式

计算小于1000的所有整数中能够同时被5和7整除的最大整数

1
2
3
4
5
6
num = 1000
while num >= 0:
if num % 5 == 0 and num % 7 == 0:
print("可以同时被5和7整除的最大整数为: %d. " % num)
break
num -= 1

要求用户输入若干使用空格分割的数字,输出这些数字中只出现过一次的那些数字

1
2
3
4
nums = input('请以空格间隔输入若干数字:').split(' ')
for num in nums:
if nums.count(num) == 1:
print(num)

生成一个包含15个介于1到50之间的随机整数的列表,为其循环左移5个元素

1
2
3
4
5
6
7
import random
lst = random.sample(range(1, 51), 15)
print(lst)
for i in range(5):
lst.insert(len(lst), lst[0])
lst.remove(lst[0])
print(lst)

辗转相除法

1
2
3
4
5
6
7
8
9
10
11
def ZhanZhuanChu(x, y):
if x < y:
x, y = y, x
while y:
r = x % y
x = y
y = r
return x
a = int(input("a的值为:"))
b = int(input("b的值为:"))
print(ZhanZhuanChu(a,b))

编写函数接收参数a和n,计算并返回形式如a + aa + aaa + aa…aa的表达式前n项的值,其中a为小于10的自然数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def Sum_n(a, n):
if a >= 10:
return
result = 0
for i in range(1, n + 1):
#range(1,n+1)表示从1~n
tmp = 0
for j in range(i):
#range(i)从0开始
tmp = tmp + 10 ** j
result = result + (a * tmp)
return result
a = int(input("a的值为:"))
n = int(input("n的值为:"))
print(Sum_n(a,n))

编写函数,接收字符串参数,返回一个元组,其中第一个元素为大写字母个数,第二个元素为小写字母个数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def demo(s):
#result = (0,0) 出错,因为元组不能被修改,只能先用列表再转元组
result = [0,0]
tmp1,tmp2 = '',''
for ch in s:
if ch.islower():
result[1] += 1
tmp1 = tmp1 + ch
elif ch.isupper():
result[0] += 1
tmp2 = tmp2 +ch
print('小写字母有:' + tmp1 + ' 共有' + str(result[0]) + '个')
print('大写字母有:' + tmp2 + ' 共有' + str(result[1]) + '个')
return tuple(result)
print(demo('This Is A Test'))


#编写函数,接收一个正偶数为参数,输出两个素数,并且这两个素数之和等于原来的正偶数。如果存在多组符合条件的素数,则全部输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def demo(n):
def IsPrime(p):
if p == 2:
return True
# %2 求余数
if p % 2 == 0:
return False
# 假如n是合数,必然存在非1的两个约数p1和p2,其中p1<=sqrt(n),p2>=sqrt(n)
for i in range(3,int(p**0.5)+1,2):
if p % i == 0:
return False
return True
if isinstance(n,int) and n > 0 and n % 2 == 0:
for i in range(2,n//2+1):
if IsPrime(i) and IsPrime(n-i):
print(i,'+',n-i,'=',n)

if __name__ == '__main__':
demo(int(input("正偶数n的值为")))

编写函数,计算字符串匹配的准确率。以打字练习程序为例,假设origin为原始内容,userInput为用户输入的内容,下面的代码用来测试用户输入的准确率。

1
2
3
4
5
6
7
8
9
10
11
12
13
def Rate(orgin,userInput):
if not (isinstance(orgin,str)) and isinstance((userInput,str)):
print('Both Two Must Be Strings')
return
orgin,userInput = list(orgin),list(userInput)
#right = sum(1 for i in range(1,len(userInput)) if orgin[i] == userInput[i])
#用生成器表达式,zip函数把orgin和userInput压缩在一起,生成一个对象。更优
right = sum(1 for o,u in zip(orgin,userInput) if o == u )
return round(right/len(orgin),2)

s1 = 'Read It Slow'
s2 = 'really'
print(Rate(s1,s2))

编写函数模拟猜数游戏。系统随机产生一个数,玩家最多可以猜5次,系统会根据玩家的猜测进行提示,玩家则可以根据系统的提示对下一次的猜测进行适当调整。

本题注意prompt = ‘Start to guess’ 和else ‘Guess again’直接写在第一行,后面才是对prompt进行输入,

其实等同于prompt input(‘Start to guess:’)

但是在这里只用了一行又把报错的输入Guess again写了,很便利

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from random import randint
def guess(maxValue=100,maxTimes=5):
#随机生成一个数
value = randint(1,maxValue)
for i in range(maxTimes):
prompt = 'Start to guess:' if i ==0 else 'Gusee again:'
#使用异常处理结构,防止输入不是数字
try:
x = int(input(prompt))
except:
print('Must input an interger between 1 and',maxValue)
else:
#猜对了
if x == value:
print("Congratuations!")
break
elif x > value:
print("Too big")
else:
print("Too little")

else:
#次数用完还没猜对,游戏结束,提示正确答案
print('Game over.Fail')
print('The value is',value)

if __name__ == '__main__':
guess()

编写函数模拟报数游戏。有n个人围成一圈,顺序编号,从第一个人开始从1到k(假设k=3)报数,报到k的人退出圈子,然后圈子缩小,从下一个人继续游戏,问最后留下的是原来的第几号。

关键:循环器函数cycle

下图报错原因:循环到最后,range(1,k+1)已经超出列表的本身大小。所以本题的关键是是用cycle函数,把值一个一个取出来,而且不越界

image-20200319171221172

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from itertools import cycle

def demo(lst, k):
#切片,以免影响原来的数据
t_lst = lst[:]
#游戏一直进行到只剩下最后一个人
while len(t_lst)>1:
#创建cycle对象
c = cycle(t_lst)
#从1到k报数
for i in range(k):
t = next(c)
#一个人出局,圈子缩小
index = t_lst.index(t)
t_lst = t_lst[index+1:] + t_lst[:index]
#游戏结束
return t_lst[0]

lst = list(range(1,11))
print(demo(lst, 3))

编写函数计算任意位数的黑洞数。黑洞数是指这样的整数:由这个数字每位上的数字组成的最大数减去每位数字组成的最小数仍然得到这个数自身

例如3位黑洞数是495,因为954-459=495,4位数字是6174,因为7641-1467=6174。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def main(n):
'''参数n表示数字的位数,例如n=3时返回495,n=4时返回6174'''
#待测试数范围的起点和结束值
start = 10**(n-1)
end = 10**n
#依次测试每个数
for i in range(start, end):
#由这几个数字组成的最大数和最小数
big = ''.join(sorted(str(i),reverse=True))
little = ''.join(reversed(big))
big, little = map(int,(big, little))
if big-little == i:
print(i)
n = 4
main(n)

编写函数,寻找给定序列中相差最小的两个数字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import random

def getTwoClosestElements(seq):
#先进行排序,使得相邻元素最接近
#相差最小的元素必然相邻
seq = sorted(seq)
#无穷大
dif = float('inf')
#遍历所有元素,两两比较,比较相邻元素的差值,同时去掉最大值和最小值,所以是seql[:-1]和seq[i+1]
#使用选择法寻找相差最小的两个元素
#enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在for循环当中
for i,v in enumerate(seq[:-1]):
d = abs(v - seq[i+1])
if d < dif:
first, second, dif = v, seq[i+1], d
#返回相差最小的两个元素
return (first, second)

seq = [random.randint(1, 10000) for i in range(20)]
print(seq)
print(sorted(seq))
print(getTwoClosestElements(seq))

FROM :b0urne.top | Author:b0urne

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年1月6日01:53:01
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  python案例学习 http://cn-sec.com/archives/722902.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: