pycharm在有代码处可以加断点
点击debug 甲虫标志后即可运行,左侧可以选择文件
NO.14 去重+排序
a=[1,4,3,21,3,4,15]
t=list(set(a)).sort()
t
NO.15
一个易错点:在对一个数仅查找一次时,加上bool索引且一旦匹配就应该break,防止接着匹配
布尔型变量的匹配
if bool_var
if not bool_var
def is_str_equal(str1,str2):
if len(str1)!=len(str2):
return False
length_str2=len(str2)
bool_str2=[True]*length_str2
for i in str1:
flag=False
for j in range(length_str2):
if(bool_str2[j]):
if str2[j]==i:
bool_str2[j]=False
flag=True
#print(flag)
print(i)
break
print(flag)
if not flag:
print("run there")
return False
return True
- ==是对值判断,is是对id进行判断
NO.16 随机矩阵以及转置
矩阵再理解,维度是向量里的参数个数
python里都是行向量的概念,一般的shape[0]未矩阵的行的个数
numpy中的random
import numpy as np
import random
np里的random.rand(x,y)
np里的random.randint(a,b,(x,y))
具体示例
import numpy as np
print(np.random.rand(4,5))
print(np.random.randint(2,4,(3,4)))
输出如下
[[0.24339799 0.44274717 0.50422167 0.47575132 0.40122367]
[0.86733814 0.99626793 0.95559074 0.27959164 0.69695999]
[0.43087412 0.29731663 0.92051722 0.79591298 0.71303126]
[0.60939638 0.56888583 0.82017134 0.01018477 0.79773632]]
[[2 2 3 3]
[3 3 2 2]
[2 3 3 2]]
NO.17 二维数据的行排序
排序+lamda表达式
score_table=[['张飞',78,75],['李大刀',92,67],['李默白',50,50],['雷军',99,98]]
def print_sort(score_table):
sorted_score=sorted(score_table,key=lambda x:x[1]+x[2],reverse=True)
for i in range(len(sorted_score)):
print('姓名',sorted_score[i][0],' 总分',sorted_score[i][1]+sorted_score[i][2])
print_sort(score_table)
绝对路径不加'./' 直接'C:'
lambda表达式key=x,是对总的列表中的元素而言的
如x=list则key=实对x[i]而言的,故key=lambda x:x[1]+x[2]是对元素的第一个维度和第二个维度的和进行排序的
NO.18 生成幻方
幻方的数学规律是:
(贪吃蛇规律,左出右进,上出下进)
- 第一个1在第一列中间
- 下一个在第一个的相邻左上位置
- 若左上位置有数,则选择该数字的正下相邻位置
1 :设置行和列变量,使用从1到n**2的循环
2:左加可以直接除余,而上减则要判断是否达到“-1”
3:设置两个变量,pre_保存之前的值,先初始化一个-1矩阵,用来判断有没有被更新,若已被更新则使用之前的值来进行下一步操作
矩阵输出不好看 可以拆分生行向量依次输出
def print_magic_matrix(n):
col=0
line=n//2
x=[[-1 for i in range(n)]for j in range(n)]
#x[pre_col][pre_line]=1
i=1
while(i<=n**2):
x[col][line]=i
pre_col=col
pre_line=line
col=pre_col-1
line=(pre_line+1)%n
if col==-1:
col=n-1
if(x[col][line]!=-1):
col=(pre_col+1)%n
line=pre_line
i+=1
for i in range(len(x)):
print(x[i])
NO.19 二次函数求解,公式法求解
在一个括号内可以换行,绝对值函数是系统函数,不需要包调用
def seek_value(t):
if t[0]==0:
print("无效参数a")
return;
is_R=t[1]**2-4*t[2]*t[0]
print(is_R)
change_part=math.sqrt(abs(is_R))
if(is_R>=0):
print('根1{:10.5f}\n根2{:10.5f}'.format((-t[1]+change_part)/(2*t[0]),
(-t[1]-change_part)/(2*t[0])))
else:
print('根1{:10.5f}+{:9.5f}i'.format(-t[1]/(2*t[0]),change_part/(2*t[0])))
print('根1{:10.5f}-{:9.5f}i'.format(-t[1]/(2*t[0]),change_part/(2*t[0])))
t=[]
for i in range(3):
funVar=float(input("请输入参数"))
t.append(funVar)
NO.20 三角形的面积和周长
遇到的精度损失问题如何解决
海伦公式,p为半周长def square_areaAndperimeter(t):
l1=math.sqrt((t[1][1]-t[0][1])**2+(t[1][0]-t[0][0])**2)
l2=math.sqrt((t[1][1]-t[2][1])**2+(t[1][0]-t[2][0])**2)
l3=math.sqrt((t[2][1]-t[0][1])**2+(t[2][0]-t[0][0])**2)
if l1+l2<=l3 or l1+l3<=l2 or l2+l3<=l1:
print("ERROR,不能构成三角形")
return
perimeter_tri=l1+l2+l3
half_p=perimeter_tri/2
square_area=math.sqrt(half_p*(half_p-l1)*(half_p-l2)*(half_p-l3))
return perimeter_tri,square_area
peri_tri,area_tri=square_areaAndperimeter(t)
疑问,精度损失如何解决
NO.21 某点是否在确定的圆内
for i in range(3):
if i==1:
radius=float(input("please input radius"))
else:
t.append([float(i) for i in input("请输入点坐标,例如3,2").split(',')])
def is_inCircle(t,radius):
point_distance=math.sqrt((t[1][0]-t[0][0])**2+(t[1][1]-t[0][1])**2)
if point_distance<= radius:
return True
else:
return False
is_inCircle(t,radius)
输出
t
radius=0
[[1.0, 1.0], [0.0, 0.0]]
False
NO 22数字的问题,数字长度用str的len处理比较好
逆转字符串用切片比较好
digit_str=input("请输入一个不超过五位数的数字")
print("数字位数是{}".format(len(digit_str)))
for i in digit_str:
print(i)
print(digit_str[::-1])
NO.23
#没有选择嵌套,只好选择了sort函数
for i in range(3):
t.append(float(input("please input the number")))
t.sort()
NO.24分支结构
def caculate_money(start_money):
w=10000
if start_money<10*w:
print(start_money*1.015)
elif start_money<50*w:
print(start_money*1.02)
elif start_money<100*w:
print(start_money*1.03)
else:
print(start_money*1.035)
NO.25
正则表达式是两个字符串之间的匹配,不需要compile出正则对象
可以使用r'[a-zA-Z]'表示所有字母
import re
def transAndJudge(i):
if re.match(r'[a-zA-z]',i):
print("true")
else:
print("false")
return
if i.isupper():
i=i.lower()
print(i)
else:
i=i.upper()
print(i)
i='1'
transAndJudge(i)
NO.26 打点图题
解决该类规律简单 题 重要的是在草纸上画出图形,找规律
同时可以利用字符串的乘法原理
def print_equal_tri(i):
n=2*i-1
mid=n//2
for j in range(i):
print(" "*(mid-j),"*"*(2*j+1))
print_equal_tri(7)
输出
*
***
*****
*******
*********
***********
*************
NO.27乘法表打印,要点,print 中end='\t'可实现自动对齐,而print()实现换行
def multi_table(i):
n=len(str(i))
print('',end="\t")
for j in range(1,i+1):
print(j,end='\t')
print()
for j in range(1,i+1):
print(j,end='\t')
for k in range(1,j+1):
print(j*k,end='\t')
print()
multi_table(9)
输出
“%10d”%i也可以实现对齐
对于长度不固定的输出方式print(“%*s”%(len,A))
其中*表示len指定长度
NO.28 六边形的输出 仿照三角形的做题规则,一般在纸上画图比较好
从状态a==k开始随着a的增大,结果result减小,a+=1
则结果result+=k-a
def print_six_edge(i):
for j in range(1,2*i):
if j<=i:
print(" "*(i-j),"* "*(i+j-1))
else:
print(" "*(j-i),"* "*(3*i-1-j))
print_six_edge(5)
输出,该行和相邻行对应的是空格
* * * * *
* * * * * *
* * * * * * *
* * * * * * * *
* * * * * * * * *
* * * * * * * *
* * * * * * *
* * * * * *
* * * * *
NO.29关于数字的瑕疵
format在任何时候都可以使用,在input时也可以格式化输出
不好的地方,使用match匹配,不如使用isdigit()
重复该操作时应该想到递归
def sub_sum_n(t):
cnt=0
for i in range(1,t+1):
cnt+=int(input("please input number {}".format(i)))
print("sum = {}".format(cnt))
def sum_n():
this_str=input("请输入n=数字,样例输入:n=10")
regex=re.compile(r'n=(.+)')
t=regex.findall(this_str)[0]
flag=True
for i in t:
if not re.match(r'[0-9]',i):
flag=False
if flag:
t=eval(t)
if isinstance(t,int):
if t==0:
print("退出程序")
#return
else:
sub_sum_n(t)
sum_n()
else:
print("不是整数,请重新输入")
sum_n()
if not flag:
print("不是数字,请重新输入")
sum_n()
NO.30 素数
def is_prime(list_prime_index,list_prime,ma):
for j in range(2,ma+1):
if list_prime_index[j]:
list_prime.append(j)
for k in range(2,ma//j+1):
list_prime_index[j*k]=False
def print_prime(list_prime):
n=len(list_prime)
for i in range(n):
if i!=n-1:
print(list_prime[i],end=',')
else:
print(list_prime[i],end='')
list_prime.clear()
prime_len=int(input("please input the maximum number"))
list_prime_index=[True]*(prime_len+5)
list_prime=[]
is_prime(list_prime_index,list_prime,prime_len)
print_prime(list_prime)
#输出 2,3,5,7,11,13,17,19
NO.31循环求值
a=input("请输入a的值")
n=int(input("请输入n的值"))
ans,cnt=0,""
for i in range(n):
cnt+=a
print(cnt)
ans+=int(cnt)
print(ans)
输出
请输入a的值2
请输入n的值6
2
22
222
2222
22222
222222
246912
pta非零返回,最好不用序列解包
使用map进行统一的格式映射,不用列表推导式
n, m = map(int, input().split())
pta 1008,字符串.join(列表)
n, m = map(int, input().split())
s =input().split(' ')
for i in range(m):
s.insert(0, s[-1]) ##insert()指定位置插入元素
s.pop() ##pop()指定位置弹出元素,默认弹出最后一个元素(index=-1)
print(" ".join(s))
No.32
矩阵的输入与相加,先使用一维的向量相加,再使用切片切成矩阵
def my_input():
n=int(input("please input the number of row"))
m=int(input("please input the number of columns"))
list1,list2,list3=[],[],[]
t1=0
while(t1<n):
for j in range(m):
list1.append(int(input("please input A[{},{}]".format(t1,j))))
t1+=1
t2=0
while t2<n:
for j in range(m):
list2.append(int(input("please input B[{},{}]".format(t2,j))))
t2+=1
t3=0
while(t3<n*m):
list3.append(list1[t3]+list2[t3])
t3+=1
return [list3[i:i+m] for i in range(0,len(list3),m)]
print(my_input())
输出效果
网友评论