今天终于零零散散吧题目写完了,晚上再来写思路吧1 0.15
完成 10.18
修改了两个填空题的答案10.20
学弟们一定要记得7-22 输出全排列,这个题目啊啊啊啊
import itertools from permutation
for 循环+permutation(string s,int n)
我们期末考了,但是我不记得了,啊啊啊啊啊啊
不过还好,数据很水
学长手写了一个全排列过了【滑稽.jpg】
2-10代码
i=1
while i<=5:
num=1
for j in range(1,i+1):
print(num,end="G")
num+=2
print()
i+=1
2-11
for i in range(1,4):
for j in range(1,4):
if j%2==0:
break
print("{:3d}".format(i*j),end="")
if i %2==0:
break
2-12
num=int(input())
a=num-1
while a>1:
if num%a==0:
print("哈哈")
break
a=a-1
else:
print("嘻嘻")
2-13
i=1
s=0
while i<10:
if i%2==0:
continue
else:
s+=i
print(i)
i=i+1
print(s)
2-14
balance=20
while True:
if balance<9:
break
balance-=9
print("balance is {}".format(balance))
2-15
for i in range(1,4):
for j in range(1,4):
print("%3d"%(i*j),end="")
if j%2==0: break
最后一个填空题
def main():
s=[12,-4,32,-36,12,6,-6]
s_max,s_sum=0,0
for i in range(len(s)):
s_sum+=s[i]
if s_sum>=s_max:
s_max=s_sum
elif s_sum<0:
s_sum=0
print(s_max)
main()
代码放这里,你们自己去运行一下,一定要自己试一下
------------------------------------------------------------------------------------------------------
1-5 AABCD
6-10 BABBB
11-15 ABDAC
------------------------------------------------------------------------------------------------------
1 .DGH
2. DBH
3. AHI
4. 40
5. 1 3 5
6. 4 40 12 6
------------------------------------------------------------------------------------------------------
首先我们解决结构体排序的板子问题
我们拿第四题当模板,很多题目都可以这样套,比如第二题
from functools import cmp_to_key
def mycmp(a,b):
if a[1]>b[1]:
return -1
elif a[1]b[0]:
return 1
elif a[0]
首先使用replace()方法删除掉脏数据,然后统一转换为小写,
再使用“ ”.join()来格式化空格,详情请参见往期写的字符串操作方法,存进列表
计算单词个数(当前行列表元素个数)
将单词作为key,出现次数作为值,
再接受下一行数据
使用字典的排序方法,以及自定义排序
输出排序后的数据的前十个
下面是我的原始注释版
from functools import cmp_to_key
def mycmp(a,b):
#先比较a[1] 降序
# 再比较a[0] 升序
if a[1]>b[1]:
return -1
elif a[1]b[0]:
return 1
elif a[0]
str1=input().split()
str2=input().split()
dir1=dict(zip(str1,str2))
#压缩成字典的步骤 --两个列表变成字典---使用zip
list1=list(dir1.items())
#只写字典名称 是一个由键组成的列表 要返回键值元组的列表需要调用列表的items()函数
#变成列表,方便排序 样例最外面有括号
list1.sort()
print(list1)
板子题目
from functools import cmp_to_key #排序函数必须用到的
def mycmp(a,b):#比较函数
if a[1]>b[1]:
return -1
elif a[1]b[2]:
return -1
elif a[2]b[3]:
return -1
elif a[3]b[0]:
return 1
return -1
T=int(input())#测试组数
for i in range(T):
n=int(input())
# 初始化数据 0舍弃掉
jifen = [0 for i in range(n+1)]#积分
win_num = [0 for i in range(n+1)]#净胜球
all_num = [0 for i in range(n+1)]#总进球
num = [i for i in range(n+1)]#编号
line=int((n*(n-1))/2)#行数
for t in range(line):
i,j,p,q=map(int,input().split())
#输入一行四个数据
#计算维护
if p>q:
jifen[i]+=3
win_num[i]+=p-q
win_num[j]-=p-q
elif p
先初始化列表,输入数据进行计算维护,然后将元组使用zip变成元组列表,
删除掉第一个为空的数据,进行排序
建立一个新列表,将排序结果放入其中输出即可
模板题,多看看,就眼熟了
Mouth={
1:"Jan",
2:"Feb",
3:"Mar",
4:"Apr",
5:"May",
6:"Jun",
7:"Jul",
8:"Aug",
9:"Sept",
10:"Oct",
11:"Nov",
12:"Dec"
}
ans=int(input())
print(Mouth[ans])
打表输出
import random,string
x=int(input()) #输入随机数种子
random.seed(x) #载入随机数种子
line=int(input()) #行数
width=int(input()) #宽度
list1=list(string.ascii_letters+string.digits)
#确定列表
for i in range(line):
for j in range(width):
print(random.choice(list1),end="")
if i
这题认识了string库里面的ascii_letters和string.digits
还有random里面的choice
n=int(input())
suma=0 #有重复
sumb=0 #无重复
# for i in range(n):
# list_test=list(map(int,input().split()))
# f=True
# list_copy=set(list_test)
# for i in list_copy:
# if list_test.count(i)>=2:
# suma+=1
# f=False
# break
# if f==True:
# sumb+=1
for i in range(n):
list_test = input().split()
if len(list_test)==len(set(list_test)):
sumb+=1
else:
suma+=1
print("True={}, False={}".format(suma,sumb))
艹,一开始想复杂了,其实直接比较原列表的长度和该列表形成的集合长度就可以了
有重复元素一定长度不相等,判断长度即可
import random,string
x,n=map(int,(input().split())) #输入随机数种子
random.seed(x) #载入随机数种子
num=0
for i in range(n):
ans = []
for j in range(23):
ans.append(random.randint(1,365))
#start--end
if len(ans)!=len(set(ans)):
num+=1
print("rate={:.2f}".format(num/n))
random.randint()函数
这一题说明随机数种子是一个伪随机
# list1=eval(input())
# print(list1)
# sum_num=0
# for i in list1:
# # print(i,type(i))
# if type(i)==str:
# #特判
# # sum_num+=int(i) str直接跳过
# continue
# elif type(i)==int or type(i)==float:
# sum_num+=i
# else:
# #其他类型元素
# sum_num+=sum(i)
# print(sum_num)
x = eval(input())
def Sum(x):
sums = 0
for ch in x:
if isinstance(ch, int):
sums += ch
if isinstance(ch, list):
sums += Sum(ch)#列表中嵌套层次不限2层,要用递归
if isinstance(ch, tuple):
sums += Sum(ch)#列表中嵌套层次不限2层,要用递归
return sums
print(Sum(x))
四种情况: (遍历递归)
整型----直接求和
列表----进行迭代
元组---进行迭代
下面的几道纯列表题都一样,直接一起解析了
ls=eval(input())
def s(ls,level):
sum=0
for i in ls:
if type(i) == int:
sum+=i*level
else:
sum+=s(i,level+1)
return sum
sum=s(ls,1)
print(sum)
ls=eval(input())
def s(ls,level):
sum=0
time=pow(-1,level+1)*level
for i in ls:
if type(i) == int:
sum+=i*time
else:
sum+=s(i,level+1)
return sum
sum=s(ls,1)
print(sum)
ls=eval(input())
def s(ls,level):
sum=0
for i in ls:
if type(i) == int:
sum+=level
else:
sum+=s(i,level+1)
return sum
sum=s(ls,1)
print(sum)
ls=eval(input())
def s(ls,level):
sum=0
for i in ls:
if type(i) == int:
sum+=11-level
else:
sum+=s(i,level+1)
return sum
sum=s(ls,1)
print(sum)
ls=eval(input())
dic={}
def s(ls,level):
sum=0
for i in ls:
if type(i) == int:
dic[str(level)]=dic.get(str(level),0)+1
else:
sum+=s(i,level+1)
return sum
sum=s(ls,1)
level=int(input())
print(dic[str(level)])
#加到字典里面,吧层数当做索引,元素个数当做值
一个纯列表的递归模板
如果含有其他东西则需要修改一下
这里利用了eval()函数--评估函数
评估函数
直接将列表字符串转为列表,666
这些题目根据题目要求改一下就好了
基本思想都是对列表里面的元素进行类型判断,可迭代迭代,不需要跳过,需要返回结果直接相加
while True:
try:
n=int(input())
ans=pow(2,8*n-1)-1
print(ans)
except:
break
n=int(input())
for i in range(n):
str1=input().lower()#转为小写
list1=str1.split()
list2=[]
for j in list1:
if len(j)>4:
list2.append(j[0:4]+".")
else:
list2.append(j)
print(" ".join(i for i in list2))
n =input().split(",")
m =input().split(",")
index=int(input())
list1=[]
#遍历第二个位置的最大值
max=-1
coun=0
for i in n:
tup1=tuple(i.split())
list1.append(tup1)
if int(list1[coun][1])>max:
max=int(list1[coun][1])
#print(type(int(list1[coun][1])))
coun+=1
# print(max)
for i in m:
tup1 = tuple(i.split())
list1.append(tup1)
if int(list1[coun][1]) > max:
max = int(list1[coun][1])
# print(type(int(list1[coun][1])))
coun += 1
list2=[0 for i in range(max+1)]
for i in list1:
list2[int(i[1])]+=int(i[0])
print(list2[index])
这个算法有点不稳定,使用字典会更好
这个是采用他最大值为多少然后进行生成列表,比较不稳定
找到最大值
a=eval(input())
b=eval(input())
# print(b)
# print(type(a))
for key1, value1 in a.items():
if key1 in b:
b[key1] += value1
else:
b[key1] = value1
dic = sorted(zip(b.keys(),b.values())) #打包成元组进行排序
# print(dic)
d={}
for i in range(len(dic)):
d[dic[i][0]] = dic[i][1]
print (d)
吧两个字典加到一个字典里面去,其实如果键不存在也可以使用数组索引形式
666
使用zip打包形成元组,并且元组sorted()默认按第一个元素升序排列
value=eval(input())
status = int(value[0])
#将b右边的字符转换为ASCII码值
ans=[]
for i in range(8):
st = (bool)((status>>i)&0x01)
# 10进制 :1 题目里面的二进制: 01
#int型的和16进制的数据进行与运算取最低位
#题目里面的输出倒着输出,可以使用右移运算符依次取最低
#print(f'第{i}位:{st}')
ans.append(str(st))
print("[",end="")
print(", ".join(ans),end="")
print("]")
for i in range(1,10):
for j in range(1,10):
rule="{:8}"
# print(rule.format("%d*%d=%d"%(i,j,i*j)),end="")
print(rule.format("{}*{}={}".format(i, j, i * j)), end="")
print()
一个很坑的点是测试样例是没有那个题目所给的样例的多余的 两个回车
直接这样就行,太蠢了
注意这个新的保留一定宽度输出,后面用到的ljust()也可以
比如说这样子:
for i in range(1,10):
for j in range(1,10):
#rule="{:8}"
# print(rule.format("%d*%d=%d"%(i,j,i*j)),end="")
print("{}*{}={}".format(i, j, i * j).ljust(8), end="")
print()
def gcd(a,b):
if b==0:
return a
if a>=b:
a,b=b,a
return gcd(a,b%a)
# print(gcd(3,4))
a,b=map(int,input().split(','))
print("GCD:{:.0f}, LCM:{:.0f}".format(gcd(a,b),a*b/gcd(a,b)))
板子题目,
注意是右边那个数为0则返回左边那个数
如果左边大于右边则交换一下
然后再次递归(左边(交换后),大%小)
最后得到结果
str1=input()
n=int(input())
for i in str1:
if i.isalpha()==True:
if chr(ord(i)+n).isalpha()==False:
print(chr(ord(i)+n-26),end="")
else:
print(chr(ord(i)+n),end="")
else:
print(i,end="")
chr()ord()的用法
from itertools import permutations
n = int(input())
a = [str(i) for i in range(1,n+1)]
# print(a)
s = "".join(a)
# print(s)
# sum=0
for i in permutations(s,n):
print("".join(i))
# sum+=1
# print(sum)
调用permutaions()库函数
n=int(input())
start=0
for i in range(1,n+1):
start=i
list1=[]
add=n
for j in range(n-i+1):
str1=str(start)
if len(str1)<2:
str1+=" "
list1.append(str1)
start+=add
add-=1
print(" ".join([str(k) for k in list1 ]).rstrip())
一个很傻逼的点是需要自己观察他是每个数字占两个的规律
(表现为三格,实际上由于列表自动隔一个空格,所以数字输出时只格式化为两格)
我们只需在添加字符串数字的时候判断一下长度,不够右边补0即可
但是这样就会使得最右边结尾有多出空格(题目是不能要的)
所以得使用.rstrip()方法
from functools import cmp_to_key
def mycmp(a,b):
#性别降序
#身高升序
if a[1]>b[1]:
return -1
elif a[1]b[0]:
return 1
return -1
n=int(input())
#实际上这个n没有用
list1=list(map(int,input().split()))
list2=list(map(int,input().split()))
list3=list(zip(list1,list2))
ans=sorted(list3,key=cmp_to_key(mycmp))
print(" ".join(str(i[0]) for i in ans))
一个题目,三个知识点,可以当做入门题会好一点
n=int(input())
#生成仿真数组
list_ans=[[0]*n for i in range(n)]
# print(list_ans)
num=n*n
index_x=n-1
index_y=n-1
f=1
#1 2 3 4
#表示左上右下
#开始填充数组
while num!=0:
list_ans[index_x][index_y]=str(num)
################################
if f==1 : #左
if index_y-1>=0 and list_ans[index_x][index_y-1]==0:
#左边没出界而且值为0
index_y-=1
else:
f=2
index_x-=1
elif f==2: #上
if index_x-1>=0 and list_ans[index_x-1][index_y]==0:
#上边没出界而且值为0
index_x-=1
else:
f=3
index_y+=1
elif f == 3: # 右
if index_y + 1 <= n-1 and list_ans[index_x ][index_y+1] == 0:
# 右边没出界而且值为0
index_y += 1
else:
f = 4
index_x += 1
elif f == 4: # 下
if index_x + 1 <= n - 1 and list_ans[index_x+1][index_y ] == 0:
# 下边没出界而且值为0
index_x += 1
else:
f = 1
index_y -= 1
################################
num-=1
# for i in list_ans:
# print(i)
#将列表里的元素格式化输出
for i in list_ans:
for index,j in enumerate(i):
#准备获取尾部地址
if index!=len(i)-1:
print(str(j).ljust(4),end="")
#题目的问题
else:
print(str(j), end="")
print()
三个步骤
1.初始化坐标
2.###以内的是坐标的维护
3.使用enumerate()返回其元素与下标的组合
使用.ljust()输出
n=int(input())
if n<=2:
if n==0:
print("0")
elif n==1:
print("1")
else:
print("2")
else :
list1 = [0] * (n + 1)
list1[1] = 1
list1[2] = 2
# print(list1)
for i in range(n + 1):
if i == 0 or i == 1 or i == 2:
continue
list1[i] = list1[i - 1] + list1[i - 2]
# 分解子问题
# print(list1)
print(list1[n])
简单动态规划
我还水了一道力扣,hhh
ans=[i+1 for i in range(int(input()))]
# ans.pop(0)
# print(ans)
d=int(input())
index=d-1
while len(ans)!=1:
index%=len(ans)
ans.pop(index)
index+=d-1
#print(ans)
print("[{}]".format(ans[0]))
有了pop()这个特性,python解决这类动态变化长度数组是真的强
原本还以为这个pop()只有副作用,没想到这里用上了
我们只需要再pop它的后面第n-1个元素就好了
注意维护下标防止越界
def is_pri(n):
if n==1:
return False
for i in range(n):
if i==0 or i==1:
continue
if n%i==0:
return False
return True
a,b=map(int,input().split())
#测试点0
if a>b:
a,b=b,a
b+=1
sum=0
f=False
for i in range(a,b):
if is_pri(i)==True:
sum+=i
f=True
#测试点12
if f==False:
print("not have prime!")
else:
print(sum)
注意题目要求即可
def print_hw_num(num):
str1=str(num)
str2=str1[::-1]
#字符串也可以使用列表的操作
if str1==str2:
print(num)
#把数字的每一位放进列表
x=int(input())
if x>=10:
#gfgf
for i in range(x+1):
if i<10:
print(i)
else:
print_hw_num(i)
else:
for i in range(x+1):
print(i)
我的方法是使用反转然后判断是否相等
判断id也行理论上
7-30 列表生成及循环左移
n=int(input())
list1=[i+1 for i in range(n)]
list1.pop(0)
list1.append(1)
print(list1)
删除list[0] 他的值为1
然后在末尾吧1加回去
x=eval(input())
sum=0.0
if x>1000000:
sum+=(x-1000000)*0.01
x=1000000
if x>600000:
sum+=(x-600000)*0.015
x=600000
if x>400000:
sum+=(x-400000)*0.03
x=400000
if x>200000:
sum+=(x-200000)*0.05
x=200000
if x>100000:
sum+=(x-100000)*0.075
x=100000
if x>=0:
sum+=x*0.1
print("{:.2f}".format(sum))
else:
print("0.00")
这个题目是正常的???
x=input()
newdict={}
max_str=""
max_num=0
while True:
if x=="q":
break;
#newdict[x]+=1
newdict[x] = newdict.get(x, 0) + 1
if newdict[x]>max_num:
max_num=newdict[x]
max_str=x
x = input()
print(max_str,newdict[max_str])
大水题
数据量大的时候,加到列表里面然后排序会快一点
def all_list(arr):
ans={}
for i in set(arr):
ans[i]=arr.count(i)
return ans
# total=input()
# x=total.split(" ")
# #print(x)
# len_x=len("".join(total.split())) #原始字符串不包含空格的长度
# #print(len_x)
# num=len(x) #单词个数
# size=len(set(x))#元素个数
#求字母个数 求单词长度 求单词个数
#求单词个数
ans=input()
num=len(list(ans.split()))
#求单词长度
str1="".join(ans.split())
lens=len(str1)
#求字母个数
aph_num=len(set(str1))
print("{},{:.2f}".format(num,lens/num))
艹,一开始想复杂了
看清题目就好
str1=input()
x=int(str1)
def fun_len(n):
len=0
sum=0
while n!=0:
len+=1
sum+=int(n)%10
n //= 10
return [len,sum]
s=fun_len(x)
print(s[0],s[1])
哈哈哈,python可以返回两个参数,666
#正确代码示例:
num = float(input())
while True:
num*=num
print("{}".format(num ))
if num <= 50:
break
num = float(input())
#错误代码示例:
#对23
# num = eval(input())
# while True:
# num*=num
# print("{}".format(num ))
# if num <= 50:
# break
# num = eval(input())
# #对23
#这是原先的代码
eval()有坑,但是我没找到
这道题目全部用float,千万不要用eval,问老师老师不给样例QAQ...