尝试在hello_python.py中使用一个变量。例如:
message = "Hello Python"
print (message)
运行这个程序,结果如下:
Hello Python
添加一个名为message的变量。每个变量都存储了一个值,与变量相关联的信息,在这段代码中,存储的值为文本"Hello Python"。
添加变量会导致python编译器做更多的工作。在处理第一行代码的时候,它将"Hello Python"与message关联起来。在处理第二行的代码时,它将message关联的值打印到屏幕上。原理大概是这样的,如图:
好,接下来继续扩展该程序,修改代码,如下:
message = "Hello Python"
print (message)
message = "Hello World"
print (message)
运行结果如下:
Hello Python
Hello World
可以看到,在程序中可以随时修改变量的值,而Python会始终记录变量的最新值。
原理如图:
那么"Hello Python"会不会一直在内存中呢?是不会的,Python会进行内存清理,以后再说这个回收。
要创建良好的变量名,需要经过一定的实践,在程序复杂而有趣时尤其如此。随着编写的程序越来越多,并开始阅读别人编写的代码,将越来越善于创建有意义的变量名。
程序员都会犯错误,而且大多数的程序员每天都会犯错误。虽然优秀的程序员也会犯错,但是他们知道更快速的消除错误。看一下命名错误,或者是粗心可能会导致的错误,如下:
message = "Hello Python"
print (mesage)
这里少写了一个s,如果不使用开发集成环境,而是编辑一个简单的代码,用的是文本编辑。那么运行起来会如何呢?
Traceback (most recent call last):
File "hello_python.py", line 2, in <module>
print (mesage)
NameError: name 'mesage' is not defined
可以看到,Python解释器提供给了一个Traceback。Traceback是一条记录,指出了解释器尝试运行代码时,在什么地方遇到了困境,如上的错误信息。解释器发现了一个名称错误,并指出打印的变量mesage未定义:Python无法识别提供的变量名。名称错误通常意味着两种情况:要么是使用变量前忘记了给它赋值,要么是输入变量名时拼写错误。
Python的解释器不会对代码做拼写检查,但是要求变量名称一致,也就是说无论单词是否拼写正确,只要能在使用的时候对应上就没有问题。好在现在有开发继承环境,可以帮助检查代码。像上面我拼写的错误示例当中,在集成开发环境Pycharm中,会标注红色的波浪线警告这里可能存在问题。如图
很多编程错误都很简单,只是在程序的某一行输错了一个字符。为找出这种错误而花费很长时间的大有人在。很程序员天资聪颖、经验丰富却为找出这种细微的错误花数小时。,可能觉得这很好笑,但别忘了,在编程生涯中,经常会有同样的遭遇。在编程生涯中,可能会遇到无数的问题,但是大多数时候,最后的问题往往都在于自己忽略了细节。
字符串就是一系列字符。在Python中,用引号括起的都是字符串,其中的引号可以是单引号
也可以是双引号。平时书写的文字,就是字符串,当前看到的文字也是字符串。如下所示:
"I am a teacher."
'I am a teacher.'
这种灵活性能够在字符串中包含单引号和撇号:
'I told my friend,"Python is my favorite language!"
"The Language'Python'is named after Monty Python,not the snake."
"One of Python's strengths is its diverse and supportive community."
接下来看一下操作字符串的方式。
字符串,最简单的可执行的操作之一就是修改其中的单词的大小写。
name = "wang er xiao"
print(name.title())
执行结果:
Wang Er Xiao
方法是Python可对数据执行的操作,在name.title()中,name后面的.让Python对变量name执行方法title()指定的操作。每个方法后面都跟着一对括号,这是因为方法通常是需要额外的信息来完成工作的。这种信息是在括号内提供的。函数title()不需要额外的信息,因此括号里面是空的。
同样的print()也是一个方法,它需要的信息就是字符串,它的作用就是把该字符串打印到控制台上。
title()以首字母大写的形式显示每个单词,即将每个单词的首字母都改成大写,例如,要将Abc,abc,ABc,ABC都改为首字母大写为Abc。这在处理名字时很实用。
此外还可以将字符串全部的转换为大写或者全部为小写。
name = "WANG er xiao"
print(name.lower())
print(name.upper())
结果
wang er xiao
WANG ER XIAO
方法lower()把字符串全部转换为小写,方法upper()把字符串全部转换为大写
在存储数据的时候,方法lower()很有用。很多的时候,无法依靠用户来提供正确的大小写,因此需要将字符串先转换为小写,在存储他们。需要它们的时候,再将其转换为需要的形式。
在很多情况下,需要拼接字符串,比如存储了用户的名字和年龄的时候,想要输出给用户
name = "WANG er xiao"
message = name.title() + ",age = 16"
print(message)
在这里,“WANG er xiao"赋值给了name变量,name变量用方法title()进行转换,转换之后拼接了"age = 16”,最后拼接的结果赋值给了message变量。打印message变量,结果为
Wang Er Xiao,age = 16
在编程中,空白泛指任何非打印字符,如空格,制表符和换行符。可以用空白来组织输出,使其更易读。
要在字符串中添加制表符,可使用字符组合\t,如下代码
print ("\tpython")
结果:
python
要在字符串中添加换行符,可使用字符组合\n(换行符)
print ("\npython\njava")
结果:
python
java
在程序中,额外的空白可能令人迷惑。对于程序员来说,“python"和” python"看起开几乎没什么区别。但是对于程序来说,它们却是不同的字符串。Python会发现额外的空格,并且认为它是有意义的,除非告诉它不是这样的。
空白是跟重要的,比如经常比较两个字符串是否相等,“python"与” python"是否是相等的,人们可能认为语义是相同的,然而实际上:
print ("python" == " python")
结果:
False
他们在python解释器上,是完全不相同的。
Python能够找出字符串开头和末尾多余的空白。要确保字符串末尾没有空白,可使用方法rstrip()。
language = "python "
print (language.rstrip())
print (language)
结果:
"python"
"python "
可以发现,第一次打印的时候,是没有空格,第二次打印的时候,还是有空格的。这里的原因是,language这个变量指向了内存中的"python ",在第一次调用rstrip()方法时,是拿到了内存中的"python ",并进行了去掉尾部空格的操作,返回了去掉尾部空格的字符串。并没有改变原有的内存的值。
如果想要永久的删除这个字符串的空白,必须将删除操作的结果存回原来的变量中。
language = "python "
language = language.rstrip();
print (language)
结果:
"python"
大概如图:
在编程中,经常需要修改变量的值,再将新值存回到原来的变量中。这就是变量的值可随程序的运行或用户的输入数据而发生变化的原因。
还可以剔除字符串开头的空白,或同事剔除字符串两端的空白。为此可分别使用lstrip()和strip()。
可以发现。去除左空白就是(left strip)的缩写,又空白就是(right strip)的缩写。
language = " pyt hon "
print (language.lstrip())
print (language.strip())
print (language.rstrip())
结果:
"pyt hon "
"pyt hon"
" pyt hon"
语法错误是一种时不时会遇到的错误。程序中包含非法的Python代码时,就会导致语法错误。
print ("I'm a teacher!")
结果:
I'm a teacher!
然而
print ('I'm a teacher!'')
结果:
File "/Users/wangyuhang/PycharmProjects/untitled/hello_python.py", line 1
print ('I'm a teacher!'')
^
SyntaxError: invalid syntax
上述输出可知,错误发生在第二个引号后面。这种语法错误表明,在解释器看来,其中有些内容不是python的代码。今后会遇到多种多样的错误,善于总结,才能快速成长。
在编程中,经常使用数字来记录各种信息。Python根据数字的用法以不同的方式处理它们。整数看起来最简单,先看看Python是如何管理它们的
Python中,可以对整数执行加(+)减(-)乘(*)除(/)运算
print (1+1)
print (2-1)
print (1*2)
print (4/2)
输出
2
1
2
2
Python可以使用两个乘号(**)表示乘方运算
print (1**2)
print (2**2)
print (3**4)
输出
1
4
81
Python还支持运算次序,因此可在同一个表达式中使用多种运算。还可以使用括号来修改运算次序,让Python按指定的次序执行运算。
print (3 + 4 * 5)
print (( 3 + 4) * 5)
输出
23
35
空格不影响Python计算表达式的方式,它们存在只是更好的阅读代码。
Python将带小数点的数字都称为浮点数。在很大程度上说,使用浮点数时都无需考虑其行为。只需要输入要使用的数字,Python通常都会按照期望的方式处理
print (0.1 + 0.1)
print (0.1 * 0.1)
输出
0.2
0.01
需要注意的是,结果包含的小数位数可能是不确定的。
所有的语言都存在这种情况,没什么可担心的,鉴于计算机内部表示数字的方式,就现在而言,暂时忽略它,今后再学习如何处理多余小数位的方式。
在处理信息时,经常使用字符串拼接。例如我们打印一个人的名字和年龄
age = 16
name = "wang er xiao"
print (name + age)
打印
Traceback (most recent call last):
File "/Users/wangyuhang/PycharmProjects/untitled/hello_python.py", line 3, in <module>
print (name + age)
TypeError: cannot concatenate 'str' and 'int' objects
这是一个类型错误,意味着Python无法识别使用的信息。Python解释器发现使用了一个值为Int类型的变量,Python知道age这个变量标识的可能是数值16,也可能是字符1和6。像上面这样在字符串中使用整数时,需要显示的希望Python将这个age变量用作字符串。为此,可以调用函数str()。
age = 16
name = "wang er xiao"
print (name + "\t" + str(age))
打印
wang er xiao 16
在Python中,注释用(#)标识。井号后面的都会被解释器忽略。
# 打印你好
print ("hello".title())
打印:
SyntaxError: Non-ASCII character '\xe6' in file /Users/wangyuhang/PycharmProjects/untitled/hello_python.py on line 2, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
会发现报错了,原因是我用的集成开发环境为pycharm,
python的默认编码文件是用ASCII码,没有支持UTF-8,而python文件中使用了中文等非英语字符
解决办法,在文件开头的位置添加 # -- coding: UTF-8 -- 或者 #coding=utf-8
# coding=utf-8
# 打印你好
print ("hello".title())
打印:
Hello
编写注释的主要目的是阐述代码要做什么,以及是如何做的。在开发项目期问,对各个部
分如何协同工作了如指掌,但过段时间后,有些细节可能不记得了。当然,总是可以通过研
究代码来确定各个部分的工作原理,但通过编写注释,以清晰的自然语言对解决方案进行概述
可节省很多时间。
要成为专业程序员或与其他程序员合作,就必须编写有意义的注释。当前,大多数软件都是
合作编写的,编写者可能是同一家公司的多名员工,也可能是众多致力于同一个开源项目的人员。
训练有素的程序员都希望代码中包含注释,因此最好从现在开始就在程序中添加描述性注释。