第3章 成为高手前必须知道的一些基础知识-上
3.1 变量
在改进之前那个小游戏之前,有些必须必须掌握的知识需要来讲解一下。
变量名就像我们现实社会的名字,把一个值赋值给一个名字时,Ta会存储在内存中,称之为变量(variable)。通过那个名字可以操作那个变量,在现实生活中也相当于叫别人的名字,别人给予你回应,同时可以交流。
在大多数编程语言中,都把这种行为称为“给变量赋值”或“把值存储在变量中”。但是Python就在那里唱我们不一样,它并不是把值存储在变量中,而更像是把名字”贴”在值的边上。所以有些Python程序员会说“Python”没有“变量”,只有“名字”。 我们可以通过那个名字去操作。
变量为什么不叫”恒量”,而叫变量?正是因为它是可变的!
创建一个变量,名字叫x,并给它初始化赋值为3,其他的同样这样来理解,我就不写啦
>>> x = 3
>>> x = 5
>>> y = 8
>>> z = x + y
>>> print(z)
13
同样的方式也可以运用到字符串中:
>>> myteacher = "小甲鱼"
>>> yourteacher = "老甲鱼"
>>> ourteacher = myteacher + yourteacher
>>> print(ourteacher)
小甲鱼老甲鱼
这种字符串加字符串的语法,在Python里成为字符串的拼接。
PS.小提示(大影响)
在使用变量之前,需要对其先赋值。
字符名可以包括字母、数字、下划线,但是变量名不能以数字开头,受C语言的影响,或者说是Python这门语言就是由C语言写出来的
字母可以是大写或小写,但是大小写是不同的。
等号(=)是赋值的意思,左边是名字,右边是值,遇到等号先看右边,不可以写反了。
变量的命令理论可以取任何合法的名字,但是作为一个优秀的程序员(假装自己很优秀),请将尽量给变量去一个专业一点儿的名字,简单来说就是见名知意。
3.2 字符串
其实字符串就是引号内的一切东西,也就是用引号包括起来的东西的都是字符串,无论是单引号还是双引号
直接让两个数字相加,那么Python会直接将数字相加之后的结果告诉你:
>>> 5 + 8
13
你可以先猜一下'5' + '8'
结果,不要看下面的答案哦
>>> '5' + '8'
'58'
那上面那个在数字两边是加上了引号,就变成字符串的的拼接啦,这是引号带来的差别:
引号可以带来的问题:
1.不成双成对,不专一:
为什么这么说呢?创建一个字符串,就要自强字符两边加上引号,可以是单引号或者双引号,Python表示都可以,很大度,但是你不能一边使用单引号,另一边却花心地用上双引号结尾,Python说大哥,你在干啥呢,你是过来捣乱的吗?
>>> 'Python I Love you!"
SyntaxError: EOL while scanning string literal
>>> "Python I Love you!'
SyntaxError: EOL while scanning string literal
通过上面的例子得出,要专一啊,这就要像你一边跟Python说我爱你,一边搂着小C,所以,面对这么完美的语言,我们要学会专一,不犯错误。
2.字符串内容中需要出现单引号或双引号
我做出第一步尝试(直接写,不管它),作死,出现语法错误的报错
>>> 'Let 's go'
SyntaxError: invalid syntax
解决办法:
1.使用转义符号(\
)对字符串中的引号进行转义:
>>> 'Let \'s go'
"Let 's go"
2.只要用上不同的引号表示字符串,Python就不会误解你的意思。简单来说就是外层使用单引号,内层使用双引号,或者是外层使用双引号,内层使用单引号,避免错误的发生
>>> "Let 's go"
"Let 's go"
3.3 原始字符串
好像反斜杠是一个好东西,但不妨试试打印C:\now:
>>> string = 'C:\now'
>>> string
'C:\now'
>>> print(string)
C:
ow
打印的结果出乎意料,原因是反斜杠(\
)和后边的字符(n)恰好转义之后构成了换行符(\n),我们可以使用加反斜杠对自身进行转义,这样可以解决那个问题:
>>> string = 'C:\\now'
>>> string
'C:\\now'
>>> print(string)
C:\now
但如果有一个字符串有多个反斜杠,我觉得是会很难看懂,而且要看很久,可能是代码变得混乱,有没有办法解决呢?
有个快捷方法,就是使用原始字符串,按照意思来说,就是保持原来的模样。
使用方法很简单,只需要在字符串前边加上一个英文字母r即可。
>>> string = r'C:\now'
>>> string
'C:\\now'
>>> print(string)
C:\now
PS.小提示(大影响)
无论是否原始字符串,都不能以反斜杠作为结尾(反斜杠放在字符串的末尾表示该字符串还没有结束,换行继续的意思,之后会涉及到),你可以选择坚持,犯错误,才会学会
>>> string = 'FishC\'
SyntaxError: EOL while scanning string literal
>>> string = r'FishC\'
SyntaxError: EOL while scanning string literal
如果非要在字符串的结尾加个反斜杠,有什么办法可以灵活实现吗?
先把答案亮出来,看不懂,我慢慢讲解,我的理解是这样,不知道有没有理解错误,加一个转义字符()
>>> string = 'FishC\\'
>>> print(string)
FishC\
另外再加个题目:如果非要在原始字符串结尾输入反斜杠,可以如何灵活处理?
>>> str = r'C:\Program Files\FishC\Good''\\'
>>> print(str)
C:\Program Files\FishC\Good\
解析如下:
1.字符串可以用‘’或“”,只要字符串两端是同一类型的引号即可。引号中间部分会原样输出,并没有转义。简单来说,就是假如外层用了单引号,内层使用双引号,双引号会输出
2.两字符串直接放一起是拼接的意思。 str = r’C:\Program Files\FishC\Good”\’个人理解是这样的:r’C:\Program Files\FishC\Good’,与‘\’两个字符串是单独处理的,前面由于加了r(表示不转义),所以‘c:\program Files\FishC\Good’没有转义,第2个字符串‘\’第一个‘\’将第2个‘\’进行了转义,所以输出是‘\’ ,然后再拼接在一起。
3.4 长字符串
如果希望得到一个跨越多行的字符串
从明天起,做一个幸福的人
喂马、劈柴,周游世界
从明天起,关心粮食和蔬菜
我有一所房子,面朝大海,春暖花开
从明天起,和每一个亲人通信
告诉他们我的幸福
那幸福的闪电告诉我的
我将告诉每一个人
如果要打印这首诗打印出来,那么使用\n
实现换行,这样好吗?我觉得我会累死,我选择不用这种方式,推荐一种方便的方法:
只要使用三重引号字符串(“”“内容”“”)就可以解决这个问题,ps单双引号都可以
>>> print('''
如果希望得到一个跨越多行的字符串
从明天起,做一个幸福的人
喂马、劈柴,周游世界
从明天起,关心粮食和蔬菜
我有一所房子,面朝大海,春暖花开
从明天起,和每一个亲人通信
告诉他们我的幸福
那幸福的闪电告诉我的
我将告诉每一个人
''')
结果实现换行,我就不把结果显示出来啦
PS.小提示(大影响)
编程中使用的标点符号都是英文的!
3.5 改进我们的小游戏
之前的小游戏真的太简单啦,大概有以下几个方面的需要改进:
- 当用户猜错的时候程序应该给点提示,比如告诉用户输入的值比答案是大了还是小了。
- 每运行一次程序只能猜一次,应该提供多次机会给用户猜测,至少要三次嘛,人非圣贤,孰能一击即中,你说是吧
- 每次运行程序,答案可以是随机的。因为答案固定的话,容易导致答案外泄,那岂不是每个都是小甲鱼的蛔虫。
可以先自己想一下,抄起家伙(Python)干掉它
参考资料是:零基础入门学习Python小甲鱼的书和视频教程