去掉连续重复字符串
def sws(s):
return s[0]+''.join(s[i] for i in range(1,len(s)) if s[i] != s[i-1])
print(sws('ppyytttttthooooon'))
去掉重复字符串
foo = "mppmeeqt"
print("".join(set(foo))
print(set(foo))
给定整数列表,将所有0的元素向左移动,同时保持数组中其他元素的顺序不变。必须对数组进行原地修改。
def move_zero(num):
index = len(num) - 1
print(index)
for i in list(range(len(num)))[::-1]:
if num[i] != 0:
num[index] = num[i]
index -= 1
print(index)
for i in range(index+1):
num[i] = 0
list1 = [9,8,6,5,0,4]
move_zero(list1)
print(list1)
冒泡排序
冒泡排序实际上简单的,就直接做n-1次的迭代排序就OK
def mao_pao(list):
x = len(list)
for i in range(x-1):
for k in rang(x-i-1):
if list[k] > list[k+1]:
list[k],list[k+1] = list[k+1],list[k]
但是实际上没有考虑到中间会有已经是排好的顺序的时候
此时加入flag,如果某次的排序中,没有发生任何交换,说明已经是想要的排序了,跳出排序就OK
def mao_pao(list):
x = len(list)
for i in range(x-1):
flag = 0
for k in rang(x-i-1):
if list[k] > list[k+1]:
list[k],list[k+1] = list[k+1],list[k]
flag = 1
if flag == 0:
break
扑克牌顺子判断
- 抽象扑克牌中王为0,A为1,2到K为2-13
- 一副扑克存在2个王,其余每个数字存在4张
list=[0,1,0,4,1]
list1 = []
k = 0
for i in range(5): # 用来判断大小王数量
if list[i] == 0:
k += 1
# list.pop()
elif list[i] != 0:
list1.append(list[i])
list2 = set(list1)
print(k,list2)
if len(list2) == 3: # 判断是否存在重复扑克,不存在重复才有可能顺子
if k==0:
if max(list2) - min(list2) == 4:
print("是顺子")
else:
print("不是顺子")
elif k==1:
if max(list2) - min(list2) == 4 or max(list2) - min(list2) == 3:
print("是顺子")
else:
print("不是顺子")
elif k==2:
if max(list2) - min(list2) == 4 or max(list2) - min(list2) == 3 or max(list2) - min(list2) == 2:
print("是顺子")
else:
print("不是顺子")
elif k >2:
print("erro")
else:
print("erro")
思路:
- 不存在王的时候,最大减去最小的肯定为4,不为4就不是顺子
- 存在一个王的时候,最大减去最小可以为4,也可以为3
- 存在2个王的时候,最大减去最小可以为4,也可以为3,也可以为2
斐波那契数列
from functools import lru_cache
# 设置数据大小,当数列大渔38左右的时候,会出现计算时间过长或者字符长度不够保存
@lru_cache(maxsize=None)
def fib4(n):
if n < 2: # base case
return n
return fib4(n - 2) + fib4(n - 1) # recursive case
斐波那契求N项和
def sum(n)
sum = 0
for i in range(n+1):
sum += fib4(i)
return sum
通过边长确定三角形形状
- 通过三角形的三个角也能确定
def triangle(a, b, c);
if a>0 and b>0 and c>0:
if a+b>c and a+c>b and b+c>a:
if a==b and b==c:
print('等边')
elif a==b or a==c or b==c:
print("等腰")
elif a*a + b*b == c*c or a*a+c*c==b*b or c*c+b*b==a*a:
print("直角")
else:
print("这是不规则三角形")
print("不是三角形")
else:print("请输入大于0数字")