【精选】python入门算法题(二)

上篇文章分享了一些入门算法题,如果没有看过的可以去看一下上一篇文章,这篇文章囊还是分享一些我精选的入门算法程序,废话不多说,上代码!

"""
实心矩形
"""
raw=int(input("请输入行数:"))
for x in range(raw):
    print (" * "*x)

"""
空心矩形
"""
raw=int(input("请输入行数:"))
for x in range(raw):
    for y in range(raw):
        if x==0 or x==(raw-1) or y==0 or y==(raw-1):
            print(" * ",end="")
        else:
            print("   ",end="")
    print("")

"""
空心三角形
"""
for x in range(1,10):
    print ((9-x)*" ",end="")
    for y in range(2*x-1):
        if y==0 or y==2*x-2 or x==9:
            print("*",end="")
        else:
            print(" ",end="")
    print()

"""
实心菱形
"""
for i in range(1,8,2):
    print (' '*(4-(i+1)/2)+'*'*i)
for i in range(5,0,-2):
    print (' '*(4-(i+1)/2)+'*'*i)
"""
题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
"""
up = 2.0
down = 1.0
result = 0.0
for i in range(0,20):
    result = result+up/down
    up = up+down
    down = up-down
print ('%f'%result)
"""
倒序输出字符串
"""
def output(s,length):
    if length==0:
        return
    print (s[length-1],end="")
    output(s,length-1)
s = input('输入字符串:')
length = len(s)
output(s,length)
'''
演示lambda的使用。
'''
MAXIMUM = lambda x,y :  (x > y) * x + (x < y) * y
MINIMUM = lambda x,y :  (x > y) * y + (x < y) * x
a = 10
b = 20
print ('The largar one is %d' % MAXIMUM(a,b))
print ('The lower one is %d' % MINIMUM(a,b))
"""
假如你要为一个应用搞限时促销,生成激活码(或者优惠券),请用 Python 如何生成 200 个激活码
(或者优惠券)。激活码的格式为asqE-9xRK-lqWU-QkMT
要求1:使用随机生成时,生成数字概率为1/5,大写字母和小写字母概率各为2/5
要求2:200个激活码,他们各不相同 
"""
def creat_key(key_num):
    from random import randint
    res = []
    for t in range(key_num):    #一共生成激活码的次数
        key = ''        #空激活码
        for i in range(16): #激活码一共16个字符(除去分隔符)
            if i %4==0:
                key+='-'
            choice = randint(1,5)   #1->随机出一个数字,[2,3]->随机出一个大写字母,[4,5]->随机出一个小写字母
            if choice == 1:
                key += str(randint(0,9))
            elif 1<choice<=3:
                key += chr(randint(ord('A'),ord('Z')))
            else:
                key += chr(randint(ord('a'), ord('z')))
        res.append(key[1:])#去掉开头的分隔符
    return res
res = creat_key(200)
print(res)
"""
猜数字游戏
"""
import random
answer = random.randint(1,100) #正确答案
times = 0 #猜的次数
while True:
    guess = int(input('请输入你猜测的数:'))
    times +=1
    if guess == answer:
        print(f'回答正确,一共猜测{times}次') #f字符串,把需要填入的变量用{}括起来就行了,比较直观
        break
    elif guess < answer:
        print('小了')
    else:
        print('大了')
"""
设计一个函数装饰器,这个装饰器可以记录任意函数单次调用的运行时间。
如果函数的运行时间小于1秒,就不输出其运行时间,否则输出此函数的运行时间
"""
import time
def deco(func):
    def wrapper(*args,**kwargs):
        start = time.time()
        res = func(*args,**kwargs)
        time_used = time.time()-start
        if time_used >=1:
            print(f'{func.__name__}函数运行时间为1s及以上')
        return time_used
    return wrapper
@deco
def f1(a):
    print(a)
    time.sleep(2)       #让f1运行时间保存2秒
@deco
def f2(a):
    print(a)

f1(1)   #只有f1会额外输出时间为1s及以上
f2(2)
"""
凯撒密码的加密方法是:每当你想要加密一段文字时,你需要选择一个移位值 S,
它是一个0到25之间的整数。然后,你把文字中的每一个字母用S个位置之后的字母
替换(假设S=1,那么A就用B替换)。如果位置超过了Z,那么就要从A开始继续数
"""
def get_keywords(code,step):
    res = ''
    for c in code:
        if c == ' ':
            res+=' '
        elif c.isupper():
            res+=chr((ord(c)-ord('A')+step)%26+ord('A'))
        else:
            res+=chr((ord(c)-ord('a')+step)%26+ord('a'))
    return res
print(get_keywords('Ifsf up tubz',25))
print(get_keywords('Here to stay',1))
"""
N个人围坐一圈数数,每个人标一个号,从一开始数,数到三的人出去,循环数数,求得出列序号顺序
"""
n=int(input("输入人数:"))
lst=[]
def move(array,m):
    print (m)
    if m==0:
        return array
    return array[-m:]+array[0:len(array)-m]
for x in range(1,n+1):
    lst.append(x)
while len(lst)>2:
    y=len(lst)%3
    print ("y=%s"%y)
    lst2=[]
    for x in range(1,len(lst)//3+1):
        print ("出队:%s"%lst[3*x-1])
        lst2.append(lst[3*x-1])
    for x in lst2:
        for h in range(1,len(lst)):
            if lst[len(lst)-h]==x:
                print ("删除的是:",lst[len(lst)-h])
                del lst[len(lst)-h]
    print (lst)
    lst=move(lst,y)
    print (lst)
print (lst[1])

希望这些程序可以帮助到初学python的你,以后有时间会继续更新的

猜你喜欢

转载自blog.csdn.net/qq_37482202/article/details/82318707