python作业

文章展示了如何使用Python的Tkinter库创建一个简单的计算器窗口程序,实现加减乘除等功能,并提供了计算水仙花数的代码示例。此外,还演示了读取和处理学生成绩文档,计算最高分、最低分和加权平均分,并按成绩进行排序。最后,给出了求解一元二次方程的程序。
摘要由CSDN通过智能技术生成

戴戴

1

第1题
结果
在这里插入图片描述

当编写一个简易计算器的窗口程序时,可以使用Python的图形用户界面(GUI)库来创建窗口并处理用户输入。在这个示例中,我们将使用Tkinter库来创建一个基本的计算器窗口,并实现加、减、乘、除、等于、指数函数和自然对数的功能。

首先,确保你已经安装了Tkinter库。如果没有,请使用以下命令安装:

pip install tkinter

下面是一个简单的计算器窗口程序的示例代码:

import math
from tkinter import *

def evaluate():
    """计算表达式的结果"""
    try:
        result = eval(entry.get())
        entry.delete(0, END)
        entry.insert(END, str(result))
    except:
        entry.delete(0, END)
        entry.insert(END, "Error")

def clear():
    """清除输入"""
    entry.delete(0, END)

def exponent():
    """计算指数函数"""
    try:
        result = math.exp(float(entry.get()))
        entry.delete(0, END)
        entry.insert(END, str(result))
    except: 
        entry.delete(0, END)
        entry.insert(END, "Error")

def natural_log():
    """计算自然对数"""
    try:
        result = math.log(float(entry.get()))
        entry.delete(0, END)
        entry.insert(END, str(result))
    except:
        entry.delete(0, END)
        entry.insert(END, "Error")

# 创建窗口
window = Tk()
window.title("简易计算器")

# 创建文本框
entry = Entry(window, width=25, borderwidth=5)
entry.grid(row=0, column=0, columnspan=4, padx=10, pady=10)

# 创建数字按钮
button_1 = Button(window, text="1", padx=20, pady=10, command=lambda: entry.insert(END, "1"))
button_2 = Button(window, text="2", padx=20, pady=10, command=lambda: entry.insert(END, "2"))
button_3 = Button(window, text="3", padx=20, pady=10, command=lambda: entry.insert(END, "3"))
button_4 = Button(window, text="4", padx=20, pady=10, command=lambda: entry.insert(END, "4"))
button_5 = Button(window, text="5", padx=20, pady=10, command=lambda: entry.insert(END, "5"))
button_6 = Button(window, text="6", padx=20, pady=10, command=lambda: entry.insert(END, "6"))
button_7 = Button(window, text="7", padx=20, pady=10, command=lambda: entry.insert(END, "7"))
button_8 = Button(window, text="8", padx=20, pady=10, command=lambda: entry.insert(END, "8"))
button_9 = Button(window, text="9", padx=20, pady=10, command=lambda: entry.insert(END, "9"))
button_0 = Button(window, text="0", padx=20, pady=10, command=lambda: entry.insert(END, "0"))

# 创建操作符按钮
button_add = Button(window, text="+", padx=20, pady=10, command=lambda: entry.insert(END, "+"))
button_subtract = Button(window, text="-", padx=20, pady=10, command=lambda: entry.insert(END, "-"))
button_multiply = Button(window, text="*", padx=20, pady=10, command=lambda: entry.insert(END, "*"))
button_divide = Button(window, text="/", padx=20, pady=10, command=lambda: entry.insert(END, "/"))
button_equal = Button(window, text="=", padx=40, pady=10, command=evaluate)

# 创建函数按钮
button_exponent = Button(window, text="exp", padx=20, pady=10, command=exponent)
button_log = Button(window, text="ln", padx=20, pady=10, command=natural_log)

# 创建清除按钮
button_clear = Button(window, text="Clear", padx=40, pady=10, command=clear)

# 将按钮放置在窗口上
button_1.grid(row=1, column=0)
button_2.grid(row=1, column=1)
button_3.grid(row=1, column=2)

button_4.grid(row=2, column=0)
button_5.grid(row=2, column=1)
button_6.grid(row=2, column=2)

button_7.grid(row=3, column=0)
button_8.grid(row=3, column=1)
button_9.grid(row=3, column=2)

button_0.grid(row=4, column=1)

button_add.grid(row=1, column=3)
button_subtract.grid(row=2, column=3)
button_multiply.grid(row=3, column=3)
button_divide.grid(row=4, column=3)

button_exponent.grid(row=4, column=0)
button_log.grid(row=4, column=2)

button_clear.grid(row=5, column=0, columnspan=2)
button_equal.grid(row=5, column=2,columnspan=2)
# 运行窗口
window.mainloop()

在这个示例中,我们创建了一个简单的计算器窗口,并使用Grid布局将按钮放置在正确的位置。使用lambda函数将按钮的点击事件与相应的操作关联起来,例如插入数字或操作符。evaluate函数用于计算表达式的结果,并在文本框中显示结果。clear函数用于清除文本框的内容。exponent函数计算指数函数的结果,natural_log函数计算自然对数的结果。

2

在这里插入图片描述
水仙花数(Narcissistic number)是指一个 n 位数(n≥3),它的每个位上的数字的 n 次幂之和等于它本身。例如,153 是一个水仙花数,因为 1^3 + 5^3 + 3^3 = 153。
结果
在这里插入图片描述

下面是一个用 Python 编程输出所有水仙花数的示例:

def is_narcissistic_number(num):
    # 将数字转换为字符串
    num_str = str(num)
    # 计算位数
    n = len(num_str)
    # 计算每个位上的数字的 n 次幂之和
    sum_of_powers = sum(int(digit) ** n for digit in num_str)
    # 判断是否为水仙花数
    return sum_of_powers == num

def print_narcissistic_numbers(start, end):
    for num in range(start, end + 1):
        if is_narcissistic_number(num):
            print(num)

# 输出所有的水仙花数(3位数到6位数)
print_narcissistic_numbers(100, 999999)

该代码定义了两个函数:is_narcissistic_number 用于判断一个数是否是水仙花数,print_narcissistic_numbers 用于输出指定范围内的所有水仙花数。在主程序中,我们调用 print_narcissistic_numbers 函数,并传入范围的起始和结束数字作为参数。这将输出所有的水仙花数,从3位数到6位数。

你可以根据需要修改起始和结束数字的范围来输出不同位数的水仙花数。

3

在这里插入图片描述
结果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

为了解决这个问题,你可以使用Python来读取并处理这两个文本文件。下面是一个示例代码,用于计算每个学生的最高分、最低分和加权平均分:

# 读取学生成绩文档
with open("学生成绩文档.txt", "r") as f:
    lines = f.readlines()

# 解析学生成绩文档
students = []
for line in lines[1:]:
    data = line.strip().split()
    student = {
        "学生姓名": data[0],
        "语文Chinese": float(data[1]),
        "数学Math": float(data[2]),
        "英语English": float(data[3]),
        "物理Physics": float(data[4]),
        "体育PE": float(data[5]),
        "劳动教育LE": float(data[6])
    }
    students.append(student)
# 读取课程的加权计算比例
with open("课程的加权计算比例.txt", "r") as f:
    lines = f.readlines()

# 解析课程的加权计算比例
weights = {}
titles = lines[0].strip().split()
values = lines[1].strip().split()
for title, value in zip(titles, values):
    weights[title] = float(value)
# 计算每个学生的最高分、最低分和加权平均分
for student in students:
    max_score = max(student["语文Chinese"],student["数学Math"],student["英语English"],student["物理Physics"],student["体育PE"],student[ "劳动教育LE"])
    min_score = min(student["语文Chinese"],student["数学Math"],student["英语English"],student["物理Physics"],student["体育PE"],student[ "劳动教育LE"])
    weighted_avg = sum(student[subject] * weights[subject] for subject in weights.keys())
    student["最高分"] = max_score
    student["最低分"] = min_score
    student["加权平均分"] = weighted_avg

# 打印结果
for student in students:
    print("姓名:", student["学生姓名"])
    print("最高分:", student["最高分"])
    print("最低分:", student["最低分"])
    print("加权平均分:", student["加权平均分"])
    print()

确保脚本文件与学生成绩等文本文档(下图)在同一个目录下。然后运行脚本文件,你将得到每个学生的最高分、最低分和加权平均分的输出结果。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
然后,按照每总评成绩输出同学排名

# 按照最高分排序
sorted_students_by_max = sorted(students, key=lambda x: x["最高分"], reverse=True)
print("按照最高分排名:")
for i, student in enumerate(sorted_students_by_max):
    print(f"{i+1}. {student['学生姓名']}")

print()

# 按照最低分排序
sorted_students_by_min = sorted(students, key=lambda x: x["最低分"])
print("按照最低分排名:")
for i, student in enumerate(sorted_students_by_min):
    print(f"{i+1}. {student['学生姓名']}")

print()

# 按照加权平均分排序
sorted_students_by_avg = sorted(students, key=lambda x: x["加权平均分"], reverse=True)
print("按照加权平均分排名:")
for i, student in enumerate(sorted_students_by_avg):
    print(f"{i+1}. {student['学生姓名']}")

这段代码会首先按照最高分进行排序,然后按照最低分和加权平均分分别进行排序。接下来,它会逐个输出按照不同排序方式排名的学生名单。请运行代码,你将会看到按照最高分、最低分和加权平均分输出的同学排名结果。

加权平均分大于90分为优秀等级,按成绩从高到低输出优秀同学的名单。

# 按照加权平均分排序,并筛选加权平均分大于90的学生
sorted_students_by_avg = sorted([student for student in students if student["加权平均分"] > 90], key=lambda x: x["加权平均分"], reverse=True)
print("优秀同学名单(按加权平均分从高到低):")
for i, student in enumerate(sorted_students_by_avg):
    print(f"{i+1}. {student['学生姓名']}")

4

在这里插入图片描述
结果
因为题目是-b,这里把结果展 把 - 号写在了设定b的值里,这里是懒得重新截图了
不过后面代码做了下变换
在这里插入图片描述
在这里插入图片描述


在这里插入图片描述
在这里插入图片描述


在这里插入图片描述
在这里插入图片描述


以下是使用Python编写的一元二次方程求解程序:

import math

def quadratic_equation_solver(a, b, c):
    discriminant = b**2 - 4*a*c
    if discriminant > 0:
        x1 = (-b + math.sqrt(discriminant)) / (2*a)
        x2 = (-b - math.sqrt(discriminant)) / (2*a)
        return x1, x2
    elif discriminant == 0:
        x = -b / (2*a)
        return x
    else:
        return None

####### 设置方程的系数#########
a = 2
b = -7
c = 3

# 系数b变换
b=-b

# 求解方程
solutions = quadratic_equation_solver(a, b, c)

# 输出结果
if solutions is None:
    print("方程无实数解")
elif isinstance(solutions, tuple):
    x1, x2 = solutions
    print(f"方程的两个实数解为: x1 = {x1}, x2 = {x2}")
else:
    x = solutions
    print(f"方程的唯一实数解为: x = {x}")

在上述代码中,我们定义了一个名为quadratic_equation_solver的函数,它接受三个参数a,b和c,分别代表一元二次方程的系数。函数首先计算判别式(discriminant),然后根据判别式的值进行条件判断:

如果判别式大于0,则方程有两个不同的实数解,分别计算并返回两个解;
如果判别式等于0,则方程有一个实数解,计算并返回该解;
如果判别式小于0,则方程无实数解,返回None。
接下来,我们设定了方程的系数a,b和c的值为2,-7和3。然后调用quadratic_equation_solver函数求解方程,并根据返回结果进行相应的输出。

你可以根据需要修改方程的系数,并测试其他的计算结果。

5

在这里插入图片描述
结果
在这里插入图片描述

要使用Python绘制曲线并填充颜色,可以使用Matplotlib库。下面是一个示例代码,用于绘制曲线 y = -(x - 8)^2 + 600,并将该区域填充为蓝色:
要计算该曲线下方区域的面积,可以使用数值积分的方法。在Python中,可以使用SciPy库中的quad函数进行数值积分。

import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import quad

# 定义函数 y = -(x - 8)^2 + 600
def f(x):
    return -(x - 8)**2 + 600

# 计算区间 [0, 24] 内的曲线下方区域的面积
area, _ = quad(f, 0, 24)

# 输出计算结果
print("曲线下方区域的面积为:", area)

# 绘制曲线和填充区域
x = np.linspace(0, 24, 100)
y = f(x)
plt.plot(x, y, color='black')
plt.fill_between(x, y, color='blue')
plt.title("曲线 y = -(x - 8)^2 + 600")
plt.xlabel("x")
plt.ylabel("y")
plt.show()

good luck

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值