2_1.答辩2
import array
import random
def set1(nums):
nums = list()
for i in range(0, 12):
num = random.randint(1, 99)
nums.append(num)
return nums
def addNum0(nums):
count = 1
i = 0
while (count <= 12):
if (nums[i] % 2 == 0):
nums.insert(i+1, 100)
count += 1
i += 2
elif (nums[i] % 2 == 1):
count +=1
i += 1
def addNum1(nums):
count = 1
i = 0
while (count <= 12):
if (nums[i] % 2 == 1):
nums.insert(i, 1)
count += 1
i += 2
elif (nums[i] % 2 == 0):
count += 1
i += 2
def main():
nums = list()
nums = set1(nums)
print(nums)
addNum0(nums)
print(nums)
addNum1(nums)
print(nums)
if __name__ == '__main__':
main()
2_2.链表
import random
# 定义节点
class Node(object):
def __init__(self, num):
self.num = num
self.next = None
# 构造链表
class LinkedList:
# 判断是否为空
def is_empty(self):
return self._head == None
# 单向链表初始化
def __init__(self, node=None):
# 判断node是否为空
if node != None:
headNode = Node(node)
self._head = headNode
else:
self._head = node
# 尾部添加
def append(self, item):
# 将传入的值构造成节点
node = Node(item)
if self.is_empty(): # 单链表为空
self._head = node
else: # 单链表不为空
curNode = self._head
while curNode.next != None:
curNode = curNode.next
# 前往下一节点,直到最后一个节点
curNode.next = node
# 遍历链表
def travel(self):
curNode = self._head
while curNode.next != None:
print(curNode.num, end='\t')
print("->", end='\t')
curNode = curNode.next
print("")
# 在每个node后添加100或1node
def addNew(self):
curNode = self._head
while curNode.next != None:
if (curNode.num % 2 == 0):
node = Node(100)
node.next = curNode.next
curNode.next = node
curNode = curNode.next.next
else:
node = Node(curNode.num)
curNode.num = 1
node.next = curNode.next
curNode.next = node
curNode = curNode.next.next
def main():
node = LinkedList(None)
print("是否为空链表:", node.is_empty())
for i in range(0, 12, 1):
num = random.randint(1, 100)
node.append(num)
node.travel()
node.addNew()
node.travel()
if __name__ == '__main__':
main()
3.
import random
def main():
num1 = random.randint(0, 15) # random.randint(a,b)获得一个从a到b之间的一个int型随机数
# print(num)
num2 = random.random() # 获得[0.0,1.0)之间的浮点数
# print(num2)
num3 = random.uniform(5, 10) # random.uniform(a,b) 获得[a,b]或[a,b)之间的一个浮点数(a,b大小顺序不限)
# print(num3)
list1 = list(range(10))
# print(list1)
#random.shuffle(list1) # random.shuffle(list1) 将一个有序的可变数据类型打乱,无返回值,改变的是迭代体本身
# print(list1)
list2 = random.sample(list1,5) #从一个可哈希的序列或集合中,返回长度为x的一个列表,如果x的长度大于序列或集合,会报 ValueError 错误。如果序列中的元素有重复,那么返回的列表中元素也可能会重复
#print(list2)
list3 = random.randrange(1,101,2) # 获得从start到stop之间跨度为step的一个数 {1,3,5,7,9,……,101}
#print(list3)
if __name__ == '__main__':
main()
4.1
# 导入模块
from sympy import *
# 将变量符号化
x = Symbol('x')
y = Symbol('y')
z = Symbol('z')
# print(((x + y + z) ** 2).expand()) # 展开方程
# print(factor(x ** 2 + 2 * x * y + y ** 2)) # 折叠方程
# print(together(1 + 2 / (x - 1))) # 合并正式
# print(trigsimp(sin(x) / cos(x))) #三角简化
# print(powsimp(x ** 2 * x ** 4)) # 指数简化
# solve()解方程
l1 = solve(x * 3 - 6, x) # 答案为数组
# print(l1)
l2 = solve([2 * x - y - 3, 3 * x + y - 7], [x, y])
# print(l2)
# limit() 求极限
limit(1 / x, x, 00, dir='+') # 求极限
# print(limit(1 / x, x, 00, dir='+'))
# print(limit(1 / x, x, 00, dir='+'))
# integrate() 不定积分
# print(integrate(sin(x), x))
# 定积分
# print(integrate(sin(x), (x, 0, pi / 2)))
# diff() 求导
print(diff(x ** 3, x))
print(diff(x ** 3, x, 2)) # 多阶导数
# dsolve() 解微分方程
f = Function('f')
dsolve(diff(f(x), x) - 2 * f(x) * x, f(x))
print(dsolve(diff(f(x), x) - 2 * f(x) * x, f(x)))
4.2
import numpy as np
from scipy.optimize import minimize
# 目标函数
def objective(x):
return x[0] * x[3] * (x[0] + x[1] + x[2]) + x[2]
# 约束条件x1*x2*x3*x4>=25转换成不等式约束表示形式
def constraint1(x):
return x[0] * x[1] * x[2] * x[3] - 25
# 约束条件x1^2 + x2^2 + x3^2 + x4^2 = 40
def constraint2(x):
return x[0] ** 2 + x[1] ** 2 + x[2] ** 2 + x[3] ** 2 - 40
# 边界 1<=xi<=5
bounds1 = [(1, 5), (1, 5), (1, 5), (1, 5)]
# 约束为dict类型
con1 = {'type': 'ineq', 'fun': constraint1}
con2 = {'type': 'eq', 'fun': constraint2}
constraints = ([con1, con2])
# 初始猜测值
x0 = [1.0, 4.74, 3.82, 1.38]
# 调用求解器
sol = minimize(objective, x0, method='SLSQP', bounds=bounds, constraints=constraints)
print(f'最小值为:{sol.fun}')
print(f'使得函数取得最小值的x1,x2,x3,x4分别为:{sol.x}')
pta
import math
l = list()
L = list()
s = list()
s = str(input()).split()
for i in range(0, int(s[1])):
l.append(str(input()).split())
# print(l)
for m in range(0, len(l)):
for k in range(m + 1, len(l)):
if (int(l[m][0]) == int(l[k][0])):
l.pop(m)
# print(l)
# 找最后一位
for n in range(0, len(l)):
if (l[n][2] == "-1"):
L.append(l[n])
# 排序
while len(L) < len(l):
for i in range(0, len(l)):
if (l[i][2] == L[0][0]):
L.insert(0, l[i])
# print(L)
l0 = list() # 地址
for i in range(0, len(L)):
l0.append(L[i][0])
# print(l0)
l1 = list() # 数据
for i in range(0, len(L)):
l1.append(int(L[i][1]))
# print(l1)
ll11 = list()
for i in range(0, len(l1)):
ll11.append(int(math.fabs(l1[i])))
# print(ll11)
l2 = list() # 指向
for i in range(0, len(L)):
l2.append(L[i][2])
# print(l2)
ll1 = list()
LL2 = list()
# print(LL2)
ll2 = int("0")
LL3 = list()
ll3 = int("0")
for i in range(0, len(ll11)):
if (ll11[i] not in ll1):
ll1.append(int(ll11[i]))
LL2.append([])
LL2[ll2].append(l0[i])
LL2[ll2].append(l1[i])
LL2[ll2].append(l2[i])
ll2 += 1
else:
LL3.append([])
LL3[ll3].append(l0[i])
LL3[ll3].append(str(l1[i]))
LL3[ll3].append(l2[i])
ll3 += 1
# print(ll1)
# print(LL2)
# print(LL3)
for i in range(1, len(LL2)):
LL2[i][0] = LL2[i - 1][2]
if (i == (len(LL2) - 1)):
LL2[i][2] = "-1"
for i in range(1, len(LL3)):
LL3[i][0] = LL3[i - 1][2]
if (i == (len(LL3) - 1)):
LL3[i][2] = "-1"
for i in range(0, len(LL2)):
print(LL2[i][0], LL2[i][1], LL2[i][2])
for i in range(0, len(LL3)):
print(LL3[i][0], LL3[i][1], LL3[i][2])
"""
00100 5
99999 -7 87654
23854 -15 00000
87654 15 -1
00000 -15 99999
00100 21 23854
"""
# math.fabs
# print(int(math.fabs(-5)))
4.四则运算
import random
import time
def main():
ret1 = time.time()
count = [0, 0, 0, 0]
right = [0, 0, 0, 0]
count1 = count[0] + count[1] + count[2] + count[3]
while count1 <= 20:
falg = random.randint(0, 3)
if falg == 0:
result = jia()
elif falg == 1:
result = jian()
elif falg == 2:
result = cheng()
else:
result = chu()
question = input('请输入你的答案:(q退出):')
if question == str(result):
print('回答正确!')
count[falg] += 1
right[falg] += 1
elif question == 'q':
break
else:
print(result)
print('回答错误!')
count[falg] += 1
print("加法的正确率为%.2f%%" % ((right[0] / count[0]) * 100))
print("减法的正确率为%.2f%%" % ((right[1] / count[1]) * 100))
print("乘法的正确率为%.2f%%" % ((right[2] / count[2]) * 100))
print("除法的正确率为%.2f%%" % ((right[3] / count[3]) * 100))
while (True):
ret2 = time.time()
if ((ret2 - ret1) / 1000 / 60 >= 30):
print("抱歉,训练已超时!")
break
if (float("%.2f" % ((right[0] / count[0]) * 100)) < 60.00):
print("-----------")
print("加法专项训练")
count[0] = 0
right[0] = 0
for i in range(0, 10):
result = jia()
question = input('请输入你的答案:')
if question == str(result):
print('回答正确!')
count[0] += 1
right[0] += 1
else:
print('回答错误!')
count[0] += 1
elif (float("%.2f" % ((right[1] / count[1]) * 100)) < 60.00):
print("-----------")
print("减法专项训练")
count[1] = 0
right[1] = 0
for i in range(0, 10):
result = jian()
question = input('请输入你的答案:')
if question == str(result):
print('回答正确!')
count[1] += 1
right[1] += 1
else:
print('回答错误!')
count[1] += 1
elif (float("%.2f" % ((right[2] / count[2]) * 100)) < 60.00):
print("-----------")
print("乘法专项训练")
count[2] = 0
right[2] = 0
for i in range(0, 10):
result = cheng()
question = input('请输入你的答案:')
if question == str(result):
print('回答正确!')
count[2] += 1
right[2] += 1
else:
print('回答错误!')
count[2] += 1
elif (float("%.2f" % ((right[3] / count[3]) * 100)) < 60.00):
print("-----------")
print("除法法专项训练")
count[3] = 0
right[3] = 0
for i in range(0, 10):
result = chu()
question = input('请输入你的答案:')
if question == str(result):
print('回答正确!')
count[3] += 1
right[3] += 1
else:
print('回答错误!')
count[3] += 1
else:
print("恭喜你完成训练!")
break
def jia():
op = ['+', '-', '×', '÷']
while(True):
a = random.randint(0, 100)
b = random.randint(1, 100)
if(a+b<100):
break
print('%d %s %d ' % (a, op[0], b))
return a + b
def jian():
op = ['+', '-', '×', '÷']
while(True):
a = random.randint(0, 100)
b = random.randint(1, 100)
if(a-b<100):
break
if(b > a):
a,b = b,a
print('%d %s %d ' % (a, op[1], b))
return a - b
def cheng():
op = ['+', '-', '×', '÷']
while(True):
a = random.randint(0, 100)
b = random.randint(1, 100)
if(a * b < 100):
break
print('%d %s %d ' % (a, op[2], b))
return a * b
def chu():
op = ['+', '-', '×', '÷']
while(True):
a = random.randint(0, 100)
b = random.randint(1, 100)
if(a/b < 100):
break
print('%d %s %d ' % (a, op[3], b))
return a + b
return "%.2f" % (a / b)
if __name__ == '__main__':
main()
计算器
import math
import tkinter as tk
def add_word(num):
if num == '=':
txt.replace('0.0','end',eval(txt.get('0.0', 'end'))) # 填充计算结果
elif num == 'c':
txt.delete('0.0','end')
else:
txt.insert('end', num) # 添加按钮输入内容
def handler(fun,num):
return lambda : fun(num)
window = tk.Tk()
window.title("计算器")
text_arr=['(',')','**','c','7','8','9','+','4','5','6','-','1','2','3','*','.','0','=','/']
btn_lie,btn_w,btn_h,padding,space,th = 4,75,45,20,10,100 # 按钮列数、按钮宽度、高度、页面边距、按钮间边距、文本框高度
btn_hang = math.ceil(len(text_arr)*1.0/btn_lie) # 按钮行数向上取整
window.geometry("%sx%s" % (btn_w*btn_lie + padding*2 + space*(btn_lie-1), th + btn_h*btn_hang + padding*3 + space*(btn_hang-1)))
txt = tk.Text(window,font=50)
txt.place(x=padding,y=padding,width=btn_w*btn_lie+space*(btn_lie-1),height=th)
for i in range(0,len(text_arr)):
row_index, col_index = (i % btn_lie), (i // btn_lie) # 行序号、列序号
btn = tk.Button(window, text=text_arr[i], command=handler(add_word, text_arr[i]))
#command确定点击执行程序
btn.place(x=padding+row_index*(btn_w+space), y=(th+padding*2)+col_index*(btn_h+space), width=btn_w, height=btn_h)
#确定组件相对布局
window.configure(bg='pink')
txt.configure(bg='white')
window.mainloop()