给普通人的Python——第一章

前言

普通人学编程有没有轻松的办法呢?答案是有的!咱们中国人学习最不注重方式方法,祖祖辈辈传授的经验就是死记硬背,填鸭式教育,咱们的思维是学生学不好从来不怨老师,而是默默的自我批判。而我要说的是,学生学不好,百分之五十以上都要怪在老师身上,笔者曾经一门选修课的教授说过一句话,教室里学生不听讲,开小差,这是教师无能的体现,因为他连学生的注意力都无法吸引到自己身上来,失败!在笔者遇到的无数教师中,确实有那么一两位,即使讲授的是很枯燥的学科,也能讲得妙趣横生,掌声雷动,座无虚席,魅力十足。说这些是为了说明学习兴趣的重要性,然而老外在这方面早就探究了各式各样的生动有趣的学习方法,我这里推荐给大家的就是玩游戏学编程!是的,你没听错,就是玩着游戏学编程。这不是什么新的噱头,早在九十年代就出了一款Java坦克大战的游戏,里面坦克的控制就是依靠写简单的Java代码控制。

人力资源机
训练编程思维的游戏,与具体编程语言无关

链接:https://pan.baidu.com/s/1LfoeTQf1aToR9fnZpfryrA
提取码:oot4

codecombat(代码战争)
国外开源学编程游戏,主要用于学习Python编程,官网由于是海外服务器速度较慢,且后续关卡需要砖石订阅,推荐国内完全免费私服。由于是开源的,愿意折腾亦可在本地搭建服务器玩耍。

https://www.codewar.cn

创建游戏账号后,欢迎加入我创建的班级,打开如下链接加入即可
https://www.codewar.cn/students?_cc=BoatDrinkWant

1. 简单语法

在学习一门编程语言的时候,最好的方法是遵循最少知识原则。也就是说所学的知识刚刚够动手即可开始,而不是把大部分知识都学一遍才开始做东西,那样既枯燥无趣,也违背了认知的规律,是典型的填鸭式教育。回忆我们学习语文的过程,我们并不是将常用字认全了才开始写作文,而是磕磕绊绊,边写边查字典,或者不会的直接写拼音。

期待了很久,这一章正式开始写代码。因为Windows上的小白用户最多,我们讲解以Windows系统为主。首先拉出工具,打开命令行,在Windows上打开命令行的小窍门是这样的,在你的桌面或者任意一个文件夹,左手手指按住键盘上的【Shift】键不放,右手握住鼠标单击鼠标右键,看到以下菜单

此时放开【Shift】键,选择【在此处打开命令窗口】,这时候,命令行中的当前目录,就是你鼠标点击处的所在目录

1.1 把python当计算器

在命令行输入python,进入python交互式环境。如提示不是内部或外部的命令,则python环境未正确配置,请回到第零章配置好环境。

这个过程就好像我们在电脑上打开一个软件,只不过我们现在是用命令打开python这个软件,我们还能在命令行打开其他的软件,比如在命令行输入calcmspaint等打开其他软件,大家可以试一试,有些可能打不开,比如输入qq,这是为什么呢?还记得我们第一天学的配置环境变量吗?软件路径只有配置到环境变量的Path中才能在命令行使用,否则是找不到你输入的命令的。

要记住,进入了python交互式环境后,当前命令行就是属于python的了,不能再输入Windows命令行的命令了

>>> 2+2*6
14
>>> (2+2)*6
24
>>> exit()

E:\Project>

如上,我们输入2+2*6然后敲回车键,得到结果14,再次输入(2+2)*6回车,得到结果24(计算机里面通常用*号表示乘号,/号表示除号)。我们可以愉快的把python当做计算器来用了,最后我们输入exit()回车,表示退出python,这就相当于平时你单击某个软件右上角的那个小叉叉哦!

1.2 什么是变量

上面我们已经学会了进入和退出python,并且学会了使用python做算术运算,接下来让我们写一点更像代码的东西

>>> a = 17
>>> b = 20
>>> a + b
37
>>> a * 2
34
>>> b + 26
46
>>>

编程中的所谓变量,和我们数学中的变量是很相似的,用变量存储一个数值,可以再将这个变量带入表达式中参与运算。如我们输入a = 17,这就表示我们定义一个变量叫a,用它来保存17这个值。其中=被称为赋值符号,意即将17这个值赋予给a变量。要记住,赋值运算是指将=右边的值赋予给=左边

变量的值除了可以是数值,还可以是一段文本内容,在编程中,一段文本内容通常使用英文"或者'括起来,然后被称作字符串,意即将一个个字符串成一串

>>> greet = "hello world!"
>>> country = '中国'
>>> print(greet)
hello world!
>>> print(country)
中国
>>>

如上,我们分别用变量greetcountry来保存字符串hello world!中国,其中print()是一个函数,这里的函数和我们数学中的函数也很相似,print这个函数的作用是打印输出,它将传入括号中的参数打印出来,如果我们传入的参数是一个变量,那么就打印变量的值。这里不要忘记,将一段文本内容作为字符串赋值给一个变量时,一定要使用英文的单引号或者双引号括起来。

>>> text1 = "Hello"
>>> text2 = "Alice"
>>> result = text1 + text2
>>> print(result)
HelloAlice
>>> result = "Hello"+" Bruce"
>>> print(result)
Hello Bruce

输入如上代码,可以看到,字符串也是可以使用+进行运算,只是对字符串使用+则表示将两个字符串合并拼接到一起,另外我们可以看到,result变量两次打印出来的值不同,表明我们可以对同一个变量多次赋值,不断修改该变量的内容。

到这里,我们有必要对变量做稍微深入一点点的理解。如下,abc是三个变量,存放的内容分别为666、888、hello

变量就像一个盒子,盒子里面放的东西就是变量的值

变量名就像一个贴在盒子上面的标签,指明每个盒子谁是谁,用于在一堆盒子中找到你要的盒子

理解了这一点,再看下面的代码

>>> str1 = "apple"
>>> str2 = str1
>>> print(str1)
apple
>>> print(str2)
apple
>>> str1 = "orange"
>>> print(str1)
orange
>>> print(str2)
apple
>>>

当输入str2 = str1时,是将str1变量的值赋值给变量str2,相当于是将str1变量的值再复制一份给与str2保存,此时相当于有两个变量盒子,因此修改了str1中的内容后,对str2不会产生任何影响。

1.3 运用逻辑判断

有一种游戏是这样的,一个人负责提问题,另一个人只能回答“对”或者“错”,这其实就很像数学里面的命题判断,要么为真,要么为假。我们简单回顾一下高中数学,其中有一部分是讲真值表的,下面的内容会涉及到一点点,是很简单的内容,不必担心。

在Python编程中,对应于一个特殊的关键字True,而则对应于False

>>> 1 == 2
False
>>> 1 < 2
True
>>> a = 6
>>> b = 10
>>> b > a
True

>>> flags = (2 > 3)
>>> print(flags)
False

如上代码,判断两个值是否相等时,是使用两个=号,这一点和数学上不同,因为在编程中,良好的设计是一个符号通常只表示一种功能,=已经作为赋值符号了,不能让它身兼两职,一会儿表示赋值,一会又表示比较,因此就只能使用两个=号表示比较了。

编程中,TrueFalse这两个值被称为布尔类型(bool),我们前面学了用变量来保存数值和文本内容,其实变量还能保存很多其他类型的东西,这里就使用flags变量保存了布尔值

1.3.1 条件判断

我们要写点真正像样的代码,首先得学习条件判断,可以说编程中,很大部分语句都是在做条件判断

>>> if 8 > 2:
...     print("整数8大于整数2!")
...
整数8大于整数2>>> if 8 < 2:
...     print("整数8小于整数2!")
...
>>>
>>>

首先输入if 8 > 2:后敲回车换行,换行后必须先敲四下空格键,然后开始写print("整数8大于整数2!")这句话,然后敲两下回车键得到结果。在Python中,如果语句之间存在某种语句块的关系,则行首必须缩进四个空格。这就好比小时候写作文,老师要求段落开始必须空两格一样。

if语句后面需要跟一个布尔值的表达式,在上面代码中,这个表达式是8 > 28 < 2,如果if 后面的表达式的值是True,则if块下面的语句会被执行。我们看到,print("整数8大于整数2!")这句空了四个空格,这就表示它是属于if 8 > 2:这个语句块的,如果不缩进四格,则表示这句话和if语句没有所属的关系。这一点很好理解,就好像我们写Word文档的时候,一个标题下面的内容,我们都会先缩进一下,表示后面的一段文本是属于这个标题的内容。如果不缩进,那说明这段文本和这个标题是平级的关系。

上面这段代码中,第一个if语句块中的print被执行了,输出了整数8大于整数2!这句话,而第二个if语句块中的print显然没有被执行,被无视了,直接跳过了它,因为这个if后面跟随的表达式的值是False

对于初学者来说,有一点需要注意,编程中的一些符号是英文标点符号,并且python中的缩进,一定要使用空格,不要使用Tab键缩进,时刻注意这点,能避免很多问题,尤其是在初学编程的时候出现一些报错时,首先要检查这些地方。

开始使用编辑器
我们之前使用的python交互式环境可以快速的验证代码,但是但我们写大段代码时,就显得很不方便,实际编程中没人会用交互式命令行写代码,现在就让我们像一个程序员一样编写代码吧,当然,后续的学习中我们仍有可能会用到交互式环境。

  1. 创建代码专用文件夹
    首先要学会良好的代码管理习惯,不要让代码零碎的遍布在磁盘上。首先创建一个workspace文件夹(要记住,以后创建文件夹不要使用中文,以避免一些问题),然后在workspace中再次新建一个pyCode文件夹,如下

    F:\workspace\pyCode
    
  2. 打开 Notepad++ 编辑器
    如果你安装的是其他编辑器,过程大致也是相同的。我们在第零章已经推荐过适合新手的编辑器了,这里不再说明。

  3. 编写代码并保存
    我们在编辑器中输入如下测试代码

    print("Hello World!")
    
    if 8 > 2:
        print("整数8大于整数2!")
    

在编辑器中按【Ctrl】+ 【s】保存,会弹出另存为对话框,保存的位置选为我们之前创建的文件夹,文件名可以任意命名,但不建议使用中文,最后要记住,python代码,文件后缀名一定要写成.py

4. 运行代码
在python源码文件所在的文件夹,打开命令行,输入python learn01.py命令,表示用python去运行learn01.py这个源码文件

1.3.2 复合条件判断

在我们pyCode文件夹,新建一个文本文档,改名为learn02.py,使用Notepad++打开该文件,输入如下代码并运行

num = 11

if num%2 == 0:
    print("这是一个偶数")
else:
    print("这是一个奇数")

这是一个if-else的复合判断,意思是非此即彼。要么if后面的条件为真,执行if下面的缩进语句,要么条件为假,执行else下面的缩进语句,两者之间必有一个成立,必有一个缩进块被执行。需要注意的是ifelse关键字是在同一级的,两者之间没有缩进关系。

上面的代码中新出现了一个符号%,其实根据运行代码的结果,大致可以猜出来这个运算符的意思,这是计算机中用于求余数的运算符,一般这种运算被称为取余或者取模。在这个表达式中的意思为计算num变量的值除以整数2后的余数是否等于0,我们知道,一个整数除以2的余数为0,表示的是这个数可以被2整除,那么这个数就是偶数,反之就是奇数。

如果不是很理解取模运算,我们可以再打开一个命令行窗口,输入python打开交互式环境,然后在交互式环境中体会和练习一下取模运算

>>> 6%2
0
>>> 5%3
2
>>> 3%2
1
>>>

好了,到这里我们已经可以写一个程序用来判断给出的整数是奇数还是偶数了,但是这个程序仍然缺少一点实用性,让我们再接再厉,做出更像一个程序的程序

我们将learn02.py的代码改写如下

result = input("请输入一个整数:")

num = int(result)

if num%2 == 0:
    print("这是一个偶数")
else:
    print("这是一个奇数")

运行源代码后,命令行会等待你输入,我们输入整数后敲回车,则输出了结果

看到行号为1代码,这里input()和我们之前讲的print()一样,也是一个函数,括号中传入的参数是一个字符串,它是一个提示性的文本内容,是可选的,我们也可以不传入任何参数,但是传入提示语会更友好,我们在命令行就看到了这个提示语。input()这个函数的字面意思是输入,它的功能也是从命令行中接收用户的输入并非返回。看到代码中,我们将用户的输入保存到了变量result中。

再看到行号3的代码,这里int()也是一个函数,它的作用是将传入的字符串参数转换为整数类型,并将转换后的内容保存到变量num中。int是英文单词整数(integer)的缩写

一下子学了两个新的函数,可能会感觉脑袋发懵,不用急,慢慢来,如果不是很理解,那么我们可以写一点试验代码体悟一下,学编程就是需要勤动手,不断写试验代码去验证体会。

n = input()

print("hello "+n)

新建一个.py文件,写入如上代码,运行后,命令行会等待我们输入内容,我们输入任意内容后回车,则将hello字符串和我们输入的内容拼接后输入出。

从这两行代码我们可以验证两点

  • input()函数用于在命令行中接收用户的输入

  • 代码运行到input()函数那行时会暂停,print函数并不会被运行,一直等待用户输入内容并回车后,才会继续执行下面的print函数语句

字符串类型与整型
首先打开命令行,输入python,打开python的交互式环境,用于我们比较字符串类型与整型的区别

python中有字符串类型(str)和整型(int),字符串对应的单词是string,str为其缩写,整型即整数类型,缩写为int。我们将字符串"5""6"分别赋值给变量ab,则ab无法进行算术计算,报错内容正是告诉我们非整型的字符串是不能进行乘法运算的,而当我们对整型nl做乘法时则运算正常。

到这里,想必就已经彻底明白了,input()函数接收用户输入后,返回的数据是字符串类型,因此learn02.py代码中,需要对返回的结果result调用int()函数,将字符串类型转换成整型,完成num%2的取模运算。

拓展
上面的结论我们口说无凭,如何证明呢?这时候我们可以通过使用另一个函数type()检测数据的类型,编写如下代码

print(type(25))
print(type("25"))

result = input("请输入任意内容:")
print(type(result))

1.4 重复的艺术:循环

人们都讨厌机械式的重复工作,那有什么办法将我们从机械式的重复劳动中解放出来呢?答案就是循环!虽然人类讨厌机械式的重复工作,但是计算机却仿佛乐此不疲。

1.4.1 while 循环

编写如下代码并运行

i = 0
while i < 100:
    print("I love U !")
    i = i + 1

运行结果可以看到,我们让程序说了一百次"I love U !",当然,我们可以修改阈值,让它说一万次一亿次都不费吹灰之力,这就是循环的魔力

请注意while下的语句有四个空格的缩进!虽然讲if时已经强调,但对于初学者,仍需要不断提醒

当条件表达式为True时,while中的缩进语句从上往下依次执行,当缩进语句全部执行完之后,回到条件表达式的判断处,再次判断条件表达式是否为True,如果为True,继续循环执行语句,反之,则循环退出。需要注意的是,循环最重要的部分是控制循环。即控制循环何时退出?

为了控制循环的退出条件,我们在循环外部定义了变量i,并赋初始值为0,当循环体执行到第4行代码时,进行了一个算术运算,要记住,赋值符号"="的左边是一个整体,首先计算了这个表达式之后,再将结果进行赋值,那么0 + 1等于1,故此时i的值变成了1,以此不断的循环,i变量的值不断累加,最终在i等于100时,不满足while的条件表达式,退出循环

流程图

1.4.2 永不退出的循环——死循环

while表达式的值恒为True时,则循环体永远不会退出

while True:
    print("I love U !")

运行以上代码后,命令行无法退出,则在命令行中使用【Ctrl】+【C】强制退出Python程序。

死循环在某些情况下是有用的,比如游戏编程、网络服务等,但这些不在我们今天讨论的范围,大多数时候,我们都必须为循环设置退出的条件。

i = 0
while True:
    if i > 10:
        break

    print("i=", i)
    i += 1

在以上代码中,我们又学了一个新的关键字break,这个单词的中文意思是中断,我们很容易理解,当变量i的值大于10的时候,满足了if条件判断,因此进入if语句块,break这句话被执行,当break被执行时,表示立刻退出循环,在循环体中的break之后的语句都不会再执行。

我们还学了一种简单的表示累加的符号+=,这个复合符号表示的意思非常简单

i += 1 等价于 i = i + 1
i += 2 等价于 i = i + 2
i += 3 等价于 i = i + 3
……

让我们再举一反三,是不是还有*=-=\=呢?是的,加减乘除,都有对应的运算符,表达的意思和我们上面讲的相同。

1.4.3 写个小游戏提提神

说实话,我觉得大家学得已经够多了,但还没写几行真正像样的代码,是的,这里我们写一个小游戏玩一玩,简简单单几行代码,都是大家学过的,却足够写个小游戏了,这就是Python的魅力。

print("**********************************************")
print("************* 欢迎来到猜数字游戏 *************")
print("**********************************************")

result = 104
while True:
    n = input("请猜一个数字:")
    num = int(n)

    if num == 104:
        print("恭喜你,猜对了呢!")
        break
    else:
        if num > 104:
            print("你猜的数字大了呢!")
        else:
            print("你猜的数字小了呢!")


print("**********************************************")
print("***************** Game Over ******************")
print("**********************************************")

简单解释一下,我们首先定义了一个变量result,它的值为104,作为玩家猜测的数字;然后我们写一个死循环,在循环体中调用之前讲的input函数,用于接收用户的输入,接着将用户输入的字符串类型变量n转换为整数类型保存到变量num中,最后就是逻辑判断咯,只有三种情况,玩家猜测的数字要么猜中,要么比之大,要么比之小,所以我们在第一个else语句块中又分两种情况,比之大和比之小。如果玩家猜中了,那么我们不仅要输出"恭喜你,猜对了呢!"这句话,还要执行break退出循环,当整个循环体退出后,则继续执行循环体外面的语句,输出Game Over等信息

1.4.4 使用更好的工具

这一节简单说一下Sublime text 3这个工具,该工具是经常被推荐的Python代码编辑器,我们在第零天已经推荐过了,这里假设大家已经安装好了,先看颜值

我们选择菜单栏【Tools】> 【Build】即可运行Python代码

该编辑器安装插件后即可拥有代码提示功能,妥妥的轻量级IDE。

(1)、首先需要安装包管理器
选择菜单栏【View】 > 【Show Console】菜单打开控制台,将下面的Python代码粘贴到控制台里,然后敲回车键,请保持网络通畅,等待在线安装

import urllib.request,os,hashlib; h = '6f4c264a24d933ce70df5dedcf1dcaee' + 'ebe013ee18cced0ef93d5f746d80ef60'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); print('Error validating download (got %s instead of %s), please try manual install' % (dh, h)) if dh != h else open(os.path.join( ipp, pf), 'wb' ).write(by)

关闭并重新打开Sublime Text 3,如果在【Perferences】>【package settings】中能看到【package control】这一项,则表示安装成功。

(2)、安装代码提示插件
使用Ctrl + Shift + P打开Package Control控制台,接着输入install,选择联想出来的install package

在弹出的Install Package输入框中输入sublimecodeintel,然后点击列表提示的sublimecodeintel安装即可,由于是在线安装,需视网络情况等待

好了,今天的内容先到这里吧,主要是好好体会一下逻辑判断+循环的妙用。


请关注公众号:编程之路从0到1

只要关注,即可获取网盘资源!
配合本教程,还有视频讲解哦,不容错过
在这里插入图片描述

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程之路从0到1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值