Python实训课答辩

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()

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值