暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

学知识图谱,你得会Python!史上最通俗易懂系列(二)

知识图谱 Knowledge Graph 2022-11-23
584

 Life is short, you need Python. —— Bruce Eckel



上一篇文章简介了在知识图谱领域,学习Python这门编程语言的重要性,并简要讲解如何安装和配置Anaconda环境。本篇文章将继续介绍Python中必要的语法、语句(不涉及高级用法,足够在学习知识图谱期间使用即可)。我假设读者从未学习过其他编程语言,因此所讲解的内容尽可能精简,用最通俗但未必准确的白话去解释Python常用的语法。


01

Python基本运算


在Python中,最基础的莫过于“变量的赋值”。举例来说,我们有一句文本想要处理:“我的研究方向是知识图谱。”那么在Python中,我们可以直接这样把这句话写出来:

    "我的研究方向是知识图谱。"

    注意,这种“文本”形式的数据,被称作“字符串”,顾名思义就是由一个个的“字符”组成的“串”。同时,需要注意的是,字符串两边需要加上『英文』的双引号或者单引号。接下来,我们就可以对这个字符串进一步处理。


    比如,我们可以对这个字符串做分割(目前不知道分割是什么意思也没有关系):

      "我的研究方向是知识图谱。"
      "我的研究方向是知识图谱。".split('是') # 这是对字符串做“分割”的处理,会把这个字符串拆成:['我的研究方向', '知识图谱。']
      # 这一行是Python中的注释,Python在遇到井号时,会把这一行后面的内容看做是“注释”,而不会去执行注释的内容。

      这个时候,我们遇到一个问题,如果这句文本很长,或者对这句文本做的操作很多,那就要把这句话复制很多遍,显得不够简洁,很麻烦。怎么办?我们可以给这句话起一个别名:

        sentence = "我的研究方向是知识图谱。"

        在这行代码里面,sentence就是我们给"我的研究方向是知识图谱。"起的一个别名,在Python中,“别名”被称作『变量』。代码里面的 =, 意思是说,我们把等号后面的值,起一个名字,并赋给了前面的名字。


        这段读不读都可以:事实上,给后面的数据起一个名字,在Python中被叫做“赋值”,这个等号就被称作“赋值运算符”。


        那么,以后我们在处理这句话的时候,就可以用“别名”来代替这句话了。像是这样:

          sentence = "我的研究方向是知识图谱。"  # 给后面的句子,起一个响亮的名字
          sentence.split('是')  # 对这个“别名”做分割操作,等同于『"我的研究方向是知识图谱。".split('是')』
          # 这种做法看起来更加简洁,也更加方便


          这个“别名”绝不是随随便便起的,这里我们大概记住:“别名”不可以是数字开头,比如 123s  ,开头是数字,就是错误的;不可以是Python中已经占用的关键字,比如 int,这个单词Python内部已经使用了,所以这也是错的;还要注意大小写,sentence和Sentence是两个完全不同的名字。(后面会介绍写代码的工具PyCharm,如果起的别名有问题,会提示并报错的,别担心)。


          事实上,我们不仅仅可以给字符串起别名,还可以给各种数据类型起别名,比如数字、小数,甚至还可以是布尔值(Bool的音译,以英国数学家、布尔代数的奠基人乔治·布尔(George Boole)命名,布尔值是“真” True 或“假” False 中的一个)。代码如下:

            i_am_num = 666  # 可以存储整数类型,别名也可以起的五花八门
            an_shi_xiao_shu = 123.01  # 可以存储浮点数类型,也就是小数。虽然不建议用拼音,但初学者先怎么方便怎么来,要做到抓大放小,不要去过多关注太细节的部分
            is_True = False  # 可以存储布尔值,用来指示“对”或“错”。

            我们刚才提到过,“别名”被称作“变量”。顾名思义,就是说别名的值是可以发生变化的。所以,更加神奇的是,我们可以胡乱给这个“别名”再赋上其他的值,像是这样:

              an_shi_bian_liang = 666  # 原本的值是666
              an_shi_bian_liang = 777  # 值被修改成了777
              an_shi_bian_liang = "俺是变量"  # 甚至还可以改成其他类型的数据,原来存储的是整数类型,现在竟然可以改成字符串


              an_ye_shi = 1.11  # 我们再制造另一个变量出来
              an_shi_bian_liang = an_ye_shi # 还可以把“别名”赋值给别名
              # 注意,是把右边的变量所存储的值,赋给左边。
              # 所以,an_ye_shi存储的还是1.11,而an_shi_bian_liang则变成了1.11,不再是"俺是变量"

              这段选读:即使不同的数据类型也可以相互赋值,比如一个变量存储的是整数类型,后来又存储了字符串,这在C、Java等编程语言里一定是要报错的,Python是绝对的异教徒!为什么可以这么乱七八糟的赋值呢?皆因Python是弱类型语言,变量不需要提前声明其数据类型,变量所存储的数据类型也可以自由变化。缺点就是,变量到底存储的是什么类型,需要我们自己去多注意,没有C、Java等那么直观。


              现在,我们学习了如何给“值”起一个“名字”,也就是给变量进行赋值。并且,还学习了,怎么样给变量重新赋值。注意,“变量”除了可以存储整数、浮点数(小数)、字符串、布尔值,甚至还可以存储复数、指数等等。但现在不需要专门去学习,后面如果使用到,现学也没有任何问题。


              除了最基本的“赋值”操作,还可以对这些“变量”做一系列的操作,我们能够想得到的基本运算,在Python中大多都内置了。比如:

                a = 7
                b = 2
                c = a + b  # a存储的是7,b存储的是2,我们计算a+b,等同于计算7+2,并把结果“9”赋值给等号左边的c
                # 现在,c存储的数值就是9


                c = a - b  # 除了加法,还可以做减法,现在c存储的是5,对吗?
                c = a * b  # 这是乘法,c现在存储的是14
                c = a / b  # 这是除法,猜猜结果是多少?3.5,在Python中,是保留小数的
                c = a // b  # 这是整除,猜猜结果是多少?3,整除只保留“商”的整数部分,小数部分不要
                c = a % b  # 这是取余运算,结果是 1,返回的是除法的“余数”
                c = a ** b  # 这是幂运算,也就是计算a的b次方,7的2次方是多少?49

                以上,就是对“数字”的常用基本运算,和我们平时常用的加减乘除符号基本一致,完全不需要专门去记,更多复杂的运算,也没有必要在初学的时候,去专门学习,除了让自己丧失学习热情,没有任何好处,后面在用到的时候,可以逐步学习。不过,每个人都有自己的学习观点,如果读者认为学习应该按部就班,一步一个脚印,也请不要对我展开批评。


                除了这些基本运算,对“字符串”的一系列操作在“知识图谱”领域最为常见,也最为繁多,我们可以在使用的过程中逐步去学习,目前也不需要去专门学习(学了不知道能有什么用,很快就会忘掉)。



                02


                逻辑判断语句


                想象一下,我们遇到了一项任务,这项任务是用程序去判断一个人的年龄是不是大于60岁。以我们目前所掌握的内容,还难以胜任。所以,我们需要去学习一个新的语句:

                  age = 70  # 我们先定义一个变量,这个变量存储的是某个人的年龄,假设他今年50岁
                  if age > 60:  # 如果 年龄 大于 60
                      print("老骥伏枥,志在千里")  # 在屏幕上输出一句话
                      print("烈士暮年,壮心不已")

                  在第1行中,我们定义了一个变量,变量的名字是age,变量里边存储的值是70,表示这个人已经70岁了。由于我们需要去让程序判断这个人的年龄是否大于60,于是,第2行,if后面跟上需要判断的条件。这里我们判断age是否“大于”60,所以是if age > 60:。这里有两个需要注意的点:第一个就是,if后面要有一个空格,而age和>之间,以及>和60之间,有没有空格都可以;第二个就是,在这行语句后面,一定要加上一个『冒号』,否则会报错。


                  第3行代码的意思是:如果第2行的条件成立(也就是确实大于60岁),那么我们就在屏幕上输出一句话,用的是“print”语句。print跟上英文括号,括号里面的内容可以自己随便写。


                  注意,在print前面有4个空格。在Python中,这种规则叫做“缩进”。如果if条件成立,Python发现第3行和第4行都有缩进,那就会把“缩进”的代码都执行一下。


                  在Python中,“缩进”很常见,后面会看到,不仅判断语句,其他的如循环、方法、类等等都离不开缩进。一般,需要缩进的代码前面是4个空格。但是,为了方便,我们也可以用一个“Tab”键,来代替4个空格,程序也可以正常执行。


                  那么,如果第2行的条件不成立呢?就什么都不会发生,因为我们并没有告诉程序,如果不成立,需要做什么事情。


                  聪明的你,试试下面这个问题:

                  有一个人的年龄是40岁,让程序判断一下他是否小于60岁,如果小于60岁,就输出“你可真年轻”。

                  答案:

                    age = 40
                    if age < 60:
                        print("你可真年轻")

                    试试在cmd中,执行一下程序。在cmd中打开Python的方式,前一篇文章写过,还记得吗?



                    除了“大于”以外,Python中还自带了很多其他的“比较运算符”,下面的表格给出了常见的符号:

                    符号
                    含义
                    a > b
                    判断a是不是“大于”b,如果大于,则条件成立,返回True,否则返回False。比如 10>7就是成立的。
                    a < b
                    判断a是不是“小于”b,如果大于,则条件成立,返回True,否则返回False。比如 10<7就是不成立的。
                    a >= b
                    判断a是不是“大于等于”b,如果大于或等于,则条件成立,返回True,否则返回False。例如,7>=7 就是成立的。
                    a <= b
                    判断a是不是“小于等于”b,如果小于或者等于,则条件成立,返回True,否则返回False。例如 10 <= 9 就是不成立的。
                    a == b
                    判断a是不是“等于”b。记住,这里是两个“=”。那么,如果是一个“=”,也就是 a=b,含义就变成了把b的值赋给a,对吗?
                    a != b
                    判断a和b是不是“不相等”。比如,10 != 10就不成立。而10 != 11,就成立。


                    表格里面的符号,和我们数学常见的符号基本一致,除了“==”以及“!=”需要稍微注意,其他的应该不需要专门去记忆。


                    现在,我们学会了怎么使用if语句。但是,如果条件不成立,我们也想让程序执行一些操作,应该怎么办呢?我们直接看代码:

                      age = 50
                      if age > 60: # 如果 年龄 大于 60
                      print("老骥伏枥,志在千里") # 在屏幕上输出一句话
                      else: # 如果前面的条件不成立,就执行下面两行缩进的代码
                      print("年轻人你好")
                          print(age)

                      这一段代码,前3行我们应该能看懂了。现在,如果这个人的年龄不大于60,我们也想要让程序执行一些内容,可以后面跟一个else,记得else后面也必须要有一个英文的『冒号』。同样,else里面要执行的代码,也要有“缩进”。


                      第5行,我们输出了一句话,没有任何疑问吧?新的疑点在第6行代码,我们竟然可以把age这个变量也放进print中。所以,这一段代码,不仅会向屏幕输出“年轻人你好”,还会把这个人的年龄也打印出来。




                      到这里,还不算太复杂。但是,还不够。现实场景的逻辑可能会更费脑筋。我们遇到了这样一个问题:我们还是想判断一个人的年龄。想要怎么判断呢?如果年龄大于60,那太好了,直接输出一句话;否则,我们想要继续判断,年龄是不是大于40;否则,我们还要继续判断,年龄是不是大于20;如果都不成立,那太遗憾了,就直接输出一句话。


                      上面这段啰里啰嗦的,翻译成代码就很直观了:

                        age = 50  # 我们先定义一个变量,这个变量存储的是某个人的年龄,假设他今年50岁
                        if age > 60: # 如果 年龄 大于 60
                        print("老骥伏枥,志在千里") # 在屏幕上输出一句话
                        elif age > 40: # 如果不满足“if”条件,则继续判断是否大于40
                        print("风华正茂,年轻有为") # 在屏幕上输出一句话
                        elif age > 20:
                        print("意气风发,后生可畏")
                        else:  # 如果前面的条件都不成立,就执行下面的语句
                        print("骄儿騃女,天真烂漫")

                        这里的if以及else,我们已经眼熟了。新的知识点是第4行和第6行,有个elif。这个elif是“else if”的缩写,当if不成立,就会继续判断elif后面的内容。同样,后面也不要漏掉冒号。


                        在Python中,代码是一行一行从上往下执行的。所以,判断的时候,也是。先判断第2行的if,如果if条件成立,就执行里面的语句。那么后面的条件,Python认为没有必要继续判断了,就跳出了整个if代码块。而如果if条件不成立,再一行一行的继续判断,直到最后。



                        即使逻辑已经这么复杂了,我们还是碰到了更复杂的问题,o(╥﹏╥)o:有一个人,身高是180,年龄是30。我们想用程序去判断,他的身高是否大于170,并且年龄是否小于40岁。怎么办?(先别看代码啊,先思考)


                        答案是这样的:

                          height = 180  # 身高是180
                          age = 30 # 年龄是30
                          if height > 170:  # 先判断身高是否大于170
                              if age < 40:  # 继续判断年龄是否小于20岁
                                  print("你又高又年轻")  # 都成立的话,就执行这句代码

                          这里,print被缩进了两次。先判断身高,如果身高满足条件,再继续判断年龄,如果年龄也符合,那就输出一句话。否则什么也不做。


                          这样的逻辑没有问题,不过看起来不够直观。我们有一个更简单的方法,Python自带了“逻辑运算符”,可以把两个条件合并起来。上面的代码可以改写成这样:

                            height = 180  # 身高是180
                            age = 30 # 年龄是30
                            if height>170 and age<40:
                            print("你又高又年轻")

                            看到没,多了一个新的运算符:and。and其实和我们数学中学过的“且”是一个意思。当两边的条件都成立时,整个if条件才会成立。代码改写成这样,会更加直观,以后在回顾代码的时候,也不会那么抓脑袋。


                            除了and以外,另外两个常用的逻辑运算符还有or和not。用法是这样的:

                            符号
                            含义
                            a and b
                            “且”。当a和b都成立时,整个表达式成立。例如,10>7 and 10>6 是成立的,而 10<7 and 10>6,左边是错误的,所以整个表达式是不成立的。也就是说,and的左边和右边,只要有一个错误的,那么整个表达式就是错误的,会返回False。
                            a or b
                            “或”。a或者b,只要有一个成立,那么整个表达式就成立。例如,10>7 or 7>10,左边正确,右边错误,但整个表达式成立,会返回True。
                            not a
                            “非”。青春期逆反心理熊孩子。a如果是正确的,not a就返回False;a如果是错误的,not a就返回True。例如,not 10>7,返回False;not 10>11,返回True。

                            到这里,赋值语句和if语句知识点基本讲完。下课。



                            作业:小明的年龄是40岁,身高是170厘米。小红的年龄是30岁,身高是160厘米。判断:小明和小红的年龄是否都大于50岁,大于的话,就输出“哥哥姐姐好”;否则,判断小明的身高是否大于160厘米,大于的话,就输出“你好,巨人!”;否则,输出“不知道说什么”。别忘了冒号和缩进。



                            答案:

                              ming_age = 40
                              ming_height = 170
                              hong_age = 30
                              hong_height = 160
                              if ming_age>50 and hong_age>50:
                              print("哥哥姐姐好")
                              elif ming_height>160:
                                  print("你好,巨人!")
                              else:
                                  print("不知道说什么")






                              文章转载自知识图谱 Knowledge Graph,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                              评论