python入门经典算法(凝气三层修为)

本文展示了Python编程中的一些基本操作,包括冒泡排序的普通和优化实现,字符串和列表的反转、排序,字符串大小写反转,斐波那契数列的生成,以及字符串处理和替换。此外,还涉及到了递归函数的应用,如计算兔子数量,以及在列表操作中的各种实用技巧,如分类和计数。
摘要由CSDN通过智能技术生成

1.冒泡排序,针对列表

def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        for j in range(n-i-1):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
    return arr

list_1 = [5, 69, 12, 1, 66, 85, 21]
print('待排序的数组为:', list_1)
print('从小到大排序后结果为:', bubble_sort(list_1))
def bubble_sort_optimized(arr):
    n = len(arr)
    for i in range(n):
        swapped = False
        for j in range(n-i-1):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
                swapped = True
        if not swapped:
            break
    return arr

list_2 = [15, 169, 2000, 1000, 87, 34, 990]
print('待排序的数组为:', list_2)
print('优化版--从小到大排序后结果为:', bubble_sort_optimized(list_2))

2.字符串反转

k = '2347abcdefg'
print(k[::-1])
print(''.join(reversed(k)))

3.列表反转

a_list = [3,5,2,'nice','赞']
print(a_list[::-1])
print(list(reversed(a_list)))
b_list = [9,3,0,1,7]
b_list.reverse() # 返回值为None,需要print才能看到,会修改原列表
print(b_list)

4.列表排序

print(sorted(b_list, reverse=True)) # 其中,reverse是排序规则,True表示按降序排列,False表示按升序进行排序,False是默认值。

5.字符串大小写反转

str_3 = "Hello, World!"
print('源字符串为:', str_3)
# 创建一个新的字符串
new_string = ""
# 遍历每个字符并将其转换为相应的大小写形式
for i in str_3:
    if i.islower():
        new_string += i.upper()
    else:
        new_string += i.lower()

# 打印转换后的字符串
print('反转源字符串大小写:')
print(new_string)

6.输出一个 100 以内的斐波那契数列(Fibonacci sequence)

a, b = 0, 1
while b < 100:
    print(b, end=' ')
    a, b = b, a+b

7.替换第一个静香 为胖虎

s = '静香语文100分, 静香数学100分'
print(s.replace('静香','胖虎',1)) #替换不超过1次

8.从一个列表中获取数据,奇数放到一个新列表,偶数放到另一个新列表

origin_list = [23,4,10,33,17,29,80]
oushu_list = []
jishu_list = []
while len(origin_list) > 0:  # 必须把len(origin_list)写到这里
    each_item = origin_list.pop()
    if each_item % 2 == 0:
        oushu_list.append(each_item)
    else:
        jishu_list.append(each_item)
else:
    print("列表内的数字已按照奇偶分类,完成!")
print(oushu_list)
print(jishu_list)

9.一百以内相加

sum1 = 0
for i in range(100):
    sum1+=i
print(sum1)

10.兔子的数量以这样的方式增长:每个月的兔子数量等于它前一个月的兔子数量加它前两个月的兔子数量,即f(n)=f(n-1)+f(n-2)。假设第1个月的兔子有2只,第2个月的兔子有3只,你能使用递归的方法求得第n个月的兔子有多少只吗?

def rabbit(n):
    if n == 1:
        return 2
    elif n == 2:
        return 3
    else:
        return rabbit(n-2)+rabbit(n-1)
r=int(input())
print(rabbit(r))

11.输出字符串要去掉多余空格,并把名字首字母大写,姓名间隔一个空格

输入:     Kevin     garnett            

输出: Kevin Garnett    

.strip() --- 删除两边空格

.lstrip() --- 删除左边空格

.rstrip() --- 删除右边空格

.replace(" ","") --- 删除所有空格

.split() --- 先切分,"".join() --- 再拼接

s = '     Kevin     garnett    '
s_1=s.replace(' ','')
s_2=s_1.replace('n','n ',1)
print(s_2.title())
 

12.使用input读入一个十六进制的数字,输出它的十进制数字是多少?

num16 = input()

num10 = int(num16,16)

print(num10)

13.二维列表中,最大的数字是哪个?

a = [[1,2,3,4],[4,5,6,7]]
max_row = [max(row) for row in a]
max_val = max(max_row)
print(max_row)
print(max_val)

14.输入1 2 3 4 5 间隔有空格,输出[1, 2, 3, 4, 5] 列表中的每个元素都是int类型

方案一

num = input()

lista=num.split()

listb=list(map(int,lista))

print(listb)

方案二

num = input()

lista=num.split()

listb=[]

for i in lista:

        i =int(i)

        listb.append(i)

print(listb)

方案三

#这是另一个知识点,list推导式

list1 = [int(i) for i in input().split()]

print(list1)

15.有1、2、3、4四个数字,提问:能组成多少个互不相同且无重复数字的三位数?

count=0
for i in range(1,5):
    for j in range(1,5):
        for k in range(1,5):
            if (i !=j) & (i !=k) &(j !=k):
                print(i*100+j*10+k,end='  ')
                count +=1
print('\n一共可以组成%d个不重复的三位数'%count) 

16.给定一个整数 N,和一个 0-9 的数 K,要求返回 0-N 中数字 K 出现的次数

count = 0
num = int(input("please input a  int:"))
target_num = random.randint(0,9)
print("随机出现的目标数字为:"+str(target_num))
print("指定查找数字的范围为"+"0-"+str(num))
for i in range(num):
    if i == target_num or str(target_num) in str(i):
        print(i,end=' ')
        count += 1
print("目标随机数出现在指定范围内的次数为:"+str(count))

17.输入四位整数密码,然后对密码进行破解,破解方案如下:每位数字都要加上3再除以9的余数代替该位数字,然后将第1位和第3位数字交换,第2位和第4位数字交换。

比如输入:1234         那么应该输出:6745

s=input()
b=[]
for i in range (len(s)):
    k=(int(s[i])+3)%9
    b.append(k)
b[0], b[2] = b[2], b[0]
b[1], b[3] = b[3], b[1]
for i in b:
    print(i,end='')

18.分两行输入两个整数x与y,然后计算输出:第一行输出x * y,第二行输出x**y 

def Add_Sub(x,y):
    c = x*y
    cd = x ** y
    return c,cd
 
if __name__ == "__main__":
    x = int(input())
    y = int(input())
    c,cd = Add_Sub(x,y)
    print(c,cd,sep='\n')

19.输入的数字分别是x、y、z、k,请输出x+y的结果与z-k的结果相乘的值

x,y,z,k = map(int,input().split())

print((x+y)*(z-k))

20.禁止重复注册

使用for循环遍历new_users,如果遍历到的新用户名在current_users中,

则使用print()语句一行输出类似字符串'The user name GurR has already been registered! Please change it and try again!'的语句,

否则使用print()语句一行输出类似字符串'Congratulations, the user name Niu Ke Le is available!'的语句。(注:用户名的比较不区分大小写)

current_users=['Niuniu','Niumei','GURR','LOLO']
new_users=['GurR','Niu Ke Le','LoLo','Tuo Rui Chi']

for i in new_users:
    for j in current_users:
        if i.lower()==j.lower():
            print('The user name %s has already been registered! Please change it and try again!' % i)
            break
    else:
        print('Congratulations, the user name %s is available!' % i)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大剑师^_^兰特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值