第二章 变量和简单数据类型

2.1  变量

程序

    message = "Hello Python world"
print(message)
运行这个程序,输出结果与以前相同
Hello Python world
在这里我们添加了一个名为message的变量。每个变量都存储了一个值————与变量相关联的信息。
添加变量导致Python解释器需要做更多的工作。处理第1行代码的时候,它将文本“Hello Python world”与变量message关联起来;而处理第2行代码时,它将与变量message关联的值打印到屏幕。
下面来进一步扩展这个程序:修改hello_world.py,使其再打印一条消息。为此,在hello_world.py中添加一个空行,在添加下面两行代码:
hello_world.py
    message = "Hello Python world"
print(message)

message = "Hello Python Crash Course world!"
print(message)
现在运行这个程序,将看到两行输出:

    Hello Python world
    Hello Python Crash Course world!

在程序中可随时修改变量的值,而Python将始终记录变量的最新值。

2.2.1  变量的命名和使用

    在Python中使用变量时,需要遵守一些规则和指南。违反这些规则将引发错误,而指南旨在让你编写的代码更容易阅读和理解。请务必牢记下述有关变量的规则。

    (一)、变量名只能包含字母,数字和下划线。变量名可以字母或下划线打头,但不能以数字打头,例如,可将变量命名为message_1,但不能将其命名为1_message。

    (二)、变量名不能包含空格,但可以使用下划线来分隔其中的单词。例如变量名greeting_message可行,但变量名greeting message会引发错误,这是因为,Python会将greeting message当成两个词,会在里面找这样的语法是否正确,没有这样的语法表示就会报错;而将greeting_message统一当成一个变量。

    (三)、不要讲Python关键字和函数名用作变量名,即不要使用Python保留用于特殊用途的单词,如print。

    (四)、变量名即应简短又具有描述性。例如,name比n好,student_name比s_n好,name_length比;length_of_persons_name好。

    (五)、慎用小写字母l和大写字母O,因为它们可能被人错看成数字1和0。

注意:在Python中应使用小写的变量名。在变量名中使用大写字母虽然不会导致错误,但避免使用大写字母是个不错的主意,而且大写字母的单词有其特殊用途,比如创建类的时候,要用大写字母来打头,比如class Nameusers,创建一个用户类。

动手试一试

    请完成下面的练习,在做每个练习时,都编写一个独立的程序。保存每个程序时,使用符合标准的Python约定文件名:使用小写字母和下划线,如simple_message.py和simple_messages.py。
2-1 简单消息:将一条消息存储到变量中,在将其打印出来。
2-2 多条简单消息:将一条消息存储到变量中,将其打印出来;在将变量的值修改作为一条新消息,并将其打印出来。
2-1
python.py
message = "I like python!"
print(message)

2-2
lucky_python.py
message = "I like python!"
print(message)

message = "I like python too!"
print(message)

message = "I really like python!"
print(message)

results:

I like python!

I like python too!

I really like python!

2.2字符串
字符串就是一系列字符。在Python中,用引号括起来的都是字符串,其中的引号可以是单引号,也可以是双引号,如下所示:
"This is a strint."
'This is also a string."
这种灵活性让我们能够在字符串中包含引号和撇号:
’I told my friend,"Python is my favorite language!"'
"The language 'python' is named after Monty Python, not the snake."

注意:在使用双引号和撇号的过程中,一定要注意,不能出现""""或者"'"'等情况,一定要注意正确使用,因为两个引号直接Python就会默认你已经输入了一条完整的语句了。

2.2.1 使用方法修改字符串的大小写
字符串的大小写修改方法有三种方式,a.title(),a.upper()和 a.lower()
a.title():表示让单词首字母大写;a.upper():表示让单词所有字母都大写;a.lower()表示让所有单词字母都小写,三种不同的方法针对不同的情况
name.py
name = "ada lovelace"
print(name.title())
results:
Ada Lovelace
在这个实例中,小写的字符串"ada lovelace"存储到了变量中。在print()语句中,方法title()出现在这个变量的后面。方法是Python可对数据进行的操作。在name.title()中,name后面的句点(.)让Python对变量name执行方法title()制定的操作。每个方法后面都跟着一对括号,这是因为方法通常是需要额外的信息来完成其工作。这种信息是在括号内提供的。函数title()不需要额外的信息,因此它后面的括号是空的。
title()以首字母大写的方式显示每个单词,即将每个单词的首字母都改为大写。这很有用,因为你经常需要将名字视为信息。例如,你可能希望程序将值Ada,ADA和ada视为同一个名字,并将它们都显示为Ada。
还有其他两种方式,全部转化为大写,全部转化为小写的方式如下:
print(name.upper())
print(name.lower())

results:
print(name.upper())
print(name.lower())
存储数据时,方法lower()很有用。很多时候,你无法依靠用户来提供正确的大小写,因此需要讲字符串先转化为小写,再存储它们。以后需要显示这些信息时,在将其转换为最合适的大小写方式。
这种情况在我们输入网站验证码的时候很有用,我们在注册一个新的网站的时候也经常遇到这样的问题,网站要求我们输入验证码,但是无论我们输入的是大写的还是小写的都没有关系。
假如:网站后台提供了随机的验证码,有大写有小写,里面肯定存在这转换机制,将我们输入的验证码转换为统一的格式在跟后台生成的验证码进行比较,比如:
#网站随机生成的验证码,有大写还有小写
site_verification_code = "ABadf"
#输入用户看到的验证码,用户可以随便输入,不管大小写都没有关系
user_verification_code = input("Please enter the verification code: ")

if user_verification_code.lower() == site_verification_code.lower():
#如果用户输入的验证码(转换为小写格式)跟网站随机生成的验证码是一致的,那么用户就可以进入网站,否则就需要重新输入
print("Welcome to Baidu.")
else:
print("The code you entered is incorrect, please re-enter: ")
results:

Please enter the verification code: abadf
Welcome to Baidu.
我们输入abadf或者abADf,只要是跟网站随机生成的验证码一致,最后都会进入到网站里面,这就与验证码的验证机制类似;
假如我们输入了错误的验证码,比如acadf,看结果是怎样的如下:
results:
Please enter the verification code: acadf
The code you entered is incorrect, please re-enter:
这个时候程序运行结果提示我们,我们输入的验证码是错误的,需要我们重新输入,当然这个程序没有加入循环语句,这个是可以添加循环的,可以是无限循环,也可以设置输入多少次,编程就是对现实世界的描述,在编程中体现它。

2.2.2 合并(拼接)字符串
在很多情况下,都需要合并字符串。例如,我们可能将姓和名存储在不同的变量中,等要显示姓名时,再将它们合二为一:
full_name.py
first_name = "ada"
last_name = "lovelace"
full_name = first_name + " " + last_name
print(full_name.title())

results:

Ada Lovelace
Python使用加号(+)来合并字符串。在这个实例中,我们使用+来合并first_name、空格和last_name,以得到完整的姓名,在Python中,编程是可以美丽的,让程序看起来整洁漂亮,所以需要时刻修饰代码,让代码看起来整洁美观。
比如添加一些空格、换行符、特殊符号(-," "等),制表符等,让代码看起来整齐有序,让人有一种享受感,耳目一新。

2.2.3 使用制表符或换行符来添加空白
在编程中,空白泛指任何非打印字符,如空格、制表符和换行符。我们可以只用空白来组织输出,以使代码更易读,而且美观有序。
要在字符串中添加制表符,可使用字符组合 ;要在字符串中添加换行符,可使用字符组合 :
print("Languages:
	Python
	C
	JavaScript")

results:
Languages:
    Python
    C
    JavaScript
换行符和制表符可以组合使用,可以让结果美观,在编程的过程中,不仅要得到结果,也要尽可能让结果看起来更整齐漂亮。

2.2.4 删除空白
在程序中,额外的空白可能令人迷惑。如"python"和"python "看起来几乎没有什么两样,但是对程序来说,它们是两个不同的字符串,Python能够发现"python "中的额外空白,并认为它们是有意义的--除非你告诉它不是这样的。
Python能够找出字符串开头和末尾多余的空白。要确保字符串末尾没有空白,可使用方法rstrip()
favorite_language.py
favorite_language = "python "
print(favorite_language,"Character length :" + str(len(favorite_language)))
print(favorite_language.rstrip(),"Character length: " + str(len(favorite_language.rstrip())))
results:
python  Character length :7
python Character length: 6
在上面程序中,我们对程序进行了处理,输出了原始程序以及长度,还有剔除空格后的长度,可以看出,在Python中,加空格和不加空格是不一样的,必要的时候要剔除多余的空格。
提出空格有三种方法,rstrip()、lstrip()和strip()。
单词strip的含义是:除去,剥去;剥夺;删除;清除,拆除,在Python中主要是删除空格,rstrip()是删除单词右边的空格,lstrip()是left+strip的缩写,意思是删除单词左边的空格,制霸单词strip()是删除单词两侧的空格;
学过excel函数的应该知道,excel函数trim()也是为了删除空格的,但是它能删除单词中间的空格,在Python中strip()方法是不可以的,只能删除两侧的空格:
比如:在excel中,trim(" I love Python ") = "I love Python",但是在Python中,使用strip()方法,得到的结果是:"I love Python"是无法删除字符串中间的字符的。
然而,这种删除只是暂时的,并没有真正的从favorite_language中删除右边的空格,只是在输出结果的时候我们得到了我们想要看到的结果。
要永久删除这个字符串中的空白,必须将删除操作的结果存回到变量中:
favorite_language = favorite_language.rstrip()
为删除这个字符串中的空白,需要将其末尾的空白删除,在将结果存回到原来的变量中。在编程中,经常需要修改变量的值,在将新值存回到原来的变量中。这就是变量的值可能随程序的运行或用户的输入数据而发生变化的原因。

2.2.4 使用字符串时避免语法错误
Python对输入的单词很严格,大小写,字符格式等都要严格终于,有一个地方出错系统就会报错,我也经常遇到这样的问题,比如字符串和数字拼接,经常会忘记把数字转化为字符串,这样系统就会报错。


动手试一试:

2-3 个性化消息 讲用户的姓名存储到一个变量中,并向该用户显示出一条消息。显示的消息非常简单,如"Hello Eric, would like to learn Some Python today?"
2-4 调整名字的大小写



name = "Eric"
print("Hello " + name + ', would like to learn some Python today?')

首先我们创建一个姓名叫做"Eric"的家伙,然后输出一条语句,注意,要做好分段,比如"Hello "是一段,name是变量,', would like to learn some Python today?'也是一段要输出的字符,单引号,双引号都可以使用,但是一定要注意,不能在一个字段中同时使用。


2.2.5 主要考察我们title(),upper(),lower()的使用
my_name = "Alex is sb."
print(my_name)
print(my_name.title())
print(my_name.upper())
print(my_name.lower())
results:
Alex is sb.
Alex Is Sb.
ALEX IS SB.
alex is sb.
首先我们定义了一个姓名,"Alex is sb.",然后首先不加任何方法输出,接着使用title()首字母大写,upper()全部大写,lower()全部小写的方式进行输出。这几种方法用的多的是在规范操作上,要统一格式。

2.2.6 主要考察我们单引号和双引号的使用
print('Lu Sun once said, "Time is like a sponge in the water, as long as the original squeeze, there are always some"'
)

比如,我们输出结果中要包含双引号,那么我们括号引用的时候就要使用单引号,这样python就能把整段当成一句话,避免错误。

2.2.7 只要是练习存储变量,如果要输入多个名人,可以使用函数来循环显示,不过名人的名言不一样,就需要定义两个参数
famous_person = "Lu Sun"
message = famous_person + ' once said, "Time is like a sponge in the water, as long as the original squeeze, there are always some."'
print(message
)
results:
Lu Sun once said, "Time is like a sponge in the water, as long as the original squeeze, there are always some."

2.2.7 主要联系" "和" "还有rstrip(),lstrip()和strip()
my_name = "     Sora Aoi    "
print(my_name)
#在名字前面添加制表符,验证strip是否能够删除制表符,因为都是删除的空格,可以自己尝试一下
user_name =" " + my_name
"""验证strip是否能够删除空行"""
your_name = " " + my_name
print(user_name)
print(your_name)

print(user_name.strip())
print(your_name.strip())
results:
     Sora Aoi    
         Sora Aoi    

     Sora Aoi    
Sora Aoi
Sora Aoi
从输出结果可以看出,最后两条记录,结果都不包含制表符和空行了,所记录中能够看出,strip不仅仅是对空单元有用;可以自己尝试一下在名字中间加上空行是否能够删除,我自己尝试了,如果名字中间包含制表符或者空行是删除不了的,strip只能够对单词两边的空白起作用。

2.3 数字
在编程中,经常使用数字来记录游戏得分、表示可视化数据、存储Web应用信息等。Python根据数字的用法以不同的方式处理它们。鉴于整数使用起来最简单,下面就看Python是如何管理它们的。

2.3.1 整数
在Python中,可对整数执行加(+)、减(-)、乘(*)、除(/)、乘方(**)、求余(%)运算。
>>> 2+3
5
>>> 3-2
1
>>> 2**2
4
>>> 3/2
1.5
>>> 4.0/2
2.0
>>> 4.00/2
2.0
>>> 4/2.00
2.0
>>> 10**6
1000000
>>> 5%2
1
运算是有优先级的,但是在实际运算过程中我们不必过分关心它,因为我们可以使用括号()来改变运算的优先级,让它按照我们的方法来执行运算的次序。

2.3.2 浮点数
Python将带小数点的数字都称为浮点数。大多数编程语言都使用了这个术语,它指出了这样一个事实:小数点可出现在数字的任何位置。每种编程语言都
须细心设计,以妥善地处理浮点数,确保不管小数点出现在什么位置,数字的行为都是正常的。
从很大程度上说,使用浮点数时都无需考虑其行为。只需输入要使用的数字,Python通常都会按照我们期望的方式处理它们。
>>> 0.1+0.1
0.2
>>> 0.2+0.2
0.4
>>> 2*0.1
0.2
>>> 2*0.2
0.4
但需要注意的是,结果包含的小数位数可能是不确定的:
>>> 0.2+0.1
0.30000000000000004
>>> 3*0.1
0.30000000000000004
>>> 0.1**2
0.010000000000000002
所有语言都存在这种问题,没有什么可担心的。Python会尽力找到一种方式,以尽可能精确地表示结果,但鉴于计算机内部的数字的方式,这在有些情况下很难
。就现在而言,暂时忽略多余的小数点即可。

2.3.3 使用函数str()避免类型错误
我们经常需要在消息中使用变量的值。例如,假如要祝某人生日快乐,可能会在中间加入年龄,例如祝某人多少岁生日快乐
birthday.py
age = 23
message = "Happy " + age + "rd Brithday"
print(message)
这样运行如下:
Traceback (most recent call last):
  File "/home/zhuzhu/title2/name.py", line 2, in <module>
    message = "Happy " + age + "rd Brithday"
TypeError: Can't convert 'int' object to str implicitly

运行提示,int数字类型不能跟str字符型的进行合并(拼接),要想实现字符串的与数字之间的拼接功能,一定要把数值转换为字符串,这个错误说实话我也经常犯,
希望大家共勉,这个点一定要注意,有数字的时候一定要转化为字符串才能够合并拼接。

2-9 最喜欢的数字 将你最喜欢的数字存储在一个变量中,再使用这个变量创建一条消息,支出你最喜欢的数字,然后将这条消息打印出来。
分析:其实这道题主要是考察我们是否记得在数字和字符串相加的时候把数字转化为字符串,一定要记得进行转换,不然会报错,跟上面一样,所以首先我们定义了
一个数字,做为我们的行为数字,然后打印一句话,我们的幸运数字是6,只是记得在字符串跟数字拼接的过程中一定要把数字转化为字符串。
lucky_num = 6
message = "My lucky num is " + str(lucky_num) + "."
print(message)
results:
My lucky num is 6.

2.4 注释
在大多数编程语言中,注释都是一项很有用的功能。本书前面编写的程序中都只包含Python代码,但随着程序越来越大、越来越复杂,就应在其中添加说明
,对我们解决问题的方法进行大致的阐述。 注释让你能够使用自然语言在程序中添加说明。

2.4.2 该编写什么样的注释
编写注释的主要目的是阐述代码要做什么,以及是如何做的。在开发项目期间,你对各个部分如何协同工作了如指掌,但过段时间后,有些细节你可能不记得了。
当然,你总是可以通过研究代码来确定各个部门的工作原理,但通过编写注释,以清晰的自然语言对解决方案进行概述,可节省很多时间。
要成为专业的程序员或与其他程序员合作,就必须编写有意义的注释。当前,大多数软件都是合作编写的,编写者可能是同一家公司的多名员工,也可能是众多
致力于同一个开源项目的人员。训练有素的程序员都希望代码中包含注释,因此我们最好从现在开始就在程序中添加描述性注释。作为新手,最值得养成的习惯之一是
,在代码中编写清晰、简洁的注释。
如果不确定是否要编写注释,就问问自己,找到合理的解决方案前,是否考虑了多个解决方案。如果答案是肯定的,就编写注释对你的解决方案进行说明吧。相比回过头
再添加注释,删除多余的注释要容易的多。所以从现在开始,要养成良好的添加注释的习惯。

2.5 Python之禅
编程语言Perl曾在互联网领域长期占据着统治地位,早期的大多数交互式网站使用的都是Perl脚本。彼时,“解决问题的办法有多个”被Perl社区奉为座右铭。
这种理念一度深受大家的喜欢,因为这种语言固有的灵活性使得大多数问题都有很多不同的解决之道。在开发项目期间,这种灵活性是可以接受的,但大家最终认识到,
过于强调灵活性会导致大型项目难以维护:要通过研究代码搞清楚当时解决复杂问题的人是怎么想的,既困难又麻烦,还会耗费大量的时间。
经验丰富的程序员倡导尽可能避繁就简,Python社区的理念都包含在Tim Peters编写的“Python之禅”中。要获悉这些有关编写优秀Python代码的指导原则,只需要在解释器中执行命令
import this。就能查看编写程序的原则,指导性意见。
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

Beautiful is better than ugly.
Python程序员笃信代码可以编写的漂亮而优雅。编程是要解决问题的,设计良好、高效而漂亮的解决方案都会让程序员心生敬意。随着对Python的认识越来
越深入,并使用它来编写越来越多的代码,有一天也许会有人站在你后面惊呼:“哇,代码编写的真是偏亮!”

Simple is better than complex.
如果有两个解决方案,一个简单,一个复杂,但都行之有效,就选择简单的解决方案吧。这样,你编写的代码将更容易维护,你或他人以后改进这些代码时也会
更容易。
Complex is better than complicated.
现实是复杂的,有时候可能没有简单的解决方案。这种情况下,就选择最简单可行的解决方案吧。
Readability counts.
即便是复杂的代码,也要让它易于理解。开发的项目涉及复杂代码时,一定要为这些代码编写有益的注释。
There should be one -- and preferably only one --obvious way to do it.
如果让两名Python程序员去解决同一个问题,他们提供的解决方案应大致相同。这并不是说编程没有创意空间,而是恰恰相反!然而,大部分编程工作都是
使用常见解决方案来解决简单的小问题,但这些小问题都包含在更庞大、更有创意空间的项目中。在你的程序中,各种具体细节对Python程序员来说都应易于理解。



 
 





 
 












 
 
原文地址:https://www.cnblogs.com/gengcx/p/6584933.html