目录
- 上机常用代码
- (1) 输入代码
- (2) 矩阵乘法 (np.dot(A, B))
- (2.2) 矩阵转置
- (2.3) 获得矩阵对角线元素
- (3) 生成 nxn 的 空矩阵
- (4) 字典排序
- (5) 统计列表中所有元素出现的频率
- (6) list和set相互转换
- (7) 列表转整数
- (8) 数字字符串 转整数
- (9) 读取二进制文件
- (9.1) 读二进制文件
- (10) 判断素数 和 埃氏筛选法
- (11) 最大公约数
- (12) format格式化输出
- (13) 全排序
- (13) 插入排序
- (14) 删除list里面的重复元素 (位置不变)
- (15) 遍历列表时删除元素的正确做法
- (16) 集合操作
- (17) 分割连续字符串
- (18) 用 字符串 分割字符串
- (19) maketrans, translate 【字符串对应地转换】
- (20) 日期计算
- (21) 方差
- 苏大python习题
- 苏大真题[2005-2019]
- 2005. 把一个数表示成若干个素数的和.
- 2005.2 统计篇文章中各英文字母的个数,并排序.
- 2006. 找出 100 到 1000 内的不含 9 的素数,存到 result 文件中.
- 2007. 素数
- 2008. 文件读取字符串,排除The
- 2009. 文件读取字符串,转数字【八进制/十进制】
- 2010. 读取二进制文件 以及筛选素数
- 2011. 筛选素数
- 2012. 读取二进制文件 以及 左标
- 2013. 图论:两顶点间存在长度为k的路径
- 2014. 坐标距离
- 2015. 二进制坐标距离
- 2016. 词频统计
- 2017. 坐标问题
- 2016. 保研 查字典匹配句子
- 2018. 真题 最大公约数
- 2018. 保研
- 2019. 真题 因子拆分
- 2019. 保研 正则表达式拆分字符串
- 2016. 期中考试 提取字符串 坐标问题
- 2017. 期中考试
- 2018. 期中考试
- 期末考试
- 苏州大学python课程组习题
- 1. 因子和
- 2. 反素数
- 3. 梅森素数
- 4. 加密函数
- 5. 正则表达式
- 6. 正则表达式 findall
- MOOC测验
上机常用代码
(1) 输入代码
(2) 矩阵乘法 (np.dot(A, B))
def matrixMul(A, B):
if len(A[0]) == len(B): # A列数=B行数
res = [[0] * len(B[0]) for i in range(len(A))] # 生成 A行 x B列 的0矩阵
for i in range(len(A)):
for j in range(len(B[0])):
for k in range(len(B)):
res[i][j] += A[i][k] * B[k][j]
return res
return ("输入矩阵有误!")
matrixMul(mat1, mat2)
Out[13]: [[19, 22], [43, 50]]
mat1
Out[14]: [[1, 2], [3, 4]]
mat2
Out[15]: [[5, 6], [7, 8]]
(2.2) 矩阵转置
matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
list(zip(*matrix))
Out[34]: [(1, 5, 9), (2, 6, 10), (3, 7, 11), (4, 8, 12)]
matrix
Out[42]: [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
[[row[i] for row in matrix] for i in range(4)]
Out[43]: [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
(2.3) 获得矩阵对角线元素
(1) 从左下向右上的对角线
B = [[0]*m for i in range(2*m-1)]
row = 2*m - 1
dic = collections.defaultdict(list)
for i,j in itertools.product(range(m), range(m)):
dic[i - j].append(A[m-i-1][j])
# 法2
def nextitem():
for j in range(2*m-1):
j = 0
while 0 <= i < m or 0 <= j < m:
if 0<=i<m and 0<=j<m:
yield A[i][j]
i -= 1
j += 1
nextnum = nextitem()
cur = 1
for i in range(2*m-1):
for j in range(cur):
B[i].append(next(nextnum))
B[i].extend([0]*(m-cur))
if i < m - 1:
cur += 1
else:
cur -= 1
return B
(2) 从左上向右下的对角线
B = [[0]*m for i in range(2*m-1)]
row = 2*m - 1
dic = collections.defaultdict(list)
for i,j in itertools.product(range(m), range(m)):
dic[i - j].append(A[i][j])
# 法2
m, n = len(mat), len(mat[0])
tmp = []
for line in range(m+n-1):
i, j = m-1-line, 0
tmp.clear()
while j < n:
if 0 <= i < m and 0 <= j < n:
tmp.append(mat[i][j])
i += 1
j += 1
print(tmp)
(3) 生成 nxn 的 空矩阵
# 生成 nxn 的 空矩阵
res = [[] for i in range(0, n)]
(4) 字典排序
# 按value排序(降序),如果value相同则按key排序(字典序升序)
freq = sorted(freq.items(), key=lambda x:(-x[1], x[0]))
(5) 统计列表中所有元素出现的频率
from collections import Counter
a = "i love love you you"
dict( Counter(list(a.split())) )
Out[103]: {'i': 1, 'love': 2, 'you': 2}
或者:
from collections import defaultdict
frequences = defaultdict(int)
print(frequences)
Out[37]: defaultdict(int, {})
for e in a.split():
frequences[e] += 1
frequences
Out[39]: defaultdict(int, {'i': 1, 'love': 2, 'you': 2})
s + t - s
Out[112]: Counter({'c': 1, 'b': 2, 'a': 1, 'd': 1})
list((s + t - s).elements())
Out[115]: ['c', 'b', 'b', 'a', 'd']
(6) list和set相互转换
set([1,2,3,4,4,5,5])
{1,2,3,4,5}
list(set([1,2,3,4,5,5]))
[1,2,3,4,5]
(7) 列表转整数
a = [1,2,3]
int("".join(list(map(str, a))))
Out[109]: 123
(8) 数字字符串 转整数
int('0e00', 16) # 按照16进制转换成10进制
int('001', 2) # 按照二进制方式转换成10进制
int('012', 8) # 按照八进制方式转换成10进制
(9) 读取二进制文件
def main():
res = [random.randrange(0, 9999, 1) for i in range(0, 32)]
# print(res)
# with open('./file/2010.txt', 'rb+') as f:
# for i in res:
# s = struct.pack('i', i)
# f.write(s)
# 写多少数据,一定要弄清楚
len1 = len(res)
nums = []
with open('./file/2010.txt', 'rb+') as f:
for i in range(len1):
data = f.read(4)
elem = struct.unpack('i', data)[0]
nums.append(elem)
# 按照 16进制 转换成 10进制
nums.sort(reverse=True)
print("数据:", nums)
(9.1) 读二进制文件
def read_data():
data = []
with open('./file/file_2017_2.txt', 'rb') as f:
num = f.read(4)
while num:
data.append(int.from_bytes(num, byteorder='little'))
num = f.read(4)
return data
(10) 判断素数 和 埃氏筛选法
def is_prime(num):
if num < 2:
return False
top = int(math.sqrt(num))
i = 2
while i <= top:
if num % i == 0:
return False
i = i + 1
return True
# 埃氏筛选法
def judge():
n = int(input())
res = 0
is_prime = [True]*(n+1)
is_prime[0] = is_prime[1] = True
# 筛选出所有素数
primes = []
for i in range(2, n+1):
if is_prime[i]:
primes.append(i)
j = 2*i
while j <= n: # 将 i 的倍数全部划去
is_prime[j] = False
j += i
for i in range(2, n - 1):
if is_prime[i] and is_prime[i+2]:
res += 1
print(res)
judge()
(11) 最大公约数
def gcd(num1, num2):
if num1 < num2:
num1, num2 = num2, num1
while (num1 % num2):
temp = num1 % num2
num1 = num2
num2 = temp
return num2
(12) format格式化输出
for i in range(0, wlen):
print('{0:8}'.format(ascii_words[i]), end='')
if (i+1) % 10 == 0:
print('')
(13) 全排序
def permute(L):
if not L:
return [L]
else:
res = []
for i in range(len(L)):
# 任一元素 + 剩余n-1个元素的全排序
rest = L[:i] + L[i+1:]
for x in permute(rest):
res.append(L[i:i+1] + x)
return res
permute([1,2,3])
Out[9]: [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]]
或者:
def perm(L, cur):
if cur == 3:
print(L)
return
for i in range(1, 4):
if not vis[i]:
L[cur] = i
vis[i] = True
perm(L, cur + 1)
vis[i] = False
L = [0 for i in range(0, 3)]
vis = [0 for i in range(0,10)]
perm(L, 0)
[1, 2, 3]
[1, 3, 2]
[2, 1, 3]
[2, 3, 1]
[3, 1, 2]
[3, 2, 1]
(13) 插入排序
# -*- coding: utf-8 -*-
import random
# 找插入位置,使L仍保持升序
def find_insert_index(L, t):
for i, x in enumerate(L):
if x > t:
return i
return len(L)
A = [random.randint(0, 100) for i in range(10)]
print(A)
L = []
for x in A:
i = find_insert_index(L, x)
L.insert(i, x)
print(L)
(14) 删除list里面的重复元素 (位置不变)
l1 = ['b','c','d','c','a','a']
l2 = sorted(set(l1),key=l1.index)
print(l2)
l1 = ['b','c','d','c','a','a']
l2 = []
for i in l1:
if not i in l2:
l2.append(i)
print(l2)
(15) 遍历列表时删除元素的正确做法
21.Python-遍历列表时删除元素的正确做法
遍历在新在列表操作,删除时在原来的列表操作
a = [1,2,3,4,5,6,7,8]
print(id(a))
print(id(a[:]))
for i in a[:]:
if i<5:
a.remove(i)
print(a)
print('-----------')
print(id(a))
(16) 集合操作
# 集合操作
a_set = set([1,2,3,4,7,8])
b_set = set([8,9,10,11,12,13])
print(a_set | b_set) # 并集
print(a_set.union(b_set)) # 并集
print(a_set & b_set) # 交集
print(a_set.intersection(b_set)) # 交集
print(a_set.difference(b_set)) # 差集
print(a_set - b_set)
print(a_set.symmetric_difference(b_set)) # 对称差
print(a_set ^ b_set) # 对称差
{1, 2, 3, 4, 7, 8, 9, 10, 11, 12, 13}
{1, 2, 3, 4, 7, 8, 9, 10, 11, 12, 13}
{8}
{8}
{1, 2, 3, 4, 7}
{1, 2, 3, 4, 7}
{1, 2, 3, 4, 7, 9, 10, 11, 12, 13} n0
{1, 2, 3, 4, 7, 9, 10, 11, 12, 13}
(17) 分割连续字符串
data = 'TTTTThhiiiis isssss a tesssst CAaaa as'
[i+j for i,j in re.findall(r'([a-zA-Z\s])(\1*)', data)]
Out[47]:
['TTTTT', 'hh', 'iiii', 's', ' ', 'i', 'sssss', ' ', 'a', ' ', 't', 'e', 'ssss', 't',' ','C','A','aaa',' ','a','s']
data = '5T2h4is i5s a3 te4st CA3a as10Z'
re.findall('(\d*)([a-zA-Z\s])', data)
Out[50]:
[('5', 'T'),('2', 'h'),('4', 'i'),('', 's'),('', ' '),('', 'i'),('5', 's'),('', ' '),
('', 'a'),('3', ' '),('', 't'),('', 'e'),('4', 's'),('', 't'),('', ' '),('', 'C'),
('', 'A'),('3', 'a'),('', ' '),('', 'a'),('', 's'),('10', 'Z')]
(18) 用 字符串 分割字符串
s = 'iloveappleclass'
s.partition('apple')
Out[80]: ('ilove', 'apple', 'class')
(19) maketrans, translate 【字符串对应地转换】
table = ''.maketrans('abcdef123', 'uvwxyz@#$')
s = 'Python is a greate programming language. I like it!'
s.translate(table)
Out[92]: 'Python is u gryuty progrumming lunguugy. I liky it!'
(20) 日期计算
def staytime(etc_info):
# 计算停留时间
# 2016-06-11#21:48:50 时间格式
in_time = datetime.datetime.strptime(etc_info[1], "%Y-%m-%d#%H:%M:%S")
out_time = datetime.datetime.strptime(etc_info[2].strip(), "%Y-%m-%d#%H:%M:%S")
delta = (out_time - in_time).seconds
(21) 方差
var = sum([(num - ave)**2 for num in nums]) / len(nums)
苏大python习题
1. 给定整数m和n,如果m和n都大于1,则判定m和n是否互质,并返回判定结果。
相关说明 | |
---|---|
输入条件 | 输入参数m和n是整数。大小关系未知。 |
输出要求 | 如果m和n中任何一个小于或等于1,则返回None,否则判定两数是否互质。 如果m和n互质,则返回布尔值True,否则返回布尔值False。 |
其他要求 | 将代码写入函数func1 |
测试用例:
输入 | 返回 |
---|---|
2,3 | True |
4,8 |