1、习题 4: 变量(variable)和命名

学习目标:了解Python中变量的定义,学习定义简明易记的变量名

变量:变量是存储内存中的值,就是每定义一个变量就会在内存中开辟一个空间。基于变量的类型。解释器会分配指定的内存,并解决什么数据可以被存储到内存中。

在Python中使用变量时,变量不需要提前定义,只需要给变量赋值即可,赋值的过程就是创建这个变量的过程。但是如果要使用这个变量,必须要给这个变量赋值。

变量的命名规则:

  • 变量名只能是字母、数字、下划线的任意组合,但是不能是数字开头,且不能包含空格
  • 不能使用Python预留的关键字
  • Python支持中文变量名,但是一般不建议使用
  • 变量名要有意义,有描述性,简明,一般采用驼峰式命名方法

习题四中的练习代码是:

# 定义汽车数量的变量car ,并给变量car赋值为100
cars = 100 # 定义汽车内空间的变量space_in_a_car ,并为其赋值4.0
space_in_a_car = 4.0 # 定义司机人数的变量drivers , 并为其赋值30
drivers = 30 # 定义乘客数量的变量drivers , 并为其赋值30
passengers = 90 # 定义无法行驶的车辆数量的变量cars_not_driven ,其值为上面定义的cars变量和drivers变量相减为70
cars_not_driven = cars - drivers # 再定义可以形式的车辆数量变量cars_driven , 然后将变量drivers的值赋值给变量cars_driven
cars_driven = drivers # 定义最大拼车容量的变量carpool_capacity,将变量cars_driven和变量space_in_a_car值做乘法为120.0
carpool_capacity = cars_driven * space_in_a_car # 定义变量平均每辆车中的乘客数量变量average_passengers_per_car ,将变量passengers和变量cars_driven值做除法得到结果为3
average_passengers_per_car = passengers / cars_driven # 下面是打印输出变量所代表的值
print "There are", cars, "cars avaiable." print "There are only", drivers, "drivers avaiable." print "There will be", cars_not_driven, "empty cars today" print "We can transport", carpool_capacity, "people today." print "We have", passengers, "to carpool today." print "We need to put about", average_passengers_per_car, "in each car."

上述代码的运行结果为:

C:\Python27\python.exe D:/pythoncode/stupid_way_study/demo4/Exer4-1.py
There are 100 cars avaiable.
There are only 30 drivers avaiable.
There will be 70 empty cars today
We can transport 120.0 people today.
We have 90 to carpool today.
We need to put about 3 in each car.

在上面练习代码时,不注意程序运行后报了个错:

原因:报错提示是说在第19行car_pool_capacity这个变量没有定义,我们知道变量在使用前必须要先赋值,但是上面赋值的变量是carpool_capacity,和写错的变量名差了一个下划线,说明这是两个变量,不能混用。

2、加分习题:

  1. 我在程序里用了 4.0 作为 space_in_a_car 的值,这样做有必要吗?如果只用 4

    会有什么问题?
  2. 记住 4.0 是一个“浮点数”,自己研究一下这是什么意思。
  3. 记住 = 的名字是等于(equal),它的作用是为东西取名,记住 _ 是下划线字符(underscore)。
  4. 将 python 作为计算器运行起来,就跟以前一样,不过这一次在计算过程中使用变

    量名来做计算,常见的变量名有 i , x , j 等等。

3、我的答案:

1、我在程序里用了 4.0 作为 space_in_a_car 的值,这样做有必要吗?如果只用 4

会有什么问题

没有必须,因为在Python2中,整数运算中只有除法运算中才会产生小数部分被舍弃的情况,乘法中并不会产生丢弃小数部分的情况,Python3中默认是都不会舍弃小数部分。

2、浮点数的概念?

这个问题具体详情见上一章浮点数的定义,这里就不做过多的赘述了。

3、 = (等号)的名字是等于(equal),它的作用是为东西取名

变量的赋值就是采用 “=” 来实现的,就是把等号右边的值赋给等号左边的变量

4、扩展:

变量的赋值不仅仅是单纯的变量赋值,还涉及到内存的分配,所以赋值的变量和不赋值的变量时不一样的,下面来举个栗子:

4.1、我名字变了吗?

name1 = "Kang"   #定义变量name1,并赋值为Kang

name2 = name1   #定义变量name2,并将name1的值赋给name2

#打印输出name1 和 name2的值
print "第一次输出结果:name1=",name1
print "第一次输出结果:name2=",name2 name1 = "Jack" #再次为变量name1赋值为新值Jack #打印输出name1 和 name2的值
print "第二次输出结果:name1=",name1
print "第二次输出结果:name2=",name2
C:\Python27\python.exe D:/pythoncode/stupid_way_study/demo4/Exer4-2.py
第一次输出结果:name1= Kang
第一次输出结果:name2= Kang
第二次输出结果:name1= Jack
第二次输出结果:name2= Kang

由上面的运行结果可以看出来,最后的运行结果是name1 = Jack ,name2 = Kang,?

这里很多人就会问了,上面不是进行了赋值操作吗,name2 = name1,然后name1值变了,name2的值不也应该跟着变吗?

但是实际 情况不是这样的,因为这Python中变量的赋值其实是一个内存地址的引用,其之间只是一个地址的引用,变量之间没有其他关系,比如上面name2 变量只是将变量name1 当做一个寻找对象的一个桥梁,其之间没有其他任何关系。

详细解释:

name1 = Kang
name2 = name1

这两句代码,第一句是一个变量赋值的过程,在内存中开辟出一个位置,存储值Kang,然以就相当于建立了一个对应关系,name1 -----> Kang , 下一句name2 = name1 ,其实只是name2 通过变量name1 去寻找对应的值,相当于中间的一个过渡桥梁,name1和name2之间并没有任何关系。

name1 = "Jack"

上面的name1 = "Jack",确实是一个新的赋值操作,这样name1的值肯定是会变的,但是name2 的值是不会变的,因为Python的变量赋值操作其实就是和内存中的一块地址建立对应关系,变量赋新值,就相当于新建立了一条对应关系,不会说对应关系变了,内存中值也会变,其实内存中地址肯定是不会变的,变的只是指向这块地址的对应关系。而且name2 = name1,他们之间没有其他关系,仅仅是一个桥梁传递作用,name2通过name1找到了内存中对应的值而已。所以上面name1赋新值,name2的值并没有变,因为name2的对应关系没有变。

上述例子就是变量和内存间的关系,用老男孩金角大王的例子就是,内存地址就是相当于小区的房子,变量名就是相当于房子的门牌号,不可能说拆除了门牌号就是拆除房子。变量的重新赋值只是相当于给房子换个门牌号,房子还在,只是门牌号变了而已。

4.2、Python中的内存回收机制:

说上面这个又涉及到Python中的内存回收机制,Python和C语言不同,C中需要手动释放内存地址,但是Python不用,Python中内存是自动回收的,Python中有一个计数器,当其值为0时就自动清除掉,重新定义变量后之前的内存就会被清掉。当然Python中也支持手动回收内存,使用del 变量名的形式。

手动回收如下:

4.3、对多个变量赋值

Python中允许同事为多个变量赋值,例:

a = b = c = 1

以上实例,创建一个整型对象,值为1,三个变量被分配到相同的内存空间上,建立三个对应关系。

a, b, c = 1, 2, "Kang"

以上实例,两个整型对象 1 和 2 分别分配给变量 a 和 b,字符串对象 "kang" 分配给变量 c。

4.4、标准数据类型

在内存中存储的数据可以有多种类型。例如,一个人的年龄可以用数字来存储,他的名字可以用字符来存储。Python 定义了一些标准类型,用于存储各种类型的数据。

Python有五个标准的数据类型:

  • Numbers(数字)
  • String(字符串)
  • List(列表)
  • Tuple(元组)
  • Dictionary(字典)

5、总结

此习题是学习了Python中的变量定义,首先要明白变量的命名规则,其实是了解变量和Python的内存地址之间的关系。

笨办法学Python - 习题4: Variables and Names的更多相关文章

  1. 笨办法学Python - 习题1: A Good First Program

    在windows上安装完Python环境后,开始按照<笨办法学Python>书上介绍的章节进行练习. 习题 1: 第一个程序 第一天主要是介绍了Python中输出函数print的使用方法, ...

  2. 笨办法学Python - 习题5: More Variables and Printing

    1.习题 5: 更多的变量和打印 学习目标:了解用户输入方法,明白pthon2和Python3之间的用户输入的区别.了解格式化字符串(format string)的概念,学会如何创建包含变量内容的字符 ...

  3. 笨办法学Python - 习题11-12: Asking Questions & Prompting People

    目录 1.习题 11: 提问 2.习题 12: 提示别人 3.总结 1.习题 11: 提问 学习目标:了解人机交互场景,熟悉raw_input 的用法. 1.在 Python2.x 中 raw_inp ...

  4. 笨办法学Python - 习题8-10: Printing & Printing, Printing

    目录 1.习题 8: 打印,打印 2.习题 9: 打印,打印,打印 3.习题 10: 那是什么? 3.1.转义序列: 4.习题总结: 1.习题 8: 打印,打印 学习目标:继续学习 %r 的格式化输出 ...

  5. 笨办法学Python - 习题6-7: Strings and Text & More Printing

    目录 1.习题 6: 字符串(string) 和文本 2.加分习题: 3.我的答案 4.习题总结 5.习题 7: 更多打印 6.习题总结 1.习题 6: 字符串(string) 和文本 学习目标:了解 ...

  6. 笨办法学Python - 习题3: Numbers and Math

    目录 习题 3: 数字和数学计算 算术运算符 加分习题: 我的答案: 总结: 扩展: Python比较运算符 Python赋值运算符 Python位运算符 Python逻辑运算符 Python成员运算 ...

  7. 笨办法学python 习题14 优化过 遇到问题的请看

    print "\t what's you name?"user_name = raw_input('>') from sys import argvscript, = arg ...

  8. 笨办法学 Python (Learn Python The Hard Way)

    最近在看:笨办法学 Python (Learn Python The Hard Way) Contents: 译者前言 前言:笨办法更简单 习题 0: 准备工作 习题 1: 第一个程序 习题 2: 注 ...

  9. 笨办法学 Python (第三版)(转载)

    笨办法学 Python (第三版) 原文地址:http://blog.sina.com.cn/s/blog_72b8298001019xg8.html   摘自https://learn-python ...

随机推荐

  1. Java实现数据库操作

    Java实现数据库操作 这里的样例是使用mysql数据库 代码实现 /* MySQLHelper.java */ import java.io.*; import java.util.*; impor ...

  2. php基础学习-sdy

    1.php语言结构和函数 exit()和die() exit()相当于把下面的代码都注释了 die()终止脚本 两个差不多 函数有很多种 (1)语言结构 (2)自定义函数 (3)内置函数 functi ...

  3. 20145203盖泽双:Java实验报告二

    Java实验报告二:Java面向对象程序设计 实验要求: 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验内容 ...

  4. python matplotlib quiver——画箭头、风场

    理解参考:https://blog.csdn.net/liuchengzimozigreat/article/details/84566650 以下实例 import numpy as np impo ...

  5. [转]C结构体之位域(位段)

    有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位.例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可.为了节省存储空间,并使处理简便,C语言又提供了一种数据结构 ...

  6. EF 解除属性映射到数据库中 NotMappedAttribute无效解决办法

    可以通过NotMappedAttribute标记模型某个属性可以使该属性不必映射到数据库. public class Unicorn { public int Id { get; set; } [No ...

  7. Python 包、模块、函数、变量作用域

    Python 项目的组织结构 - 包 -- 模块 --- 类 ---- 函数.变量   Python是利用包和模块来组织一个项目的.   包: 包的物理表现是一个文件夹,但是一个文件夹却不一定是个包, ...

  8. zabbix服务快速搭建指南

    zabbix监控服务快速安装指南 1.更换centos7-base源为阿里源  wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.ali ...

  9. Delphi的idhttp报IOHandler value is not valid错误的原因

    出现这种问题的原因是由于访问的 URL地址为https或存在其跳转地址为https. 首先单纯使用idhttp是只能访问http,而https则需要搭配IdSSLIOHandlerSocketOpen ...

  10. Verilog 奇数分频

    代码: module odd_div( ); ; //分频系数,3即3分频 ; reg clk, rstn, clk_div_pos, clk_div_neg; wire clk_div_out; : ...