精华内容
下载资源
问答
  • python 眼睛识别 我们可怜的眼睛,显然是我们灵魂的窗口,必须承受我们所生活的数字时代的冲击。我们凝视着计算机屏幕,这是我们日常工作和学习的一部分。 同时将我们粘贴到手机屏幕上也无济于事。 我喜欢戴眼镜,...

    python 眼睛识别

    我们可怜的眼睛,显然是我们灵魂的窗口,必须承受我们所生活的数字时代的冲击。我们凝视着计算机屏幕,这是我们日常工作和学习的一部分。 同时将我们粘贴到手机屏幕上也无济于事。

    我喜欢戴眼镜,从来没有人说过。 例外情况包括那些将其作为时尚宣言来使用的人,或者比密集型隐形眼镜更喜欢它的人。 与不戴眼镜相比,最糟糕的问题包括头痛,脖子疲劳和眼睛干燥。 我的视力是我对编程的热爱所付出的代价,但我知道我可以做得更好。

    Arif RiyantoUnsplash拍摄的照片

    尽管我相信仿生镜片将在未来得到完善和负担得起,但我们仍然需要保护我们的自然眼睛。 这里有一些简单的方法。

    遵循20–20–20规则。

    每隔20分钟,休息20秒钟,然后将视线聚焦在至少20英尺远的地方

    如果您是Windows 10用户,这是适合您的python通告程序。 如果您是Python的初学者,则此页面将帮助您入门。 安装python之后,安装模块win10Toast。 保存以下代码,然后在终端中运行它,它会提醒您遵循20–20–20规则。 您可以在show_toast()函数中自定义自己的消息标题和内容。

    这是代码,当您在20秒后返回时,漂亮的报价将等待您充满活力地重新开始工作。 这是引用文件的链接

    其他技巧包括:

    经常闪烁以避免眼睛干涩。

    定期测试您的眼睛,并使用正确的处方眼镜。

    将自己置于距离屏幕20–40英寸的距离。

    下载并使用f.lux使监视器的光线适应周围的环境。

    让我们按照上面的简单步骤操作,并拥有健康的眼睛。

    我的眼睛是海洋,我的梦想在其中得以体现……。
    Anna M. Uhlich。

    参考文献:

    https://www.huffingtonpost.com/lolly-daskal-/100-motivational-quotes-t_b_4505356.html
    http://wisdomquotes.com/inspirational-quotes/
    https://github.com/jithurjacob/Windows-10-Toast-Notifications

    翻译自: https://hackernoon.com/protect-your-eyes-with-python-f3e7e7b862f0

    python 眼睛识别

    展开全文
  • 让我们开始用 Python 探索数学与科学的世界。本章将从一些简单的问题开始,这样你就可以逐渐了解如何使用 ...启动 Python 3 的 IDLE 界面,键入print(‘Hello IDLE’),然后按 Enter 键,在屏幕上输出 Hello IDLE(...

    让我们开始用 Python 探索数学与科学的世界。本章将从一些简单的问题开始,这样你就可以逐渐了解如何使用 Python。首先是基础的数学运算,随后编写简单的程序来操作和理解数字。

    1 基本数学运算

    本书中,Python 交互界面将成为我们的朋友。启动 Python 3 的 IDLE 界面,键入print(‘Hello IDLE’),然后按 Enter 键,在屏幕上输出 Hello IDLE(见图 1-1)。关于如何安装 Python 并启动 IDLE 的说明,请参阅附录 A。IDLE 会按照输入的命令执行,并将单词输出到屏幕上。恭喜你,你刚刚已经编写了一个程序!

    当再次看到“>>>”提示时,IDLE 已准备好接收更多的指令。

    Python 可以像一个神奇的计算器那样进行简单的计算。只要输入一个表达式, Python 就会对它进行计算。按 Enter 键后,结果会立刻显示。

     

     

    1-1 Python 3 的 IDLE 界面

    试试看。你可以使用加法(+)和减法(−)运算符来加减数字。例如:

    
     
    1. >>> 1 + 2
    2. 3
    3. >>> 1 + 3.5
    4. 4.5
    5. >>> -1 + 2.5
    6. 1.5
    7. >>> 100 – 45
    8. 55
    9. >>> -1.1 + 5
    10. 3.9

     

    使用乘法运算符(*)进行乘法运算:

    
     
    1. >>> 3 * 2
    2. 6
    3. >>> 3.5 * 1.5
    4. 5.25

     

    使用除法运算符(/)进行除法运算:

    
     
    1. >>> 3 / 2
    2. 1.5
    3. >>> 4 / 2
    4. 2.0

     

    如你所见,当要求 Python 执行除法运算时,它也会返回数字的小数部分。

    如果希望结果为整数形式,则应该使用向下取整除法运算符(//):

    
     
    1. >>> 3 // 2
    2. 1

     

    向下取整除法运算符将第一个数字除以第二个数字,然后将结果向下取整到最接近的小的整数。当其中一个数字为负数时,这将变得有趣。例如:

    
     
    1. >>> -3 // 2
    2. -2

     

    最终结果是小于除法运算结果的整数(除法运算结果是−3/2 = −1.5,所以最终结果是−2)。

    另一方面,如果只需要余数,则应该使用模运算符(%):

    
     
    1. >>> 9 % 2
    2. 1

     

    可以使用指数运算符(**)计算数字的幂。下面的例子展示了这一点:

    
     
    1. >>> 2 ** 2
    2. 4
    3. >>> 2 ** 10
    4. 1024
    5. >>> 1 ** 10
    6. 1

     

    我们也可以使用指数运算符号计算指数小于 1 的幂。例如,n 的平方根可以表示

    n2/1,立方根表示为n3/1:

    
     
    1. >>> 8 ** (1/3)
    2. 2.0

     

    你也可以使用括号将数学运算式组合成更复杂的表达式。Python 会按照标准的 PEMDAS 规则评估表达式的计算顺序—括号、指数、乘法、除法、加法和减法。考虑以下两个表达式,一个没有括号,而另一个有括号:

    
     
    1. >>> 5 + 5 * 5
    2. 30
    3. >>> (5 + 5) * 5
    4. 50

     

    在第一个表达式中,Python 首先计算乘法:5 乘以 5 等于 25;25 加 5 等于 30。在第二个表达式中,Python 首先计算括号中的表达式,正如我们预期的:5 加 5 等10;10 乘以 5 等于 50。

    这些是在 Python 中操作数字的最基本原则。接下来我们学习如何给数字命名。

    2 标签:给数字命名

    当开始设计更复杂的 Python 程序时,我们会给数字命名,有些时候是为了方便,但大部分情况是出于必要。这里有一个简单的例子:

     

    达相同的想法的。然而,考虑到变量也是一个数学术语(例如在方程式 x +2 = 3 中的 x),为了避免概念上的混淆,本书只在数学方程式和表达式语境中使用变量这个术语。

    3 不同类型的数字

    你可能注意到了,之前在介绍数学运算时我们使用了两类数字—没有小数点的数字(称为整数)以及带有小数点的数字(称为浮点数)。无论数字是整数、浮点数、分数,还是罗马数字,人类都能很容易地识别和处理它们。但是,本书编写的一些程序只有在某些特定类型的数字上执行才有意义,所以我们经常需要编写代码来检查是否输入了正确的数字类型。

    Python 将整数和浮点数视为不同的类型。如果使用 type()函数,Python 会显示你刚刚输入的数字类型。例如:

    
     
    1. >>> type(3)
    2. <class 'int'>
    3. >>> type(3.5)
    4. <class 'float'>
    5. >>> type(3.0)
    6. <class 'float'>

     

    在这里,你可以看到 Python 将数字 3 分类为整数(类型“int”),但将 3.0 分类为浮点数(类型“float”)。我们都知道 3 和 3.0 在数学上是等同的,但是在许多情况下,Python 会以不同的方式处理这两个数字,因为它们是两种不同的数字类型。

    我们在本章中编写的一些程序仅在输入为整数的情况下才能正常工作。正如我们刚刚看到的那样,Python 不会将 1.0 或 4.0 这样的数字识别为整数,所以如果我们想将类似的数字作为这些程序的有效输入,我们必须把它们从浮点数转换为整数。幸运的是,Python 内置的一个函数可以做到这点:

    
     
    1. >>> int(3.8)
    2. 3
    3. >>> int(3.0)
    4. 3

     

    int()函数获取输入的浮点数,去掉小数点后的所有内容,返回得到的整数。float()

    函数的工作原理有点儿类似,但它是执行反向的转换:

    
     
    1. >>> float(3)
    2. 3.0

     

    float()获取输入的整数,并在整数后添加一个小数点,将其转换为浮点数。

    3.1 分数的操作

    Python 也可以操作分数,但要做到这一点,我们需要使用 Python 的 fractions

    模块。你可以将模块视为由他人编写的程序,但你可以在自己的程序中使用。模块包括类、函数甚至标签定义。它可以是 Python 标准库的一部分,也可以从第三方位置分发。在后一种情况下,你必须先安装该模块才能使用它。

    fractions 模块是标准库的一部分,意味着它已经安装了。它定义了一个类Fraction,这是用来在我们的程序中输入分数的。在使用之前,我们需要导入(import)该模块,这是一种通知 Python 我们要使用这个模块中的类的方法。我们来看一个简单的例子,创建一个新的标签 f,它指代的是分数 3/4:

     

     

    3.2 复数

    {到目前为止,我们看到的数字是所谓的实数。Python 还支持复数,其中虚部由字母 j 或 J 标识(与在数学符号中常用字母 i 来表示不同)。例如,复数 2 + 3i 在 Python 中表示为 2 + 3j:

    
     
    1. >>> a = 2 + 3j
    2. >>> type(a)
    3. <class 'complex'>

     

    正如你所看到的,当我们对一个复数使用 type()函数时,Python 告诉我们这是一个复数类型的对象。

    你还可以使用 complex()函数定义复数:

    
     
    1. >>> a = complex(2, 3)
    2. >>> a
    3. (2 + 3j)

     

    这里我们将复数的实部和虚部作为两个参数传递给 complex()函数,并返回一个复数。

    你可以用与实数相同的方式对复数进行加减运算:

    
     
    1. >>> b = 3 + 3j
    2. >>> a + b
    3. (5 + 6j)
    4. >>> a - b
    5. (-1 + 0j)

     

    复数的乘法和除法也可以进行类似的操作:

    
     
    1. >>> a * b
    2. (-3 + 15j)
    3. >>> a / b
    4. (0.8333333333333334 + 0.16666666666666666j)

     

    但模(%)和向下取整除法(//)操作对复数无效。

    可以使用 real 和 imag 属性来提取复数的实部和虚部,如下所示:

    
     
    1. >>> z = 2 + 3j
    2. >>> z.real
    3. 2.0
    4. >>> z.imag
    5. 3.0

     

    复数的共轭(conjugate)具有相同的实部,但是具有相同大小和相反符号的虚部。可以使用 conjugate()函数获得:

    
     
    1. >>> z.conjugate()
    2. (2 - 3j)

     

     

     

    4 获取用户输入

    当编写程序时,使用 input()函数接收用户输入是一种简单且友好的方法。通过它我们可以编写要求用户输入数字的程序,对用户输入的数字执行特定的操作,然

     

    这两个函数就是我们之前看到的 int()函数和 float()函数,但是这次,不是将输入从一类数字转换为另一类,而是将一个字符串作为输入(’1’)并返回一个数字(2或2.0)。然而,有一点要注意,int()函数不能将包含浮点数的字符串转换为整数。如果将一个具有浮点数的字符串(例如“2.5”或“2.0”)输入 int()函数中,你会收到一条错误消息:

    
     
    1. >>> int('2.0')
    2. Traceback (most recent call last):
    3. File "<pyshell#26>", line 1, in <module>
    4. int('2.0')
    5. ValueError: invalid literal for int() with base 10: '2.0'

     

    这是一个异常(exception)的例子,Python 以这种方式告诉你,由于错误它不能继续执行你的程序。在这种情况下,异常是 ValueError 类型(有关异常情况的简单回顾,请参阅附录 B)。

    同样,当你输入一个分数如 3/4 时,Python 不能将其转换为等价的浮点数或整数,再次引发 ValueError 异常:

    
     
    1. >>> a = float(input())
    2. 3/4
    3. Traceback (most recent call last):
    4. File "<pyshell#25>", line 1, in <module>
    5. a=float(input())
    6. ValueError: could not convert string to float: '3/4'

     

    你可能会发现在 try…except 块中执行转换非常有用,这样你就可以处理此异常并提醒用户程序遇到无效输入。下面我们来看看 try…except 的程序块。

    4.1 处理异常和无效输入

    {:-:}如果你不熟悉 try…except,这里简单介绍一下它的基本思想:如果你在一个 try…except 程序块中执行一个或多个语句,一旦执行出错,你的程序不会崩溃,而是输出一个 Traceback。然后,程序的执行转移到 except 后的块,你可以在其中执行适当的操作,例如,输出有用的错误消息或尝试其他操作。

    下面使用 try…except 块执行之前的转换,并在输入无效时输出一条有用的错误消息:

    
     
    1. >>> try:
    2. a = float(input('Enter a number: '))
    3. except ValueError:
    4. print('You entered an invalid number')

     

    请注意,我们需要指定要处理的异常类型。在这里,因为要处理 ValueError 异常,所以将异常类型指定为 except ValueError。

     

     

    
     
    1. >>> a = int(input())
    2. 1.0
    3. Traceback (most recent call last):
    4. File "<pyshell#42>", line 1, in <module>
    5. a=int(input())
    6. ValueError: invalid literal for int() with base 10: '1.0'

     

    为了避免这个错误,我们可以设置一个 ValueError 捕获,就像我们之前看到的那样。这样一来,该程序将捕获浮点数,而这在针对整数的程序中则不起作用。然而,它也会标记像 1.0 和 2.0 这样的数字,Python 将这些数字视为浮点数,但是这些数字等同于整数,如果将它们作为正确的 Python 类型输入,就可正常工作。

    为了解决这个问题,我们将使用 is_integer()函数来过滤小数点后带有效数字的任何数字(此方法仅针对 Python 中的 float 类型的数字,不适用于已经以整数形式输入的数字)。

    这里有一个例子:

    
     
    1. >>> 1.1.is_integer()
    2. False

     

    在这里,我们调用 is_integer()来检查 1.1 是否为整数,结果为 False,因为 1.1 是一个浮点数。而将 1.0 作为浮点数调用时,检查结果为 True:

    
     
    1. >>> 1.0.is_integer()
    2. True

     

    我们可以使用 is_integer()过滤掉非整数输入,同时保留 1.0 这样的输入,即表示为浮点数,但等价于整数。稍后我们会看到该方法如何应用于更大的程序。

    4.2 将分数和复数作为输入

    我们之前学到的 Fraction 类还能够将字符串(例如’3/4’)转换为 Fraction 对象。

    事实上,这就是我们接收分数作为输入的方法:

    
     
    1. >>> a = Fraction(input('Enter a fraction: '))
    2. Enter a fraction: 3/4
    3. >>> a
    4. Fraction(3, 4)

     

    尝试输入一个分数,如 3/0:

    
     
    1. >>> a = Fraction(input('Enter a fraction: '))
    2. Enter a fraction: 3/0
    3. Traceback (most recent call last):
    4. File "<pyshell#2>", line 1, in <module>
    5. a= Fraction(input('Enter a fraction: '))
    6. File "/usr/lib64/python3.3/fractions.py", line 167, in __new__
    7. raise ZeroDivisionError('Fraction(%s, 0)' % numerator)
    8. ZeroDivisionError: Fraction(3, 0)

     

    ZeroDivisionError 异常信息告诉我们(如同你已经知道的),分母为 0 的分数无效。如果你计划让用户在某个程序中将分数作为输入,最好始终捕获此类异常。你可以这样做:

    
     
    1. >>> try:
    2. a= Fraction(input('Enter a fraction: '))
    3. except ZeroDivisionError:
    4. print('Invalid fraction')
    5.  
    6. Enter a fraction: 3/0
    7. Invalid fraction

     

    现在,每当程序的用户输入分母为 0 的分数时,Python 将输出分数无效(Invalid

    fraction)的信息。

    类似地,complex()函数可以将诸如’2+3j’的字符串转换为复数:

    
     
    1. >>> z = complex(input('Enter a complex number: '))
    2. Enter a complex number: 2+3j
    3. >>> z
    4. (2+3j)

     

    如果你输入的字符串为’2 + 3j’(带空格),则会导致 ValueError 错误信息:

    
     
    1. >>> z = complex(input('Enter a complex number: '))
    2. Enter a complex number: 2 + 3j
    3. Traceback (most recent call last):
    4. File "<pyshell#43>", line 1, in <module>
    5. z= complex(input('Enter a complex number: '))
    6. ValueError: complex() arg is a malformed string

     

    {当将字符串转换为复数时,最好捕获 ValueError 异常,就像我们对其他数字类型所做的那样。

    5 编写一个数学计算程序

    现在我们已经学习了一些基本的概念,我们可以将它们与 Python 的条件语句和循环语句结合起来,编写一些更高级、更有用的程序。

    5.1 计算整数因子

    当非零整数 a 除另一个整数 b,余数为0时,a 称为 b 的因子。例如,2_是所有偶数整数的因子。我们可以编写下面的函数来确定非零整数 a 是否是另一个整数 b _的因子:

    
     
    1. >>> def is_factor(a, b):
    2. if b % a == 0:
    3. return True
    4. else:
    5. return False

     

    我们使用本章前面介绍的%运算符来计算余数。如果你发现自己在问“4 是不是1024 的因子”这类问题,可以使用 is_factor()函数得到答案:

    
     
    1. >>> is_factor(4, 1024)
    2. True

     

    对于任何正整数 n,如何找到其所有的正因子?对于1和 n 之间的每个整数,我们检查 n 除以该整数后的余数。如果余数为_0,那么这个整数就是一个因子。使用 range()函数来编写一个程序,它将遍历 1 到 _n 之间的每个数字。

    在编写完整的程序之前,先来看看 range()如何工作。range()函数的典型用法如下所示:

    
     
    1. >>> for i in range(1, 4):
    2. print(i)
    3. 1
    4. 2
    5. 3

     

    在这里,我们设置了一个 for 循环,并给 range()函数传入了两个参数。range()函数从第一个整数参数(起始值)开始,一直到第二个整数参数(停止值)截止。在这个例子中,我们告诉 Python 输出该范围内的数字,从 1 开始,到 4 停止。注意,这意味着 Python 不会输出 4,所以最后输出的数字是停止值之前的数字 3。同时也要注意,range()函数只接收整数作为参数。

    你也可以不指定 range()函数的起始值,在这种情况下,起始值被假定为 0。

    例如:

    
     
    1. >>> for i in range(5):
    2. print(i)
    3. 0
    4. 1
    5. 2
    6. 3
    7. 4

     

    {:-:}range()函数产生的两个连续整数之间的差称为步长值(step value)。默认情况下,步长值为 1。要定义其他的步长值,请将其指定为第三个参数(这时,需指定起始值)。例如,下面的程序将输出 10 以下的奇数:

    
     
    1. >>> for i in range(1,10,2):
    2. print(i)
    3. 1
    4. 3
    5. 5
    6. 7
    7. 9

     

    我们已经了解了 range()函数是如何工作的,接下来考虑一个因子计算程序。因为我们将要编写一个相当长的程序,所以在 IDLE 编辑器里编写,而不是在交互式

    IDLE 界面中。你可以在 IDLE 中选择 File->New Window(或者 New File)来启动编辑器。请注意,我们首先用三个单引号(’)来注释代码,这些引号之间的文本不会被 Python 作为程序的一部分执行,它们只是我们对程序的注释。

     

     

     

    5.2 生成乘法表

    考虑三个数字 ab 和 n,其中 n 是整数,使得 a×n = b。此处我们可以说,b是 a 的第 n 个倍数。例如,42的第二个倍数,10242的第512个倍数。

    一个数字的乘法表列出了该数字的所有倍数。例如,2 的乘法表是这样的(这里给出了 2 的前三个倍数):

    2×1=2

    2×2=4

    2×3=6

    我们的下一个程序就是为用户输入的任何数字生成最大到乘数 10 的乘法表。在这个程序中,我们将使用 format()函数与 print()函数来使程序的输出看起来更友好、更可读。下面简要介绍一下它的工作原理。

    format()函数可以插入标签并对其进行设置,以获得一个友好的、可读的字符串输出。例如,假设我们有在杂货店购买的所有水果的名称,并为每种水果创建了单独的标签,现在想输出一个连贯的句子,可以使用 format()函数:

    
     
    1. >>> item1 = 'apples'
    2. >>> item2 = 'bananas'
    3. >>> item3 = 'grapes'
    4. >>> print('At the grocery store, I bought some {0} and {1} and {2}'.format(item1, item2, item3))
    5. At the grocery store, I bought some apples and bananas and grapes

     

    首先,我们创建了三个标签(item1、item2 和 item3),每个标签指代不同的字符串(苹果、香蕉和葡萄)。然后,在 print()函数中,我们键入字符串,它包含了三个在大括号中的占位符,分别为{0}、{1}和{2}。接下来是.format(),它的参数为之前创建的三个标签,这会告诉 Python 按照列出的顺序,用这些标签保存的值来填充这三个占位符,因此,在 Python 的输出文本中,第一个标签的内容替换了{0},第二个标签的内容替换了{1},依此类推。

    {:-:}使用标签指向我们要输出的值并非必要,我们可以在.format()中直接键入值,如下例所示:

    
     
    1. >>> print('Number 1: {0} Number 2: {1} '.format(1, 3.578))
    2. Number 1: 1 Number 2: 3.578

     

    请注意,占位符的数量和标签(或键入值)的数量必须相等。

    了解了 format()的工作原理之后,接下来让我们看看生成乘法表的程序:

     

     

    
     
    1. Enter a number : 5
    2. 5.0 x 1 = 5.0
    3. 5.0 x 2 = 10.0
    4. 5.0 x 3 = 15.0
    5. 5.0 x 4 = 20.0
    6. 5.0 x 5 = 25.0
    7. 5.0 x 6 = 30.0
    8. 5.0 x 7 = 35.0
    9. 5.0 x 8 = 40.0
    10. 5.0 x 9 = 45.0
    11. 5.0 x 10 = 50.0

     

    看到这张清晰又有秩序的乘法表了吗?这正是我们使用了.format()函数,根据可读、统一的模板输出的内容。

    你可以使用 format()函数来进一步控制数字输出的形式。例如,如果希望数字只有两位小数,可以参考下面的例子:

    
     
    1. >>> '{0}'.format(1.25456)
    2. '1.25456'
    3. >>> '{0:.2f}'.format(1.25456)
    4. '1.25'

     

    第一个 format 语句将我们输入的数字原封不动地输出。在第二个语句中,我们将占位符修改为{0:.2f},这意味着我们只需要小数点后面的两个数字,其中 f 表示一个浮点数。如你所见,在下一个输出中,小数点后只有两个数字。请注意,如果数字小数点后的位数多于你指定的位数,则该数字将四舍五入,例如:

    
     
    1. >>>'{0:.2f}'.format(1.25556)
    2. '1.26'

     

    在这里,1.25556 向上取整到最接近的百分位,并输出为 1.26。如果将.2f 应用到整数上,则会在小数点后面添加零:

    
     
    1. >>>'{0:.2f}'.format(1)
    2. '1.00'

     

    添加两个零是因为我们指定在小数点后输出两个数字。

    5.3 转换测量单位

    国际单位制定了 7 个基本量,将它们用于导出其他量,其他量称为导出量。长度(包括宽度、高度和深度)、时间、质量和温度是 7 个基本量中的 4 个,它们各自都有一个标准的计量单位,分别为米、秒、千克和开尔文。

    但是,这些标准计量单位各自也对应着多个非标准计量单位。你更熟悉温度为 30 摄氏度或 86 华氏度,而不是 303.15 开尔文。这是否意味着 303.15 开尔文比 86 华氏度还要热三倍?并非如此!我们不能仅比较 86 华氏度与 303.15 开尔文的数值,因为它们以不同的计量单位表示,即使它们测量的物理量是相同的(温度)。只有当物理量的两个数值用相同的计量单位表示时,才能比较它们。

    不同计量单位之间的转换可能会很棘手,这就是为什么在高中数学课上经常被要求解决涉及不同计量单位之间转换的问题。这是测试你基本数学技能的好方法。

    但是,Python 也有很多数学技能,与高中生不同的是,它不会厌倦一遍又一遍地计算数字!接下来,我们将探讨如何编写程序来执行单位转换。

    我们从长度开始。在美国和英国,英寸和英里经常用于长度测量,而其他大多数国家使用厘米和千米。

    1 英寸约等于 2.54 厘米,你可以使用乘法运算将英寸的计量值转换为厘米。然后你可以将以厘米为单位的计量值除以 100,获得以米为单位的计量值。例如,你可以将 25.5 英寸转换成米:

    
     
    1. >>>(25.5 * 2.54)/ 100
    2. 0.6476999999999999

     

    另一方面,1 英里大约相当于 1.609 千米,所以如果你看到你的目的地距你 650 英里,那么换算成国际单位的距离应该是 650×1.609 千米:

    
     
    1. >>> 650 * 1.609
    2. 1045.85

     

    现在来看一下温度转换—从华氏温度到摄氏温度,以及反向转换。使用以下公式将以华氏度表示的温度转换成摄氏度温度:

     

     

    这里,我们创建了一个标签C,值为37(人体正常温度,单位为摄氏度)。然后,使用公式将其转换成华氏度,结果为 98.6 华氏度。

    一次又一次地编写这些转换公式是一件麻烦的事。我们编写一个可以进行单位转换的程序。该程序将提供一个菜单,允许用户选择要执行的转换,询问相关输入,然后输出计算结果。程序如下所示:

     

     

    5.4 求二次方程的根

    假设有一个方程式,如 x + 50079 = 10,你需要求得未知变量 x 的值,你会怎么做?重新排列这些等式项,使常数(500、−79 和 10)在方程一侧,而变量(x)在另一侧,这将得到等式:x= 10−500 + 79。

    根据右边表达式的结果得到 x 的值,即方程的解,也称为这个方程的根。在Python 中,可以执行以下操作:

    
     
    1. >>> x = 10 - 500 + 79
    2. >>> x
    3. -411

     

    这是一个线性方程的例子。一旦你重新排列了方程式两边的计算项,方程就容易计算了。另外,对于x2+2x+1=0这样的方程式,求 x _的值通常涉及计算一个被称为二次方程的复杂表达式。这些二次方程通常表示为ax2+bx + c =0,其中a、b 和c 都是常数。计算二次方程的根的公式如下:

     

     

     

     

    
     
    1. >>> x_1 =(-b + D)/(2 * a)
    2. >>> x_1
    3. -1.0
    4. >>> x_2 =(-b - D)/(2 * a)
    5. >>> x_2
    6. -1.0

     

    在这个例子中,两个根的值是相同的,如果将该值代入方程x2+2x+1,则方程的计算结果为 0。

    我们的下一个程序将实现把所有这些步骤组合到 roots()函数中,该函数将 ab和 c 的值作为参数,计算并输出所有的根:

    
     
    1. '''
    2. Quadratic equation root calculator
    3. '''
    4. def roots(a,b,c):
    5. D =(b * b-4 * a * c)** 0.5
    6. x_1 =(-b + D)/(2 * a)
    7. x_2 =(-b - D)/(2 * a)
    8. print('x1:{0}'.format(x_1))
    9. print('x2:{0}'.format(x_2))
    10. if__name__ =='__main__':
    11. a = input('Enter a:')
    12. b = input('Enter b:')
    13. c = input('Enter c:')
    14. roots(float(a),float(b),float(c))

     

    在这段程序中,首先,我们使用标签 ab 和 c 来指代二次方程中三个常数的值。然后,我们将这三个值作为参数调用 roots()函数(先将它们转换为浮点数),将 ab 和 c 代入二次方程的公式中,计算并输出该方程的根。

    当你执行程序时,首先询问输入 ab 和 c 的值,这些值对应于用户想要计算的根的二次方程。

    
     
    1. Enter a: 1
    2. Enter b: 2
    3. Enter c: 1
    4. x1:-1.000000
    5. x2:-1.000000

     

    尝试求解一些 abc 取不同常数值时的二次方程,程序将正确地找到根。可能你知道二次方程也可以有复数的根。例如,方程 x2+x+1=0__的根都是复数。以

    上程序也能让你求解这类方程。让我们再次执行程序(常数是 a = 1、b = 1_和 c _= 1):

    
     
    1. Enter a: 1
    2. Enter b: 1
    3. Enter c: 1
    4. x1: (-0.49999999999999994+0.8660254037844386j)
    5. x2: (-0.5-0.8660254037844386j)

     

    以上输出的根是复数(用 j 表示),程序可以很好地计算和显示它们。

    1.6 本章内容小结

    完成第 1 章是很好的开始!我们学习了编写程序来识别整数、浮点数、分数(可以表示为分数或浮点数)和复数;我们还编写了生成乘法表、执行单位转换和求二次方程的根的程序。你已经迈出了第一步,相信你已经体会到了编写能帮助你进行数学计算的程序的快乐。在继续学习前,这里有一些编程挑战,让你有机会进一步应用所学到的知识。

    本文摘自《Python数学编程》

     

     

    • 有趣、生动、实用,高中生也能看得懂的Python编程书
    • 美亚青少年学计算机编程畅销书
    • 通过编程来探究代数、统计、几何、概率、微积分等数学主题

    本书展示了如何应用Python探究高中和大学低年级的数学主题,比如代数、统计、几何、概率以及微积分。你会从简单的项目学起,比如因式分解、二次方程求解,当你掌握了这些基础的知识后,就可以处理更复杂的项目了。

    使用本书提供的方法探索数学和编程,将让你的整个数学和计算机科学学习过程变得有趣、实用。

    你将从本书学到以下内容:

    • 用统计方法描述数据,用线图、条形图和散点图可视化数据
    • 用程序探究掷硬币、掷骰子和其他概率游戏中的集合理论和概率问题
    • 用Python的符号数学功能解决代数问题
    • 绘制几何图形,探索分形,如Barnsley蕨类植物、Sierpiński三角以及Mandelbrot集
    • 写程序求解导数与积分
    展开全文
  • 使用具有实时训练功能的KNN算法进行手写数字识别。 ###要求: OpenCV 3.0 的Python 3 ###如何使用: 使用命令行“ python3 ocrlearnKnn.py”启动程序。 将数字写在相机下方的纸上,并检查是否正确检测...
  • face_recognition:简单易用的 python 人脸识别库。 pagan:基于输入和哈希的复古风图标(头像)生成工具。 PyMatting:支持 alpha matting 的库。 pywal:由图像生成配色方案的工具。 pyvips:低内存消耗且快速...
  • 手写体数字识别 [^1] [^1] :博主的电脑是Windows10系统, cpu是i7 -8750H。 建立 TensorFlow 的 Anaconda 虚拟环境 1. 建立工作目录 在命令提示符窗口输入下列命令: cd pythonwork 执行后屏幕显示界面如图: 2....

    注:博主的电脑是Windows10系统, cpu是 i7 -8750H 。

    上一篇 Anaconda 的安装:

    https://blog.csdn.net/Robits/article/details/103209816

    建立 TensorFlow 的 Anaconda 虚拟环境

    1. 建立工作目录

    在命令提示符窗口输入下列命令:

    cd pythonwork
    

    执行后屏幕显示界面如图:
    注:如果显示“找不到文件路径”,就手动在你需要的位置创建一个文件夹,然后用 cd 指令打开刚刚创建的文件路径即可。
    在这里插入图片描述

    2. 建立 Anaconda 虚拟环境
    conda create --name tensorflow python=3.7 anaconda
    
    命令 说明
    conda create 建立虚拟环境
    –name tensorflow 虚拟环境的名称是 tensorflow
    python=3.7 Python 版本是 3.5
    anaconda 加入此命令选项,建立虚拟环境时,也会同时安装其他 Python 的软件包

    执行后会首先收集安装包信息,手机成功屏幕显示界面如图:
    (因为博主已经安装好了,所以借舍友的电脑进行了安装)
    在这里插入图片描述

    按Y键之后,就会开始安装 Anaconda 虚拟环境,耐心等待下载完成。
    下载成功后屏幕显示界面如图:
    在这里插入图片描述

    3. 启动 Anaconda 虚拟环境
    activate tensorflow
    

    执行后屏幕显示界面如图:
    在这里插入图片描述

    4. 关闭 TensorFlow 的 Anaconda 虚拟环境
    deactivate tensorflow
    

    执行后屏幕显示界面如图:

    在这里插入图片描述

    在 Anaconda 虚拟环境安装 TensorFlow 与 Keras

    1. 启动之前安装的 Anaconda 虚拟环境
    2. 安装 TensorFlow CPU 版本
    pip install tensorflow
    

    按 Y 键下载,耐心等待下载完成。

    3. 安装 Keras
    pip install keras
    

    按 Y 键下载,耐心等待下载完成。

    启动 Jupyter Notebook

    1. 启动 Jupyter Notebook

    在命令提示符窗口输入如下命令:

    cd pythonwork
    
    activate tensorflow
    
    jupyter notebook
    

    如果没有自动跳转到 Jupyter Notebook 的 Web 界面,复制网址手动进行访问。
    复制网址如图:
    注: Teminal 中的复制快捷键是 Enter 键,而不是 Ctrl + C 。

    在这里插入图片描述

    执行成功后屏幕显示界面如图:
    在这里插入图片描述

    我们可以单击 Untitled 来修改 Notebook 的名称,如图。
    在这里插入图片描述

    2. 建立新的 Notebook

    进入 Jupyter Notebook 界面后,可以按照如图所示的步骤新建 Notebook。
    注: 刚打开的时候 Notebook应该是空的,截图中的是博主自己的文件。
    在这里插入图片描述

    3. Jupyter Notebook 输入命令的方式

    在 In [ ] 里输入程序代码,按 Shift + Enter 或 Ctrl + Enter 组合键来执行程序。
    这两种方式的差异如下:

    • Shift + Enter : 执行后,光标会移动到下一个程序单元格。
    • Ctrl + Enter : 执行后光标仍停留在当前的程序单元格。
    4. 导入 TensorFlow 模块

    在程序单元格输入下列命令,然后按 Shift + Enter 组合键,执行程序代码:

    import tensorflow as tf       #导入 TensorFlow 模块,后续以 tf 来引用这个模块
    

    执行结果如图,没有任何输出,没有消息就是好消息。
    如果 TensorFlow 的安装有问题,就会显示错误信息。
    在这里插入图片描述

    5. 查看 TensorFlow 的版本
    tf.__version__
    

    执行结果如图:
    在这里插入图片描述

    6. 导入 Keras 模块
    import keras
    

    执行结果如图:
    在这里插入图片描述

    7. 查看 Keras 版本
    keras.__version__
    

    运行结果如图:
    在这里插入图片描述

    8. 保存 Notebook

    当要退出 Notebook 时,记得保存。
    在这里插入图片描述

    9. 关闭 Notebook 网页

    保存完成后就可以关闭 Notebook 网页。
    在这里插入图片描述

    10. 打开之前保存的 Notebook

    回到 Jupyter 网页,我们可以看到之前保存的 XX.ipynb 。如果要再次打开这个 Notebook ,单击即可。
    在这里插入图片描述

    11. 关闭 Jupyter Notebook

    关闭浏览器后,回到命令提示符窗口,按 Ctrl + C 关闭
    可以看到已经回到了 tensorflow 的虚拟环境在这里插入图片描述

    附录

    展开全文
  • 使用深度学习的多手写数字识别(TensorFlow-Keras) 要求 TensorFlow(Keras) 的Python 3.5 + Numpy(+ MKL适用于Windows) PIL(枕头) Opencv的 tkinter(python GUI) 关于项目 使用CNN(卷积神经网络)在...
  • Python机器学习之KNN

    2021-01-12 09:20:07
    基于kNN算法实现手写体数字识别 2.实验目标 通过本实验掌握kNN算法的原理,熟悉kNN算法及应用 3.实验知识点 kNN算法原理 kNN算法流程 kNN算法应用 4.实验环境 kNN算法原理 kNN算法流程 kNN算法应用 实验准备 点击...

    Python机器学习之KNN

    实验介绍

    1.实验内容
    本实验包括:
    基于kNN算法改进约会网站的配对效果
    基于kNN算法实现手写体数字识别
    2.实验目标
    通过本实验掌握kNN算法的原理,熟悉kNN算法及应用
    3.实验知识点
    kNN算法原理
    kNN算法流程
    kNN算法应用
    4.实验环境
    kNN算法原理
    kNN算法流程
    kNN算法应用

    实验准备

    点击屏幕右上方的下载实验数据模块,选择下载kNN_Dating.tgz和kNN_basic_writing.tgz到指定目录下,然后再依次选择点击上方的File->Open->Upload,上传刚才下载的数据集压缩包,再使用如下命令解压:

    !tar -zxvf kNN_Dating.tgz
    
    !tar -zxvf kNN_hand_writing.tgz
    

    【约会网站配对效果改进】

    【约会网站配对效果改进】- 概述

    海伦女士一直使用在线约会网站寻找适合自己的约会对象。尽管约会网站会推荐不同的人选,但她并不是喜欢每一个人。经过一番总结,她发现自己交往过的人可以进行如下分类:

    • 不喜欢的人 (didntLike)
    • 魅力一般的人 (smallDoses)
    • 极具魅力的人 (largeDoses)

    数据介绍

    海伦收集约会数据已经有了一段时间,她把这些数据存放在文本文件datingTestSet.txt中,每个样本数据占据一行,总共有1000行。

    海伦收集的样本数据主要包含以下3种特征:

    • 每年获得的飞行常客里程数
    • 玩视频游戏所消耗时间百分比
    • 每周消费的冰淇淋公升数

    数据读取与处理

    import numpy as np
    import matplotlib.pyplot as plt
    import os
    import operator
    

    在将上述特征数据输入到分类器前,必须将待处理的数据的格式改变为分类器可以接收的格式。从上面已经知道,要将数据分类两部分,即特征矩阵和对应的分类标签向量。定义名为file2matrix的函数,以此来处理输入格式问题。

    def file2matrix(filename):
        fr = open(filename)
        arrayOLines = fr.readlines()
        numberOfLines = len(arrayOLines)
        returnMat = np.zeros((numberOfLines, 3))
        classLabelVector = []
        index = 0
        string2int = {'largeDoses':3, 'smallDoses':2, 'didntLike':1}# 创建一个字典
        for line in arrayOLines:
            line = line.strip()# 截取回车字符
            listFromLine = line.split('\t')# 将整行的数据分割成一个元素列表
            returnMat[index, :] = listFromLine[0:3]
            classLabelVector.append(string2int.get(listFromLine[-1]))# 取字典值所对应的键
            index += 1
        return returnMat, classLabelVector
        pass
    
    datingDataMat,datingLabels = file2matrix('kNN_Dating/datingTestSet.txt')  
    import matplotlib
    import numpy as np
    import matplotlib.pyplot as plt
    fig = plt.figure()
    ax =  fig.add_subplot(111)
    ax.scatter(datingDataMat[:,0], datingDataMat[:,1])  #scatter函数是用来画散点图的
    plt.show()
    

    在这里插入图片描述

    数据归一化

    在处理不同取值范围的特征值时,我们通常采用的方法是将数值归一化,如将取值范围处理为0到1或者-1到1之间。本实验使用如下的公式可以将任意取值范围的特征值转化为0到1区间内的值:

    𝑋∗𝑖=𝑋𝑖−𝑋min𝑋max−𝑋min

    其中𝑋min
    和𝑋max分别是数据集中的最小特征值和最大特征值。编写名为autoNorm的函数,用该函数自动将数据归一化。

    def autoNorm(dataSet):
        minVals = dataSet.min(0)
        maxVals = dataSet.max(0)
        ranges = maxVals - minVals
        normDataSet = np.zeros(np.shape(dataSet))
        m = dataSet.shape[0]
        normDataSet = dataSet - np.tile(minVals, (m,1))
        normDataSet = normDataSet/np.tile(ranges, (m,1))   #element wise divide
        return normDataSet, ranges, minVals
        pass
    

    KNN核心算法实现

    kNN算法流程:
      a.计算已知类别数据集中的点与当前点之间的距离;
      b.按照距离递增次序排序;
      c.选取与当前点距离最小的k个点;
      d.确定前k个点所在类别的出现频率;
      e.返回前k个点所出现频率最高的类别作为当前点的预测分类

    def classify0(inX, dataSet, labels, k):
        dataSetSize = dataSet.shape[0]
        diffMat = np.tile(inX, (dataSetSize,1)) - dataSet
        sqDiffMat = diffMat**2
        sqDistances = sqDiffMat.sum(axis=1)
        distances = sqDistances**0.5
        sortedDistIndicies = distances.argsort()
        classCount={}
        for i in range(k):
            voteIlabel = labels[sortedDistIndicies[i]]
            classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1
        sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True)
        return sortedClassCount[0][0]
    #def kNNClassify(inX, dataSet, labels, k):
        pass
    

    测试算法验证分类器

    机器学习算法一个很重要的工作就是评估算法的正确率,通常我们只提供已有数据的90%作为训练样本来训练分类器,而使用其余的10%数据去测试分类器,检测分类器的正确率。需要注意的是,10%的测试数据应该是随机选择的。

    本实验,请使用datingTestSet.txt中前10%的数据作为测试集,其余数据作为训练集,并输出每个测试样本的预测类别及测试集的错误率(k取4)。

    def datingClassTest():     #分类器针对约会网站的测试代码   
        hoRatio = 0.50      
        datingDataMat,datingLabels = file2matrix('kNN_Dating/datingTestSet.txt')       #load data setfrom file
        normMat, ranges, minVals = autoNorm(datingDataMat)
        #计算测试向量的数量,此步决定哪些数据用于分类器的测试和训练样本
        m = normMat.shape[0]
        numTestVecs = int(m*hoRatio)
        errorCount = 0.0
        #计算错误率,并输出结果
        for i in range(numTestVecs):
            classifierResult = classify0(normMat[i,:],normMat[numTestVecs:m,:],datingLabels[numTestVecs:m],3)
            print ("the classifier came back with: %s, the real answer is: %s"%(classifierResult, datingLabels[i]))
            if (classifierResult != datingLabels[i]): errorCount += 1.0
        print ("the total error rate is: %f"%(errorCount/float(numTestVecs)))
        pass
    
    if __name__ == '__main__':
        datingClassTest()
    

    在这里插入图片描述

    【手写体数字识别】

    【手写体数字识别】- 概述

    本实验要求构造kNN分类器,实现对手写体数字0到9的识别。

    数据介绍

    数据集目录下有两个子目录:trainingDigits和testDigits

    trainingDigits为训练数据集的文件,文件数量为1935;
    testDigits为测试数据集的文件,文件数量为947。
    

    每个文件的命名格式都为“真实数字_编号.txt”。为了简便处理,实验中,用txt文本文件表示图片。原图片中像素值为黑色(0,0,0)的像素点在txt中对应的用0表示,像素值为白色(255,255,255)的像素点用1表示。所以,只需要处理这些文本文件即可,不用再去解析图片格式。每个txt文件中,数据共有32行和32列,这是由于原图片的大小为32X32。

    加载手写字训练集数据

    由于kNN算法中,每个点都是用向量表示的。手写体数字数据为32X32的二维数据格式,首先需要将其转换为一维数组,即表示成一个向量。函数img2vector用于将表示32X32的二维数组的txt文件转换为一维数组,该函数传入参数文件名,返回转换后的一维数组。函数loadTrainData用于加载全部训练数据。

    def img2vector(fileName):
        returnVect=np.zeros((1,1024))
        fr=open(fileName)
        for i in range(32):
            lineStr=fr.readline()
            for j in range(32):
                returnVect[0,32*i+j]=int(lineStr[j])
        return returnVect
        pass
    
    
    def loadTrainData(path):
        pass
    

    使用测试数据集验证分类算法

    验证kNN手写体识别算法的准确性。测试使用的数据集位于目录testDigits下。测试的流程为:依次读取testDigits目录下的每个文件,根据文件中的数据,重用分类函数kNNClassify确定其类别,并和其真实分类进行对比,如果一致,表示分类正确,如果不一致,表示分类错误。统计错误的数量,计算错误率,错误率为分类出错的数量除以测试集中测试数据总量。编写handwritingClassTest函数测试基于kNN算法实现的手写字识别系统准确性。(输出每个测试样本的预测类别及测试集的错误率,k取3)

    import os, sys
    def handwritingClassTest():
        hwLabels=[]
        trainingFileList=os.listdir('kNN_hand_writing/trainingDigits')
        m=len(trainingFileList)
        trainingMat=np.zeros((m,1024))
        for i in range(m):
            fileNameStr=trainingFileList[i]
            fileStr=fileNameStr.split('.')[0]
            classNumStr=int(fileStr.split('_')[0])
            hwLabels.append(classNumStr)
            trainingMat[i,:]=img2vector('kNN_hand_writing/trainingDigits/%s'%fileNameStr)
        testFileList=os.listdir('kNN_hand_writing/testDigits')
        n=len(testFileList)
        errorCount=0.0
        for i in range(n):
            fileNameStr=testFileList[i]
            fileStr=fileNameStr.split('.')[0]
            classNumStr=int(fileStr.split('_')[0])
            vectorUnderTest=img2vector('kNN_hand_writing/testDigits/%s'%fileNameStr)
            classifierResult=classify0(vectorUnderTest,trainingMat,hwLabels,3)
            print("the classifier came back with:%d,the real answer is:%d"%(classifierResult,classNumStr))
            if(classifierResult!=classNumStr):
                errorCount+=1.0
        print("\nthe total number of errors is :%d"%errorCount)
        print("\nthe total error rate is :%f"%(errorCount/float(mTest)))
          
    
    if __name__ == '__main__':
        handwritingClassTest()
    

    在这里插入图片描述

    展开全文
  • 打印输出到屏幕的时候,有个屏幕的编码类型; 默认的Python2.7用的是ascii的编码类型,在不做任何代码文件声明的时候,Python平台,把代码文件当做ascii编码类型的文件直接加载。 可想而知,当代码文件中存在非...
  • 2.3.2 数值方法:数字能做什么 25 2.3.3 列表方法:列表能做什么 26 2.3.4 字典方法:字典能做什么 27 2.4 有用的工具:type、dir 和help 28 2.4.1 type 28 2.4.2 dir 28 2.4.3 ...
  • ** Python中print函数与转义符 ** print函数 python中,print函数用于实现把想要执行的内容打印在屏幕上。 ...输入print之后,计算机为我们做了...print函数只能识别数字数字运算,因此,如果想要输入其它形式的...
  • 大多数空间光调制器(SLM)通过模拟(VGA)或数字(HDMI / DVI)监视器标准通信协议进行控制。 换句话说,将其插入计算机,它将被识别为监视器显示。 设备通常不提供有用的工具或API来动态控制SLM。 我在这里介绍一...
  • 此存储库中的代码通过使用Tesseract OCR从自行车上安装的Android表在投影屏幕上执行数字识别来获取Peloton:registered:Bike指标(例如,踏频和输出)。 指标在/metrics REST端点处公开,因此可以被各种应用程序使用...
  • 软件依赖关系 ...这将启动一个应用程序,该应用程序显示计算机上默认摄像头捕获的视频提要,并在屏幕上实时覆盖预测的边框和数字。 从头开始训练 如果要使用现有的工作流程和现有的深度学习体系结构从
  • Robo_Eyes_license_recognize System ...通过HyperLPR实现车牌识别数字文字分割以及识别 功能实现 1 flask轻量级框架+OpenCV实现屏幕录制截图(像素存在一点小问题~) 2 HyperLPR 通过训练好的...
  • Canvas输出图片并保存到本地

    千次阅读 2018-08-23 15:14:14
    之前做手写识别的比赛,对于画板canvas写出的数字,要生成图片保存到本地,然后调用python进行识别。对图片保存经历了三个版本变更。 一、直接对屏幕进行截屏保存图片 仅停留在可以实现生成图片,图片的画质还有...
  • ASDSource偏lag-源码

    2021-02-12 04:59:22
    Python 该应用程序旨在识别最有可能抄袭的来源。 算法: 消除符号和数字 消除停用词 搜索最相关的单词(10、15、20、25、30) 使用Google API,我们搜索这些词 从列表中,我们选择5个最相关的链接 窃屏幕
  • 2、全屏幕显示1024X768像素,界面美观大方,适合于投影仪投射晚会晚宴豪华场所抽奖系统。 3、可自由选择键盘及鼠标双重操作方式。 4、只需要IE浏览器即可完成所有执行。 5、未到场人员可以双击数字单独重新抽取。 6、...
  • 一种采用VC_识别数字仪器七段码的方法.pdf 一种采用脊线特征的指纹模糊匹配方法.pdf 三维曲面的呈现研究_基于VC_OpenGL.pdf 以LabVIEW为开发平台的电子式互感器校验仪设计.pdf 以VC++为平台电传训练系统研究与实现....
  • 一种采用VC_识别数字仪器七段码的方法.pdf 一种采用脊线特征的指纹模糊匹配方法.pdf 三维曲面的呈现研究_基于VC_OpenGL.pdf 以LabVIEW为开发平台的电子式互感器校验仪设计.pdf 以VC++为平台电传训练系统研究与实现....
  • 一种采用VC_识别数字仪器七段码的方法.pdf 一种采用脊线特征的指纹模糊匹配方法.pdf 三维曲面的呈现研究_基于VC_OpenGL.pdf 以LabVIEW为开发平台的电子式互感器校验仪设计.pdf 以VC++为平台电传训练系统研究与实现....
  • 一种采用VC_识别数字仪器七段码的方法.pdf 一种采用脊线特征的指纹模糊匹配方法.pdf 三维曲面的呈现研究_基于VC_OpenGL.pdf 以LabVIEW为开发平台的电子式互感器校验仪设计.pdf 以VC++为平台电传训练系统研究与实现....
  • 《本地YouTube下载器》作者自己也承认youtube-dl要比《本地YouTube下载器》更好用一些,但《本地YouTube下载器》是一个脚本,无需安装Python开发环境,可以在浏览器直接使用,对普通用户极其友好,所以懒得折腾的非...
  • python来描述的如何读懂正则。 <p>Js也支持三种模式,gim,表示全局,不区分大小写,多行。 一般来说很少有人这么使用var xxx = new RegExp(),而是用字面量的方式,比如...

空空如也

空空如也

1 2
收藏数 24
精华内容 9
关键字:

python识别屏幕数字

python 订阅