简洁易懂,初学者挑战学习Python编程30天

Posted 世上本无鬼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简洁易懂,初学者挑战学习Python编程30天 相关的知识,希望对你有一定的参考价值。

目录

你们的三连(点赞,收藏,评论)是我持续输出的动力,感谢。
在兴趣中学习,效益超乎想象,有趣的源码与学习经验,工具安装包,欢迎加我的微信:bobin1124,一起交流学习与分享。

第 21 天 - 类和对象

Python 是一种面向对象的编程语言。Python 中的一切都是一个对象,有它的属性和方法。程序中使用的数字、字符串、列表、字典、元组、集合等是相应内置类的对象。我们创建类来创建一个对象。一个类就像一个对象构造函数,或者是创建对象的“蓝图”。我们实例化一个类来创建一个对象。类定义了对象的属性和行为,而另一方面,对象代表了类。

从这个挑战一开始,我们就在不知不觉中处理类和对象。Python 程序中的每个元素都是一个类的对象。让我们检查一下python中的所有东西是否都是一个类:

asabeneh @ Asabeneh:~ $ python 
Python  3.96(默认,2021628 日 ,152621[11.0 0.0(铛- 1100.033.8)在 达尔文
式 的“帮助”,“版权”,“信用” 或 “许可” 的 更多 信息。
>> >  num  =  10 
>> >  type ( num )
 < class  'int' > 
>> >  string  =  'string' 
>> >'STR' > 
>> > 布尔 =>> > 类型(布尔)
 <'布尔' > 
>> >  LST  = []
 >> > 型(LST)
 <'列表' > 
>> >  TPL  =)
 >> > 类型( tpl )
 < class  'tuple' > 
>> > SET1  = 集()
>> > 类型(set1)
 < class  'set' > 
>> >  dct  = {}
 >> > 类型(dct)
 < class  'dict' >

21.1创建一个类

要创建一个类,我们需要关键字类,后跟名称和冒号。类名应该是CamelCase。

#语法
类类名:
  代码在这里

例子:

类 人:
  通过
打印(人)
< __main__.Person 对象在 0x10804e 510>

21.2创建对象

我们可以通过调用类来创建一个对象。

p  =()
打印( p )

21.3类构造函数

在上面的例子中,我们从 Person 类创建了一个对象。然而,没有构造函数的类在实际应用中并没有真正的用处。让我们使用构造函数使我们的类更有用。与Java或javascript中的构造函数一样,Python也有内置的init ()构造函数。的初始化构造函数有自参数这对类的当前实例的引用
实施例:

class  Person :
       def  __init__ ( self , name ):
         # self 允许将参数附加到类
          self。姓名 =姓名

p  =  Person ( 'Asabeneh' )
打印( p . name )
打印( p )
#输出
阿萨贝内
< __main__.Person 对象在 0x2abf46907e 80>

让我们向构造函数添加更多参数。

class  Person :
       def  __init__ ( self , firstname , lastname , age , country , city ):
           self。名字 = 名字
          自我。姓氏 = 姓氏
          自我。年龄 = 年龄
          自我。国家 = 国家
          自我。城市 = 城市


p  =  Person ( 'Asabeneh' , 'Yetayeh' , 250 , 'Finland' , 'Helsinki' )
 print ( p . firstname )
 print ( p . lastname )
 print ( p . age )
 print ( p . country )
 print ( p .城市)
#输出
阿萨贝内
耶塔耶
250
芬兰
赫尔辛基

21.4对象方法

对象可以有方法。方法是属于对象的函数。

例子:

class  Person :
       def  __init__ ( self , firstname , lastname , age , country , city ):
           self。名字 = 名字
          自我。姓氏 = 姓氏
          自我。年龄 = 年龄
          自我。国家 = 国家
          自我。city  =  city 
      def  person_info ( self ):
        返回 f' {自我。名字}  {自我。姓氏}{ self。年龄}岁。他住在{自我。城市}{自我。国家} '

p  = 人('Asabeneh''Yetayeh'250'芬兰''赫尔辛基')
打印(p。person_info())
#输出
Asabeneh Yetayeh 已经 250 岁了。他住在芬兰赫尔辛基

21.5对象默认方法

有时,您可能希望为对象方法设置默认值。如果我们在构造函数中给参数赋予默认值,就可以避免在不带参数的情况下调用或实例化我们的类时出错。让我们看看它的外观:

例子:

class  Person :
       def  __init__ ( self , firstname = 'Asabeneh' , lastname = 'Yetayeh' , age = 250 , country = 'Finland' , city = 'Helsinki' ):
           self。名字 = 名字
          自我。姓氏 = 姓氏
          自我。年龄 = 年龄
          自我。国家 = 国家
          自我. 城市 = 城市

      def  person_info ( self ):
        返回 f' { self . 名字}  {自我。姓氏}{ self。年龄}岁。他住在{自我。城市}{自我。国家} .'

P1  = 人()
打印(P1。person_info())
 P2  = 人('约翰''李四'30'Nomanland' , “诺曼城市)
打印(P2。person_info())
#输出
Asabeneh Yetayeh 已经 250 岁了。他住在芬兰赫尔辛基。
约翰·多伊今年 30 岁。他住在诺曼兰的诺曼城。

21.6修改类默认值的方法

在下面的例子中,person 类,所有的构造函数参数都有默认值。除此之外,我们还有技能参数,我们可以使用方法访问它。让我们创建 add_skill 方法来将技能添加到技能列表中。

class  Person :
       def  __init__ ( self , firstname = 'Asabeneh' , lastname = 'Yetayeh' , age = 250 , country = 'Finland' , city = 'Helsinki' ):
           self。名字 = 名字
          自我。姓氏 = 姓氏
          自我。年龄 = 年龄
          自我。国家 = 国家
          自我. 城市 = 城市
          自我。技能 = []

      def  person_info ( self ):
        返回 f' { self . 名字}  {自我。姓氏}{ self。年龄}岁。他住在{自我。城市}{自我。国家} .' 
      def  add_skill(自我,技能):
          自我。技能。追加(技能)

p1  =  Person ()
打印( p1 . person_info ())
 p1 . add_skill ( 'html' )
 p1。add_skill ( 'CSS' )
 p1。add_skill('的JavaScript' )
 P2  = 人('约翰''李四'30'Nomanland' , “诺曼城市)
打印(P2。person_info())
印刷(P1. 技能)
打印(p2。技能)
#输出
Asabeneh Yetayeh 已经 250 岁了。他住在芬兰赫尔辛基。
约翰·多伊今年 30 岁。他住在诺曼兰的诺曼城。
[ ' HTML '' CSS '' JavaScript ' ]
[]

21.7继承

使用继承,我们可以重用父类代码。继承允许我们定义一个继承父类的所有方法和属性的类。父类或超类或基类是提供所有方法和属性的类。子类是从另一个类或父类继承的类。让我们通过继承person类来创建一个student类。

班级 学生(人):
通过

S1  = 学生('Eyob''Yetayeh'30'芬兰''赫尔辛基')
 S2  = 学生('了Lidiya''Teklemariam'28'芬兰''埃斯波')
印刷(S1。person_info( ))
 s1。add_skill ( 'JavaScript' )
 s1。add_skill ( '反应' )
 s1。'Python' )
打印( s1 .技能)

打印(S2。person_info())
 S2。add_skill ( '组织' )
 s2。add_skill ( '营销' )
 s2。add_skill ( '数字营销' )
打印( s2 . Skill )
输出
Eyob Yetayeh 30 岁。他住在芬兰赫尔辛基。
[ ' JavaScript '' React '' Python ' ]
Lidiya Teklemariam 28 岁。他住在芬兰的埃斯波。
[ “组织”、“营销”、“数字营销” ]

我们没有在子类中调用init ()构造函数。如果我们没有调用它,那么我们仍然可以从父级访问所有属性。但是如果我们确实调用了构造函数,我们就可以通过调用super来访问父属性。
我们可以向子类添加新方法,也可以通过在子类中创建相同的方法名称来覆盖父类方法。当我们添加init ()函数时,子类将不再继承父类的init ()函数。

21.8Overriding parent method

类 学生(人):
    高清 __init__(自我,名字= 'Asabeneh' ,姓氏= 'Yetayeh' ,年龄= 250,全国= '芬兰,城市= '赫尔辛基',性别= '男'):
        自我。性别 = 性别
        超()。__init__(名字,姓氏,年龄,country , city )
     def  person_info ( self ):
        性别 =  'He'  if  self。性别 == '男' 否则 '她'
        返回 f' { self . 名字}  {自我。姓氏}{ self。年龄}岁。{性别}生活在{自我。城市} , {自己. 国家} .'

s1  =  Student ( 'Eyob' , 'Yetayeh' , 30 , 'Finland' , 'Helsinki' , 'male' )
 s2  =  Student ( 'Lidiya' , 'Teklemariam' , 28 , 'Finland' , 'Espoo' , 'female' ' )
打印( s1 . person_info ())
 s1 . add_skill ( 'JavaScript' )
 s1。s1。add_skill('Python的)
印刷(S1,技能)

打印(S2。person_info())
 S2。add_skill ( '组织' )
 s2。add_skill ( '营销' )
 s2。add_skill ( '数字营销' )
打印( s2 . Skill )
Eyob Yetayeh 30 岁。他住在芬兰赫尔辛基。
[ ' JavaScript '' React '' Python ' ]
Lidiya Teklemariam 28 岁。她住在芬兰的埃斯波。
[ “组织”、“营销”、“数字营销” ]

我们可以使用 super() 内置函数或父名 Person 来自动继承其父级的方法和属性。在上面的例子中,我们Overriding parent method的方法。child 方法有一个不同的特点,它可以识别性别是男性还是女性并指定适当的代词(他/她)

第 22 天 - 网页抓取

22.1什么是网页抓取

互联网充满了可用于不同目的的大量数据。为了收集这些数据,我们需要知道如何从网站上抓取数据。

网页抓取是从网站中提取和收集数据并将其存储在本地机器或数据库中的过程。

在本节中,我们将使用 beautifulsoup 和 requests 包来抓取数据。我们使用的包版本是beautifulsoup 4。

要开始抓取网站,您需要请求、beautifoulSoup4和网站。

pip 安装请求
pip 安装 beautifulsoup4

要从网站抓取数据,需要对 HTML 标签和 CSS 选择器有基本的了解。我们使用 HTML 标签、类或/和 ID 定位来自网站的内容。让我们导入 requests 和 BeautifulSoup 模块

进口 请求
从 BS4 进口 BeautifulSoup

让我们为要抓取的网站声明 url 变量。

 来自bs4 的导入请求
import BeautifulSoup url = 'https://archive.ics.uci.edu/ml/datasets.php'   
  

# 让我们使用 requests 的 get 方法从 url 中获取数据

响应 = 请求。get ( url )
 # 让我们检查状态
status  =  response。status_code 
print ( status ) # 200 表示获取成功
200

使用beautifulSoup解析页面内容

 来自bs4 的导入请求
import BeautifulSoup url = 'https://archive.ics.uci.edu/ml/datasets.php'   
  

响应 = 请求。获取(网址)
内容 = 响应。content  # 我们从网站上获取所有内容
soup  =  BeautifulSoup ( content , 'html.parser' ) # beautiful 
Soup将有机会解析print ( soup . title ) # <title>UCI Machine Learning Repository: Data Sets</标题>
打印(soup.title.get_text())#UCI机器学习库:数据集
打印(soup.body)#给网站上的整个页面
打印(响应。STATUS_CODE)

find_all ( 'table' , { 'cellpadding' : '3' })
 # 我们的目标是 cellpadding 属性值为 3 的表格
# 我们可以选择使用 id、class 或 HTML 标签,更多信息请查看beautifulsoup doc 
table  =[ 0 ] #,结果是一个列表,我们是从它取出数据
为 TD 在 表。找到('tr')。find_all ( 'td' ):
    打印( td . text)

如果你运行这段代码,你可以看到提取已经完成了一半。

🌕你很特别,每天都在进步。您距离通往伟大的道路只剩下八天了。
🎉 恭喜! 🎉

第 23 天 - 虚拟环境

23.1设置虚拟环境

从项目开始,最好有一个虚拟环境。虚拟环境可以帮助我们创建一个孤立或分离的环境。这将帮助我们避免跨项目的依赖冲突。如果您在终端上编写 pip freeze ,您将在计算机上看到所有已安装的软件包。如果我们使用 virtualenv,我们将只访问特定于该项目的包。打开终端并安装 virtualenv

asabeneh@Asabeneh: ~ $ pip install virtualenv

在 30DaysOfPython 文件夹中创建一个 flask_project 文件夹。

安装 virtualenv 包后,转到您的项目文件夹并通过编写以下内容创建一个虚拟环境:

对于 Mac/Linux:

asabeneh@Asabeneh: ~ /Desktop/30DaysOfPython/flask_project \\$ virtualenv venv

对于 Windows:

C:\\Ú SERS \\Ú SER \\ d ocuments \\ 3 0DaysOfPython \\˚F lask_project >python-m VENV VENV

我更喜欢将新项目称为 venv,但可以随意使用不同的名称。让我们检查 venv 是否是通过使用 ls(或 dir 用于 Windows 命令提示符)命令创建的。

asabeneh@Asabeneh:~ /Desktop/30DaysOfPython/flask_project$ ls


venv/

让我们通过在我们的项目文件夹中编写以下命令来激活虚拟环境。

对于 Mac/Linux:

asabeneh@Asabeneh: ~ /Desktop/30DaysOfPython/flask_project$ source venv/bin/activate

在 Windows 中激活虚拟环境可能非常依赖于 Windows Power shell 和 git bash。

对于 Windows 电源外壳:

C:\\Ú SERS \\Ú SER \\ d ocuments \\ 3 0DaysOfPython \\˚F lask_project > VENV \\ S cripts \\一个ctivate

对于 Windows Git bash:

C:\\Ú SERS \\Ú SER \\ d ocuments \\ 3 0DaysOfPython \\˚F lask_project > VENV \\ S cripts \\。启用

编写激活命令后,您的项目目录将以 venv 开头。请参阅下面的示例。

(venv) asabeneh@Asabeneh: ~ /Desktop/30DaysOfPython/flask_project$
现在,让我们通过编写 pip freeze 来检查这个项目中的可用包。您将看不到任何包。

我们将要做一个Flask小项目,所以让我们将Flask包安装到这个项目中。

(venv) asabeneh@Asabeneh: ~ /Desktop/30DaysOfPython/flask_project$ pip install Flask

现在,让我们编写 pip freeze 来查看项目中已安装包的列表:

(venv) asabeneh@Asabeneh: ~ /Desktop/30DaysOfPython/flask_project$ pip freeze
点击==7.0
Flask==1.1.1
它的危险==1.1.0
Jinja2==2.10.3
标记安全==1.1.1
Werkzeug==0.16.0

完成后,您应该使用deactivate 停用活动项目。

(venv) asabeneh@Asabeneh: ~ /Desktop/30DaysOfPython$ 停用

安装了使用Flask的必要模块。现在,您的项目目录已准备好用于Flask项目。
🎉 恭喜! 🎉

第 24 天 - 统计

24.1统计数据

统计学是研究数据的收集、组织、显示、分析、解释和呈现的学科。统计学是数学的一个分支,建议作为数据科学和机器学习的先决条件。统计学是一个非常广泛的领域,但我们将在本节中只关注最相关的部分。完成此挑战后,您可以进入 Web 开发、数据分析、机器学习和数据科学路径。无论您走哪条路,在您职业生涯的某个阶段,您都会获得可以处理的数据。拥有一些统计知识将帮助您根据数据做出决策,数据如他们所说。

24.2什么是数据?

数据是为某种目的(通常是分析)收集和翻译的任何字符集。它可以是任何字符,包括文本和数字、图片、声音或视频。如果数据没有放在上下文中,它对人或计算机没有任何意义。为了让数据有意义,我们需要使用不同的工具处理数据。

数据分析、数据科学或机器学习的工作流程始于数据。可以从某个数据源提供数据,也可以创建数据。有结构化和非结构化数据。

可以以小格式或大格式找到数据。我们将获得的大多数数据类型已在文件处理部分中介绍。

24.3统计模块

Python统计模块提供了计算数值数据的数理统计的函数。该模块无意成为第三方库(如 NumPy、SciPy)或面向专业统计学家(如 Minitab、SAS 和 Matlab)的专有全功能统计软件包的竞争对手。它针对图形和科学计算器的级别。

24.4NumPy

在第一部分中,我们将 Python 本身定义为一种出色的通用编程语言,但在其他流行库(numpy、scipy、matplotlib、pandas 等)的帮助下,它成为了一个强大的科学计算环境。

NumPy 是 Python 科学计算的核心库。它提供了一个高性能的多维数组对象,以及用于处理数组的工具。

到目前为止,我们一直在使用 vscode,但从现在开始我会推荐使用 Jupyter Notebook。要访问 jupyter notebook,让我们安装anaconda。如果您使用的是 anaconda,则大多数常用软件包都已包含在内,如果您安装了 anaconda,则您没有安装软件包。

asabeneh@Asabeneh: ~ /Desktop/30DaysOfPython$ pip install numpy

24.5导入 NumPy

如果您支持 jupyter notebook,则可以使用Jupyter notebook

  # 如何导入 numpy 
    import  numpy  as  np 
    # 如何检查 numpy 包的版本
    print ( 'numpy:' , np . __version__ )
     # 检查可用方法
    print ( dir ( np ))

24.6使用创建 numpy 数组

创建 int numpy 数组

  # 创建 python 列表
    python_list  = [ 1 , 2 , 3 , 4 , 5 ]

    # 检查数据类型
    print ( 'Type:' , type ( python_list )) # <class 'list'> 
    # 
    print ( python_list ) # [1, 2, 3, 4, 5]

    二维列表 = [[ 0 , 1 , 2 ], [ 3 , 4 , 5 ], [ 6 , 7 , 8 ]]

    打印(二维列表)   # [[0, 1, 2], [3, 4, 5], [6, 7, 8]]

    # 从 python 列表创建 Numpy(Numerical Python) 数组

    numpy_array_from_list  =  np。array ( python_list )
     print ( type ( numpy_array_from_list ))    # <class 'numpy.ndarray'> 
    print ( numpy_array_from_list ) # array([1, 2, 3, 4, 5])

24.7创建 float numpy 数组

使用浮点数据类型参数从列表创建浮点 numpy 数组

  # Python 列表
    python_list  = [ 1 , 2 , 3 , 4 , 5 ]

    numy_array_from_list2  =  np。阵列(python_list,dtype=float)
    打印(numy_array_from_list2)#阵列([12345]

24.8创建布尔 numpy 数组

从列表创建一个布尔值 numpy 数组

numpy_bool_array = np。数组([ 0 , 1 , - 1 , 0 , 0 ], dtype = bool )
打印( numpy_bool_array ) # 数组([假, 真, 真, 假, 假])

24.9使用numpy创建多维数组

一个 numpy 数组可能有一个或多个行和列

  two_Dimension_list  = [[ 0 , 1 , 2 ], [ 3 , 4 , 5 ], [ 6 , 7 , 8 ]]
     numpy_two_dimensional_list  =  np。数组(二维列表)
    打印(类型(numpy_two_dimensional_list))
    打印(numpy_two_dimensional_list)

<类’ numpy.ndarray ’ >
[[0 1 2]
[3 4 5]
[6 7 8]]

24.10将 numpy 数组转换为列表

# 我们总是可以使用 tolist() 将数组转换回 Python 列表。
np_to_list  =  numpy_array_from_list。tolist()
打印(类型(np_to_list))
打印('一个维阵列:',np_to_list)
打印('二维阵列:',numpy_two_dimensional_list。tolist())
   <'列表' >
    一维数组:[1, 2, 3, 4, 5]
    二维数组:[[0, 1, 2], [3, 4, 5], [6, 7, 8]]

24.11从元组创建numpy数组

# Numpy array from tuple 
# 在 Python 中创建元组
python_tuple  = ( 1 , 2 , 3 , 4 , 5 )
 print ( type ( python_tuple )) # <class 'tuple'> 
print ( 'python_tuple: ' , python_tuple ) # python_tuple: ( 1, 2, 3, 4, 5)

numpy_array_from_tuple  =  np。array ( python_tuple )
 print ( type ( numpy_array_from_tuple )) # <class 'numpy.ndarray'> 
print ( 'numpy_array_from_tuple: ' , numpy_array_from_tuple ) # numpy_array_from_tuple: [1 2 3 4 5]

24.12numpy 数组的形状

shape 方法以元组的形式提供数组的形状。第一个是行,第二个是列。如果数组只是一维,则返回数组的大小。

   数字 =  np。阵列([ 12345 ])
    打印(NUMS)
    打印('NUMS的形状:',NUMS。形状)
    打印(numpy_two_dimensional_list)
    打印('numpy_two_dimensional_list的形状:',numpy_two_dimensional_list。形状)
     three_by_four_array  =  NP。数组([[ 0, 1 , 2 , 3 ],
        [ 4 , 5以上是关于简洁易懂,初学者挑战学习Python编程30天 的主要内容,如果未能解决你的问题,请参考以下文章

简洁易懂,初学者挑战学习Python编程30天

自学入门不在困难,初学者挑战学习Python编程30天

坚持不懈续集 初学者挑战学习Python编程30天

《挑战30天C++入门极限》引言

初学者学习Python编程面临哪些挑战?

Python学习第八篇:requests 库学习