(转)Python的“黑暗魔法”,两行解一元一次方程

无意看到一个大神写的《Linear equations solver in 3 lines (Python recipe)》,Python解一元一次方程只需要三行就完成了,确实很强悍啊。

我们来围观一下:

说到底呢,这个段代码的关键是利用了复数。
第一步:
2 * x + 233 = x * 8 + 3
变成
2 * x + 233 -(x * 8 + 3)
然后把x变成虚数1j
然后变成
2 * 1j + 233 -(1j * 8 + 3)
通过eval算出结果为230-6j
因为我们知道这个表达式结果为0,而且j也相当于x。
所以问题变成了:230-6j=0,也就是230-6x=0。
最后x = - 230 / 6 = 38.33333333336。

这里的核心是用到了Python的黑暗魔法eval,eval的第一个参数是表达式,第二个参数是命名空间,也就是把 x = 1j 通过第二个参数把一些值放进去。

神奇的求解函数:

def s(eq, var=‘x‘):
    r = eval(eq.replace(‘=‘, ‘-(‘) + ‘)‘, {var:1j})
    return -r.real / r.imag

本文链接:http://everet.org/2012/04/linear-equations-solvers-in-python.html
(转载时请注明作者和出处。)

时间: 2024-11-03 05:25:22

(转)Python的“黑暗魔法”,两行解一元一次方程的相关文章

Python 学习开发的两年后的反思

背景介绍 pyqt 客户端方案 C 和python 混合编程方案 纯python服务器解决方案 由于对服务器开发熟悉程度不高暂时未想到应用程序服务器的开发应用求指点 网络快速测试方案 学术研究 技术规划 反思 问题 背景介绍 三年的C++ windows 客户端的开发经验, 接触python也快有两年了. 记得最开始会选择接触python的原因是因为李开复老师的强烈推荐. 接触以后一直对python简洁的编程风格所倾倒.自己的C++ 编程风格和设计思路上受到python 的影响很大,因为这个原因

python实现快速排序算法(两种不同实现方式)

# -*- coding: utf-8 -*- """ Created on Fri May 16 17:24:05 2014 @author: lifeix """ #快速排序 import sys import random length = 30 def qsort(arr,left,right): lp = left rp = right if lp == rp:return while True: while arr[lp] >=

Python 引入包的两种方式区别

1.import XXX仅仅是告诉我们需要使用这个包,但是你真正使用的时候,需要完整的导入这个包的全路径 比如: import wechat.views 在使用其中的hello函数的时候,需要 wechat.views.hello - 这个路径不能简略 2.from ... import ...就不需要指定父的路径了 比如: from wechat.views import *    #你可以使用views内部的变量 你就可以直接使用其中的hello hello 但是如果: from wecha

Python科学计算(两)——时域波形和正弦信号的频谱

Python科学计算(两)-- 时域和频域波形为正弦波形信号生成.计算和显示 # -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as pl import matplotlib import math import random row = 4 col = 4 N = 500 fs = 5 n = [2*math.pi*fs*t/N for t in range(N)] axis_x = np.linspace(

Python实现屏幕截图的两种方式

Python实现屏幕截图有两种方式: 使用windows API 使用PIL中的ImageGrab模块 下面对两者的特点和用法进行详细解释. 一.Python调用windows API实现屏幕截图 好处是 灵活 速度快 缺点是: 写法繁琐 不跨平台 import time import win32gui, win32ui, win32con, win32api def window_capture(filename): hwnd = 0 # 窗口的编号,0号表示当前活跃窗口 # 根据窗口句柄获取

python遍历数组的两种方法的代码

工作过程中,把开发过程中较好的一些内容段备份一下,下面内容是关于python遍历数组的两种方法的内容,希望对小伙伴有用途. colours = ["red","green","blue"] for colour in colours: print colour # red # green # blue 下面的方法可以先获得数组的长度,然后根据索引号遍历数组,同时输出索引号 colours = ["red","gree

Python实现3行代码解简单的一元一次方程

Python实现3行代码解简单的一元一次方程 class Solution(object): def exec(self, equation): vars = None eqList = list(equation) denth = 0 for i,each in enumerate(equation): if each in "abcdefghijklmnopqrstuvwxyz": vars = each if i == 0: continue if equation[i-1] i

解一元一次方程

实际问题与一元一次方程 一般步骤:1.审.审清题意,   2.设.设未知数   3.列.根据等量关系列方程   4.解.解方程   5.答.写出答案 解一元一次方程一般步骤:   1.去分母   2.去括号   3.移项   4.合并同类项   5.化系数为1 题1:有一批零件加工任务,甲单独加工需要20小时,乙单独加工需要10小时,甲加工了一部分后另有任务,剩下的任务由乙单独完成,乙比甲少加工了5小时,求甲加工了几个小时? 设 甲加工了  (x+5)小时 乙加工了 x小时 x/10 + (x

python中的魔法方法

1.什么是魔法方法? 魔法方法就是可以给你的类增加魔力的特殊方法,如果你的对象实现(重载)了这些方法中的某一个,那么这个方法就会在特殊的情况下被 Python 所调用,你可以定义自己想要的行为,而这一切都是自动发生的.它们经常是两个下划线包围来命名的(比如 __init__,__lt__),Python的魔法方法是非常强大的,所以了解其使用方法也变得尤为重要! 2.__init__(self[, ...]),__new__(cls[, ...]),__del__(self) __init__ 构