Python入门1

前言:只会一门编程语言java的我想再学习一下Python(最近几年很火,而且以后想学机器学习的话也用的上,所以想先学学),虽然好多人都说简单,但它毕竟还是一门语言啊,对Python刚接触的我还是无从下手,于是就上网搜了下Python教程,后来找到了这个作者写的这个系列,总体来说对入门来说是够用了,我用了一天的时间把这个系列全部读完,虽然对Python还达不到熟练的程度,但也算是入了门了。为了能帮助别人,于是我就把http://crossincode.com/course/lesson_list/这个系列总结成三篇文章。

 

目录:
1.安装
2.python版本2和版本3之间的区别
3.Print
4.IDE
5.输入
6.变量
7.bool
8.if
9.while
10.random
11.变量2
12.逻辑判断
13.for循环
14.字符串
15.字符串格式化
16.字符串格式化2
17.循环的嵌套
18.类型转换
19.bool类型转换

 

1.安装
在Windows系统上安装Python的方法还算简单,比平常装个软件稍稍麻烦一点。进入Python的官方下载页面Python.org/download,你会看到一堆下载链接。我们就选“Download the latest version for Windows”(选最新的即可)。

下载之后,就和装其他软件一样,双击,一路Next,想换安装路径的同学可以换个位置。但不管换不换,请把这个路径复制下来,比如我的是“C:\python27\”,后面要用到它。另外有个要注意的是,如果有“add python.exe to path”这个选项,请选中它,会让你省不少事。(不同版本这里有差异)

安装结束还没完,我们还差最后一步:设置环境变量。如果你上一步按照我说的,选上了“add python.exe to path”,则可略过此步骤。这是什么东西我暂时先不解释,大家照着做就好。右键单击我的电脑,依次点击"属性"->"高级"->"环境变量",在“系统变量”表单中点击叫做Path的变量,然后编辑这个变量,把“;C:\Python27\”,也就是你刚才复制的安装路径,加到它的结尾。注意!要用英文分号和前面已有的内容隔开。然后点确定,点确定,再点确定。完成。
注意1:win7系统是右键单击“计算机”,点击“属性”->“高级系统设置”->“环境变量”
注意2:win10系统需要在Path里新建一条记录,把路径加进去,无需分号
注意3:环境变量里会有用户变量和系统变量两类,如果添加后无效,建议在两类的Path里都加上路径,或者尝试重启下系统
注意4:设置完要重新打开命令行

怎么知道你已经成功安装了Python呢?这时候你需要打开命令行,或者叫命令提示符、控制台。方法是:点击开始菜单->程序->附件->命令提示符;或者直接在桌面按快捷键“Win+r”,Win键就是Ctrl和Alt旁边那个有windows图标的键,输入cmd,回车。这时候你就看到可爱的黑底白字了。

在命令行里输入python,回车。如果看到诸如:
Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:19:30) [MSC v.1500 32 bit (Intel)] on win32
的提示文字,恭喜你!否则,请重新检查你哪里的打开方式不对。

接下来,你就可以输入那句程序员最爱的
print("Hello World")
向Python的世界里发出第一声啼哭。注意:一定要用英文引号!py3一定要加上括号()!

 

2.python版本2和版本3之间的区别,最大的两个坑:print和input
print
我们在课程最开始的时候就讲过print,在版本2的使用方法是:
print 'this is version 2'
也可以是
print('this is version 2')
但到了3,就只能加上括号,像一个函数一样来使用print:
print('this is version 3')
假如你看了基于2的教程,然后又装了python 3,可能就会奇怪为什么完全照着写,结果却不一样。

 

另外2里不换行输出是加上逗号:
print '*',
到了3里就要改成:
print('*', end=' ')

 

input
而input就更绕一点。2里面有两个用来从命令行接受输入的函数:input和raw_input。
value = input()
input接收的是一个值或变量,也就是说,你如果输123,程序接收到的就是整数123,你输True,就是bool值True。如果你输了abc,程序会认为这是一个叫做abc的变量,而假如你没有定义过这个变量,就会报错。
所以,当你想用input得到一段文字的话,必须把文字写在引号""或''中。
text = raw_input()
raw_input接收的则是你输入的字符串,而不管你输的是什么内容。如果你直接拿raw_input得到的“数字”去比较大小,则会得到奇怪的结果。
在版本3里,为了减少混乱,这两种输入方式被合并了。只是合并的方式又坑了新手:它保留了input这个名字和raw_input的效果。3里只有input函数,它接收你输入的字符串,不管你输的是什么。
text = input()
这种情况下,不管你是看着3的教材用2,还是看着2的教材用3,都会踩到这个坑。3里直接拿 input 得到的“数字”比较大小,会报错类型不同无法比较。

 

那么在3里,如何像2一样得到用户输入的一个值呢?方法是eval():
value = eval(input())
或者,如果你只是需要一个整数值,也可以:
value = int(input())

 

除了一开始遇到的这两个坑外,还有其他一些可能遇到的变动,这里以3与2相比的差异来说:
- 打开文件不再支持file方法,只能用open
- range不再返回列表,而是一个可迭代的range对象
- 除法/不再是整除,而是得到浮点数,整除需要用双斜杠//
- urllib和urllib2合并成了urllib,常用的urllib2.urlopen()变成了urllib.request.urlopen()
- 字符串及编码相关有大变动,简单来说就是原来的str变成了新的bytes,原来的unicode变成了新的str。
变动不止这些,这里仅列出初学者比较常见的几个。

 

3.Print
print,中文意思是打印,在python里它不是往纸上打印,而是打印在命令行,或者叫终端、控制台里面。print是python里很基本很常见的一个操作,它的操作对象是一个字符串(什么是字符串,此处按住不表,且待日后慢慢道来)。基本格式是:
   print 你要打印的东西
或者
   print(你要打印的东西)
这里一定要英文字符的括号,所有程序中出现的符号都必须是英文字符,注意别被你的输入法坑了。
注意:如果你是python3及以后的版本,一定得用print(),不然会出错。

 

各位同学可以在自己的python环境中试着输出以下内容:
>>> print "hello"
hello
>>> print('world')
world
>>> print 1
1
>>> print(3.14)
3.14
>>> print 3e30
3e+30
>>> print 1 + 2 * 3
7
>>> print(2 > 5)
False
直接在print后面加一段文字来输出的话,需要给文字加上双引号或者单引号。大家发现,print除了打印文字之外,还能输出各种数字、运算结果、比较结果等。你们试着自己print一些别的东西,看看哪些能成功,哪些会失败,有兴趣的话再猜一猜失败的原因。

 

其实在python命令行下,print是可以省略的,默认就会输出每一次命令的结果。就像这样:
>>> 'Your YiDa!'
'Your YiDa!'
>>> 2+13+250
265
>>> 5<50
True

 

4.IDE
什么是IDE?英文叫做Integrated Development Environment,中文就是集成开发环境。嗯,等于没说。
打个不恰当的比方,如果说写代码是制作一件工艺品,那IDE就是机床。再打个不恰当的比方,PS就是图片的IDE,Word就是doc文档的IDE,PowerPoint就是ppt文件的IDE。python也有自己的IDE,而且还有很多。
python自带了一款IDE,叫做IDLE。先说Windows,Windows上安装了之后,可以在“开始菜单”里找到它。打开后之后很像我们之前用过的命令行。没错,它就是的,在里面print一下试试。不知之前用命令行的同学有没有注意到,命令行输一行命令就会返回结果,而且之前print了那么多,关掉之后也不知道到哪里去了。所以它没法满足我们编写弱智小游戏的大计划。我们需要用新的方法!
点击窗口上方菜单栏的“File”->“New Window”(有些版本是“New File”),会打一个长得很像的新窗口,但里面什么也没有。这是一个文本编辑器,在这里面就可以写我们的python程序了。继续print几行,这次可以多print一点:

现在是,见证奇迹的时刻!点击“Run”->“Run Module”,或者直接按快捷键F5。会提示你保存刚才文件,随便取个名字,比如“lesson3.py”。(.py是python代码文件的类型,虽然不指定.py也是可以的,但建议还按规范来)保存完毕后,之前那个控制台窗口里就会一次性输出你要的结果。
以后想再次编辑或运行刚才的代码,只要在IDLE里选择“File”->“Open...”,打开刚才保存的.py文件就可以了。
除了官配的 IDLE,还有一些很好用的第三方 IDE,把文件目录、文本编辑器、命令行都整合到了一起,还增加了很多辅助功能,配置好之后用起来应该比 IDLE 方便。这其中首推 PyCharm,它之前是收费软件,现在已经推出了免费版本,足够一般的学习和开发使用。有兴趣的同学也可以去找来试试看。

 

5.输入
之前print了那么多,都是程序在向屏幕“输出”。那有来得有往,有借得有还,有吃。。。咳咳!那啥,我们得有向程序“输入”信息的办法,才能和程序对话,进行所谓的“人机交互”。
python有一个接收命令行下输入的方法:
   input()
注意:和print不同的是,这次我们必须得加上()了,而且得是英文字符的括号。(py3里print也需要括号)

 

好了,终于可以搬出那个弱智小游戏了,耶!游戏里我们需要跟程序一问一答,所以我们先把话给说上。
打开我们的python编辑器,我这里用的是IDLE。在代码编辑器中输入下面几句代码:
print "Who do you think I am?"
input()
print "Oh, yes!"
然后,点击Run -> Run module。你会在命令行中看到,程序输出了第一句之后就停住了,这是input在等待你的输入。切记,这里是在控制台里输入内容后回车,而不是把你要输的东西提前写在括号里!括号里可以加文字,但那只是用来作为输入的提示符。
输入你的回答,回车。你会看到程序的回答。注意!引号!!又是引号!!!和print一样,如果你输的是一串文字,要用引号''或者""引起来,如果是数字则不用。
(注意:插一句,python还有一个输入的方法:raw_input(),它把所有的输入都直接当作一串字符,于是就可以不用加引号,有兴趣的同学可以试一试,体会一下两者的不同。关于这个令人纠结的引号,我们以后会再讨论它。)
(注意2:py3里的input()相当于py2的raw_input(),得到的都是字符串,而非数值!)
看上去不错哦,似乎就这么对上话了。是不是觉得离小游戏的完成迈进了一大步?可是大家发现没有,即使你说"Idiot!",程序仍然会淡定地回答"Oh, yes!"因为它左耳进右耳出,根本就没听进去我们到底说了啥。那怎么才能让它认真听话呢?啪!且听下回分解。

 

6.变量
前面说到,需要让程序理解我们输入的东西。那首先,就需要有东西把我们输入的内容记录下来,好为接下来的操作做准备。Python之神说,要有变量!于是就有了变量。
变量,望文生义,就是变化的量。python里创建一个变量的方法很简单,给它起个名字,然后给它一个值。举起几个栗子:
name = 'Crossin'
myVar = 123
price = 5.99
visible = True
“=”的作用是把右边的值赋予给左边的变量。

 

这里说一下另外一个概念,叫做“数据类型”,上面4颗栗子分别代表了python中较常见的四种基本类型:
# 字符串 - 表示一串字符,需要用''或""引起来
# 整数
# 浮点数 - 就是小数
# bool(布尔) - 这个比较特殊,是用来表示逻辑“是”“非”的一种类型,它只有两个值,True和False。(注意这里没有引号,有了引号就变成字符串了)

 

再次用到我们熟悉的print。这次,我们升级了,要用print输出一个“变量”:
name = 'Crossin'
print name
看到结果了吗?没有输出“name”,也没有报错,而是输出了“Crossin”。现在是不是能想明白一些,为什么之前print一段文字没加引号就会报错,而print一个数字就没有问题呢?
它叫变量,那就是能变的。所以在一次“赋值”操作之后,还可以继续给它赋予新的值,而且可以是不同类型的值。
a = 123
print a
a = 'hi'
print a
“=”的右边还可以更复杂一点,比如是一个计算出的值:
value = 3 * 4
print value
value = 2 < 5
print value
甚至,也可以是input():
name = input()
print name

 

于是,我们又可以进化一下我们的小游戏了。把上次写的内容稍微改一下,加上变量:
print "Who do you think I am?"
you = input()
print "Oh, yes! I am a"
print you
看来程序已经知道我们的输入了。接下来,就要让它学会对不同的答案做出判断。这个我们留到下次再说。

 

7.bool
逻辑判断在编程中是非常重要的。大量的复杂程序在根本上都是建立在“真”与“假”的基本逻辑之上。而bool所表示的就是这种最单纯最本质的True/False,真与假,是与非。
来看下面的例子:
a = 1 < 3
print a
b = 1
c = 3
print b > c
通过用“>”“<”来比较两个数值,我们就得到了一个bool值。这个bool值的真假取决于比较的结果。
“>”“<”在编程语言中被称为比较(关系)运算符,常用的比较(关系)运算符包括:
>:大于
<:小于
>=:大于等于
<=:小于等于
==:等于。比较两个值是否相等。之所以用两个等号,是为了和变量赋值区分开来。
!=:不等与

 

还有一种逻辑运算符:
not:逻辑“非”。如果x为True,则not x为False
and:逻辑“与”。如果x为True,且y为True,则x and y为True
or:逻辑“或”。如果x、y中至少有一个为True,则x or y为True
比较运算符和逻辑运算符的结果都是bool类型的值。
关于bool值和逻辑运算其实远不止这些,但现在我们暂时不去考虑那么多,以免被绕得找不到北。最基本的大于、小于、等于已经够我们先用一用的了。
试试把bool加到我们的小游戏里:

 

num = 10
print 'Guess what I think?'
answer = int(input())

result = answer<num
print 'too small?'
print result

result = answer>num
print 'too big?'
print result

result = answer==num
print 'equal?'
print result

代码比之前稍微多了一点,解释一下。
第一段代码:先创建一个值为10的变量num,输出一句提示,然后再输入一个值给变量answer。(注意:为了避免 py3 的报错,这里我们将input的结果强行转成int)
第二段代码:计算answer<num的结果,记录在result里,输出提示,再输出结果。
第三段、第四段都与第二段类似,只是比较的内容不一样。
看看结果是不是跟你预期的一致?虽然看上去还是有点傻,但是离目标又进了一步。(这里不管正确与否,答案都会被输出。如果只想输出正确的结果,学到后面课程就知道了)
现在数数你手上的工具:输入、输出,用来记录数值的变量,还有可以比较数值大小的逻辑运算。用它们在你的python里折腾一番吧。
 

 

8.if
继续上次的程序。我们已经能让程序判断我们输入的值了,但这程序还是有点呆,不管怎样都要把话说三遍。因为到目前为止,我们的程序都是按照顺序从上到下一行接一行地执行。有同学发来问题了:怎么能让它根据我们输入的结果来选择执行呢?答案就是 -- if
来看一张图(纯手绘,渣画质)

解释一下,程序顺序往下执行遇到if语句的时候,会去判断它所带条件的真假。
“如果”为True,就会去执行接下来的内容。“如果”为False,就跳过。

语法为:
if 条件:
    选择执行的语句
特别说明:条件后面的冒号不能少,同样必须是英文字符。
特别特别说明:if内部的语句需要有一个统一的缩进,一般用4个空格。python用这种方法替代了其他很多编程语言中的{}。你也可以选择1/2/3...个空格或者按一下tab键,但必须整个文件中都统一起来。千万不可以tab和空格混用,不然就会出现各种莫名其妙的错误。所以建议都直接用4个空格。

上栗子:
thisIsLove = input()
if thisIsLove:
    print "再转身就该勇敢留下来"
试试看?输入True,就会得到回答。输入False,什么也没有。(如果你那里输出中文有问题,请自行改成英文)
注意:py3的话,输入任何都会有回答,直接回车才是什么也没有。

 

所以,我们的游戏可以这样改写:

if在编程语言中被称为“控制流语句”,用来控制程序的执行顺序。还有其他的控制流语句,后面我们会用到。

 

9.while
先介绍一个新东西:注释。
python里,以“#”开头的文字都不会被认为是可执行的代码。
   print "hello world"

   print "hello world"    #输出一行字
是同样的效果。但后者可以帮助开发者更好地理解代码。
在接下来的课程中,我会经常用注释来解释代码。
#======== while ========#
用if改进完我们的小游戏后,功能已经基本实现了。很多同学做完后纷纷表示,每次只能猜一
次,完了之后又得重新run,感觉好麻烦。能不能有办法让玩家一直猜,直到猜中为止?答案很显然,如果这种小问题都解决不了,那python可就弱爆了。
最简单的解决方法就是while。
同if一样,while也是一种控制流语句,另外它也被称作循环语句。继续来看渣画质手绘流程图:

程序执行到while处,“当”条件为True时,就去执行while内部的代码,“当”条件为False时,就跳过。
语法为:
while 条件:
    循环执行的语句

 

同if一样,注意冒号,注意缩进。
今天的栗子:
a = 1            #先a设为1
while a != 0:  #a不等于0就一直做
    print "please input"
    a = int(input())
print "over"
想想怎么用while改进小游戏?有多种写法,大家自己思考下,我不多做说明了。下图给出一种方法。

注意,这里出现了两层缩进,要保持每层缩进的空格数相同。
到此为止,小游戏已经基本成型了。不过好像还差一点:每次自己都知道答案,这玩起来有神马意思。
下节来讲,怎么让你不知道电脑的答案。

 

10.random
之前我们用了很多次的print和input方法,它们的作用是实现控制台的输入和输出。除此之外,python还提供了很多模块,用来实现各种常见的功能,比如时间处理、科学计算、网络请求、随机数等等等等。今天我就来说说,如何用python自带的随机数模块,给我们的小游戏增加不确定性。
引入模块的方法:
from 模块名 import 方法名
看不懂没关系,这东西以后我们会反复用到。今天你只要记住,你想要产生一个随机的整数,就在程序的最开头写上:
from random import randint
之后你就可以用randint来产生随机数了。
还记得input后面的()吗,我们使用randint的时候后面也要有()。而且,还要在括号中提供两个数字,先后分别是产生随机整数范围的下限和上限。例如:
randint(5, 10)
这样将会产生一个5到10之间(包括5和10)的随机整数。
放到我们的小游戏里,用
   num = randint(1, 100)
替代
   num = 10
程序在运行时候,会产生一个1到100的随机整数,存在answer里,我们也不知道是多少,真的全靠猜了。

好了,觉得还有点意思么?我们终于一步步把这个弱智小游戏给做出来了,有没有一丁点的成就感呢?
如果你对其中的某些细节还不是很理解,恭喜你,你已经开始入门了。相信你会带着一颗追求真相的心,在编程这条路上不断走下去。

 

11.变量2
变量这东西,我们已经用过。有了变量,就可以存储和计算数据。我们来讲点变量的细节。
#==== 变量命名规则 ====#
变量名不是你想起就能起的:
(1)第一个字符必须是字母或者下划线“_”
(2)剩下的部分可以是字母、下划线“_”或数字(0-9)
(3)变量名称是对大小写敏感的,myname和myName不是同一个变量。
几个有效的栗子:
i
__my_name
name_23
a1b2_c3
几个坏掉的栗子(想一下为什么不对):
2things
this is spaced out
my-name

 

#==== 变量的运算 ====#
我们前面有用到变量来存储数据:
   num = 10
   answer = input()
也有用到变量来比较大小:
   answer < num
除此之外,变量还可以进行数学运算:
   a = 5
   b = a + 3
   c = a + b
python中运算的顺序是,先把“=”右边的结果算出了,再赋值给左边的变量。
下面这个例子:
   a = 5
   a = a + 3
   print a
你会看到,输出了8,因为先计算出了右边的值为8,再把8赋给左边的a。
通过这种方法,可以实现累加求和的效果。它还有个简化的写法:
   a += 3
这个和a = a + 3是一样的。
于是,利用变量、循环、累加,可以写一个程序,来完成传说中高斯大牛在小时候做过的题:
1+2+3+...+100=?
从1加到100等于多少?

 

12.逻辑判断
一个逻辑表达式,其实最终是代表了一个bool类型的结果,比如:
1 < 3
这个就像当于是一个True的值
2 == 3
这个就是False
把它们作为判断条件放到if或者while的后面,就是根据他们的值来决定要不要执行。
同样的栗子再来几颗:
a = 1
print a>3  #False
print a==2-1  #True
b = 3
print a+b==2+2  #True
比较容易搞混的,是bool变量的值和一个逻辑表达式的值,比如:
a = False
print a  #False
print a==False  #True
虽然a本身的值是False,但是a==False这个表达式的值是True。(说人话!)“a”是错的,但“a是错的”这句话是对的。

 

回到上面那几个概念:
bingo=False
把bingo设为一个值为False的变量
bingo==False
判断bingo的值是不是False,如果是,那么这句话就是True
while在判断条件条件为True时执行循环,所以当bingo==False时,条件为True,循环是要执行的。
晕了没?谁刚学谁都晕。不晕的属于骨骼惊奇百年一遇的编程奇才,还不赶紧转行做程序员!
逻辑这东西是初学编程的一大坑,我们后面还要在这个坑里挣扎很久。

 

13.for循环
大家对while循环已经有点熟悉了吧?今天我们来讲另一种循环语句:
for ... in ...
同while一样,for循环可以用来重复做一件事情。在某些场景下,它比while更好用。
比如之前的一道习题:输出1到100(回复903可看详细内容)。
我们用while来做,需要有一个值来记录已经做了多少次,还需要在while后面判断是不是到了100。
如果用for循环,则可以这么写:
for i in range(1, 101):
   print i
解释一下,range(1, 101)表示从1开始,到101为止(不包括101),取其中所有的整数。
for i in range(1, 101)就是说,把这些数,依次赋值给变量i。
相当于一个一个循环过去,第一次i = 1,第二次i = 2,……,直到i = 100。当i = 101时跳出循环。
所以,当你需要一个循环10次的循环,你就只需要写:
for i in range(1, 11)
或者
for i in range(0, 10)
区别在于前者i是从1到10,后者i是从0到9。当然,你也可以不用i这个变量名。
比如一个循环n次的循环:
for count in range(0, n)
for循环的本质是对一个序列中的元素进行递归。什么是序列,以后再说。先记住这个最简单的形式:
for i in range(a, b)
从a循环至b-1

 

14.字符串
字符串就是一组字符的序列(序列!又见序列!还记得我说过,range就是产生一组整数序列。今天仍然不去细说它。),它一向是编程中的常见问题。之前我们用过它,以后我们还要不停地用它。
python中最常用的字符串表示方式是单引号('')和双引号("")。我还是要再说:一定得是英文字符!
'string'和"string"的效果是一样的。

 

可以直接输出一个字符串
print 'good'
也可以用一个变量来保存字符串,然后输出
str = 'bad'
print str

 

如果你想表示一段带有英文单引号或者双引号的文字,那么表示这个字符串的引号就要与内容区别开。
内容带有单引号,就用双引号表示
"It's good"
反之亦然
‘You are a "BAD" man’

 

还有一种在字符串中表示引号的方法,就是用\,可以不受引号的限制
\'表示单引号,\"表示双引号
'I\'m a \"good\" teacher'
\被称作转译字符,除了用来表示引号,还有比如用
\\表示字符串中的\
\n表示字符串中的换行
\还有个用处,就是用来在代码中换行,而不影响输出的结果:
"this is the\
same line"
这个字符串仍然只有一行,和
"this is thesame line"
是一样的,只是在代码中换了行。当你要写一行很长的代码时,这个会派上用场。

 

python中还有一种表示字符串的方法:
三个引号(''')或者(""")
在三个引号中,你可以方便地使用单引号和双引号,并且可以直接换行
'''
"What's your name?" I asked.
"I'm Han Meimei."
'''

 

15.字符串格式化
我们在输出字符串的时候,如果想对输出的内容进行一些整理,比如把几段字符拼接起来,或者把一段字符插入到另一段字符中间,就需要用到字符串的格式化输出。
先从简单的开始,如果你想把两段字符连起来输出
str1 = 'good'
str2 = 'bye'
你可以
print str1 + str2
或者还可以把字符变量一个字符串相加
print 'very' + str1
print str1 + ' and ' + str2

 

但如果你想要把一个数字加到文字后面输出,比如这样
num = 18
print 'My age is' + num
程序就会报错。因为字符和数字不能直接用+相加。
一种解决方法是,用str()把数字转换成字符串
print 'My age is' + str(18)

num = 18
print 'My age is' + str(num)
还有一种方法,就是用%对字符串进行格式化
num = 18
print 'My age is %d' % num
输出的时候,%d会被%后面的值替换。输出
My age is 18
这里,%d只能用来替换整数。如果你想格式化的数值是小数,要用%f
print ‘Price is %f’ % 4.99
输出
Price is 4.990000

 

如果你想保留两位小数,需要在f前面加上条件:%.2f
print ‘Price is %.2f’ % 4.99
输出
Price is 4.99
另外,可以用%s来替换一段字符串
name = 'Crossin'
print '%s is a good teacher.' % name
输出
Crossin is a good teacher.
或者
print 'Today is %s.' % 'Friday' 
输出
Today is Friday.
注意区分:有引号的表示一段字符,没有引号的就是一个变量,这个变量可能是字符,也可能是数字,但一定要和%所表示的格式相一致。
现在,试试看用字符串格式化改进一下之前你写的小游戏。
比如你输了一个数字72,程序会回答你
72 is too small.
或者
Bingo, 72 is the right answer!

 

16.字符串格式化2
之前我们说到,可以用%来构造一个字符串,比如
print '%s is easy to learn' % 'Python'
有时候,仅仅代入一个值不能满足我们构造字符串的需要。假设你现在有一组学生成绩的数据,你要输出这些数据。在一行中,既要输出学生的姓名,又要输出他的成绩。例如
Mike‘s score is 87.
Lily‘s score is 95.

 

在python中,你可以这样实现:
print "%s's score is %d" % ('Mike', 87)
或者
name = ‘Lily’
score = 95
print "%s's score is %d" % (name, score)
无论你有多少个值需要代入字符串中进行格式化,只需要在字符串中的合适位置用对应格式的%表示,然后在后面的括号中按顺序提供代入的值就可以了。占位的%和括号中的值在数量上必须相等,类型也要匹配。
('Mike', 87)这种用()表示的一组数据在python中被称为元组(tuple),是python的一种基本数据结构,以后我们还会用到。

 

17.循环的嵌套
设想一样,如果我们要输出5个*,用for循环要这么写
for i in range(0, 5):
   print '*'
如果想让这5个*在同一行,python2的话就在print语句后面加上逗号
for i in range(0, 5):
   print '*',
python3需要加上end参数:
for i in range(0, 5):
   print('*', end=' ')
但如果我想要这样一个图形,怎么办?
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
当然,你可以循环5次,每次输出一行“* * * * *”。那如果再进一步,这样呢?
*
**
***
****
*****

 

除了你自己动手打好一个多行字符串外,也可以让程序帮我们解决这种问题,我们需要的是两个嵌套在一起的循环:
for i in range(0, 5):
   for j in range(0, 5):
       print i, j
第二个for循环在第一个for循环的内部,表示每一次外层的循环中,都要进行一遍内层的循环。
看一下输出的结果:
0 0
0 1
0 2
0 3
0 4
1 0
...
4 4
内层循环中的print语句一共被执行了25次。
i从0到4循环了5次。对应于每一个i的值,j又做了从0到4五次循环。所以5*5一共25次。
所以如果要输出一个5*5的方阵图案,我们可以
for i in range(0, 5):
   for j in range(0, 5):
       print '*',
   print
注意:第二个print的缩进和内层的for是一样的,这表明它是外层for循环中的语句,每次i的循环中,它会执行一次。
print后面没有写任何东西,是起到换行的作用,这样,每输出5个*,就会换行。
要输出第二个三角图案时,我们需要根据当前外层循环的序数,设置内层循环应当执行的次数。
for i in range(0, 5):
   for j in range(0, i+1):
       print '*',
   print
内层的j每次从0到i+1进行循环。
这样,当第一次i=0时,j就是range(0,1),只输出1个*。
而当最后一次i=4时,j就是range(0,5),输出5个*。
最后顺便说下,如果有同学用的是PyScripter,或者其他第三方IDE,可以通过debug中的step,查看程序是怎样一行一行运行的。IDLE在这方面做得不太好,虽然也可以步进调试,但是很麻烦且不直观,所以就不推荐去用了。

 

18.类型转换
#==== 类型转换 ====#
python的几种最基本的数据类型,我们已经见过:
字符串
整数
小数 (浮点数)
bool类型
python在定义一个变量时不需要给它限定类型。变量会根据赋给它的值,自动决定它的类型。你也可以在程序中,改变它的值,于是也就改变了它的类型。例如
a = 1
print a
a = 'hello'
print a
a = True
print a
变量a先后成为了整数、字符串、bool类型。

 

虽然类型可以随意改变,但当你对一个特定类型的变量进行操作时,如果这个操作与它的数据类型不匹配,就会产生错误。比如以下几行代码
print ‘Hello’+1
print ‘hello%d’ % '123'
程序运行时会报错。因为第一句里,字符串和整数不能相加;第二句里,%d需要的是一个整数,而'123'是字符串。
这种情况下,python提供了一些方法对数值进行类型转换:
int(x) #把x转换成整数
float(x) #把x转换成浮点数
str(x) #把x转换成字符串
bool(x) #把x转换成bool值
上述两个例子就可以写成:
print ‘Hello’+str(1)
print ‘hello%d’ % int('123')
以下等式的结果均为真:
int('123') == 123
float('3.3') == 3.3
str(111) == '111'
bool(0) == False

 

并不是所有的值都能做类型转换,比如int('abc')同样会报错,python没办法把它转成一个整数。
另外关于bool类型的转换,我们会专门再详细说明。大家可以先试试以下结果的值,自己摸索一下转换成bool类型的规律:
bool(-123)
bool(0)
bool('abc')
bool('False')
bool('')

 

19.bool类型转换
  bool('False')
print一下结果,会发现是True。这是什么原因?
因为在python中,其他类型转成 bool 类型时,以下数值会被认为是False:
   为0的数字,包括0,0.0
   空字符串,包括'',""
   表示空值的None
   空集合,包括(),[],{}
其他的值都认为是True。
None是python中的一个特殊值,表示什么都没有,它和0、空字符、False、空集合都不一样。关于集合,我们后面的课程再说。
所以,‘False’是一个不为空的字符串,当被转换成bool类型之后,就得到True。
同样bool(' ')的结果是True,一个空格也不能算作空字符串。
bool('')才是False。

 

在if、while等条件判断语句里,判断条件会自动进行一次bool的转换。比如
   a = '123'
   if a:
       print 'this is not a blank string'
这在编程中是很常见的一种写法。效果等同于
if bool(a)
或者
if a != ''

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值