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. C#根据淘宝接口网址获取客户端访问IP和网络运营商

    网络运营商会为每台联网的电脑分配公网IP,如何获取它们?? 话不多说直接上代码: using System; using System.Collections.Generic; using Syste ...

  2. [图解tensorflow源码] Graph 图构建 (Graph Constructor)

  3. 拥抱.NET Core系列:MemoryCache 缓存过期 (转载)

    阅读目录 MSCache项目 MSCache提供的过期方式 绝对时间到期 滑动时间到期 自定义过期策略 过期策略组合拳 缓存过期回调 写在最后 在上一篇”拥抱.NET Core系列:MemoryCac ...

  4. ios应用数据存储方式(XML属性列表-plist) - 转

    一.ios应用常用的数据存储方式  1.plist(XML属性列表归档)  2.偏好设置  3.NSKeydeArchiver归档(存储自定义对象)  4.SQLite3(数据库,关系型数据库,不能直 ...

  5. Linux学习笔记(第六章)

    第六章-档案权限与目录配置#chgrp:改变档案的所属群组#chown:改变档案的拥有者#chmod:改变档案的权限及属性 chown用法 chmod用法: r:4 w:2 x:1对于文档: 对于目录 ...

  6. 2017-2018-1 20155336 《信息安全系统设计基础》加分作业:实现mypwd

    2017-2018-1 20155336 <信息安全系统设计基础>加分作业:实现mypwd 什么是PWD? 用man pwd查看: 用于打印当前工作目录的工作路径 1.命令格式:pwd[选 ...

  7. python基础学习1-字典的使用

    id_db={1:"wh" ,2:"wx" ,3:{1:"a",2:"b",3:"c"} ,4:[& ...

  8. 【LG3246】[HNOI2016]序列

    [LG3246][HNOI2016]序列 题面 洛谷 题解 60pts 对于每个位置\(i\),单调栈维护它往左第一个小于等于它的位置\(lp_i\)以及往右第一个小于它的位置\(rp_i\). 那么 ...

  9. zhengruioi 470 区间

    区间 链接 题意:给定n个区间[li,ri].你可以选出任意一些区间,设选出的区间个数是s,[l,r]是这些区间的交,求min(s,r-l+1)的最大值. N≤3×105 分析:首先按照左端点排序,然 ...

  10. python之shutil模块详解

    shutil模块 -- --High-level file operations  高级的文件操作模块. os模块提供了对目录或者文件的新建/删除/查看文件属性,还提供了对文件以及目录的路径操作.比如 ...