# -*- coding: utf-8 -*-
# @Time : 2019/11/4 14:48
# @Author : John
# @Email : 2398344557@qq.com
# @File : 变量.py
# @Software: PyCharm
在Python中,每个变量在使用前必须进行赋值,变量赋值以后,该变量才会被创建,否则会报错。
情况一:定义了变量而没有对其赋值,引用该变量后,输出的是空值;
情况二:没有定义且没有赋值,引用不存在的变量时,直接报错。
定义一个变量就像申请一个教室,学生可以进来,也可以离开,是一个可变换的过程(not写死)。
格式:变量名 = 值 (等号为赋值符号,等号两边各留一个空格,美观)
- 中文变量命名:
名字变量 = "雪碧"
print(名字变量)
—— 雪碧
# 结论:中文变量命名只能在Python3中使用,但是不推荐
- 英文变量命名:
【实例1】学生注册
# 定义变量
studentNumber = '9527' # 定义学生学号
studentPassWard = '709394' # 定义学生密码
# 使用print()内置函数输出
print(studentNumber) # 单独输出studentNumber
print(studentPassword) # 单独输出studentPassword
—— 9527
709394
# -----------------------------------------------------------------------
# ***拓展***
# 1. 一次输出多个变量,中间用逗号隔开,可解决自动换行问题,例:print(a, b, c, ...)
print(studentNumber, studentPassWard) # 输出studentNumber和studentPassword
—— 9527 709394
# 2. 每次输出都是默认换行的,如果不需要换行,可以将end参数设置为''
print(studentNumber, end='') # 默认end='\n',不需要时换成end='',即输出结果与一次输出多个变量形式相似,只是变量之间没有空格隔开
print(studentPassWard)
—— 9527709394
# 3. 在Python2.x版本中,print并不是一个函数。写法是print "",例:print "hello world"
# 所以,判断代码使用的版本的最直接方法,就是看print的格式,所以在网上粘贴时复制到本地时要注意格式的变换,否则会报错。
# -----------------------------------------------------------------------
# ***拓展***
# 代码缩进
# python是使用缩进例组织代码块的,也是官方强制要求的,例如以下声明是会报错的:
studentNumber = '9527'
print(studentNumber)
—— IndentationError: unexpected indent
# 或:
studentNumber ='9527'
print(studentNumber)
—— IndentationError: unexpected indent
# 结论:必须为同一级,否则会报错
【练习1】超市买菜
# 定义黄瓜的价格
ccb_price = float(input("please input ccb's price(¥) : "))
# 定义购买重量
weight = float(input("please input ccb's weight(kg) : "))
# 计算金额
money = ccb_price * weight
# 显示输出
print('money : ', money)
—— please input ccb's price(¥) : 5.8
please input ccb's weight(kg) : 3.2
money : 18.56
变量的类型
变量的四要素:
- 变量名称
- 变量保存的数据
- 变量存储数据的类型
- 变量的内存地址(标识)
【练习2】定义变量保存小强的个人信息
name = '雪碧' # 姓名:雪碧
age = 22 # 年龄:22岁
sex = True # 性别:男性
height = 1.75 # 身高:1.80米
weight = 54.0 # 体重:77.0公斤
print(type(name))
print(type(age))
print(type(sex))
print(type(height))
print(type(weight))
print(name, age, sex, height, weight)
—— <class 'str'>
<class 'int'>
<class 'bool'>
<class 'float'>
<class 'float'>
雪碧 22 True 1.75 54.0
# 结论:Python在定义变量时不需要指定变量类型,变量在运行过程中,Python解释器会自动推导出变量的精确类型,这就是动态语言的特色之一
# 动态语言包括python、javascript、sql等
# 静态语言包括c++、c#等
# -----------------------------------------------------------------------
# ***拓展***
# 单步调试:debug
#选中开始语句,在前面标记,然后按F8,或右键,或文件右键,进行单步调试
#MainThread:主线程
debug显示效果如下:
变量可按照类型分为数字类型和非数字类型
- 数字类型:整型int、浮点型float、布尔型bool
- 非数字类型:字符串、列表、元组、字典、集合
可以使用tpye()内置函数查看变量的数据类型。
内置函数在Python中直接调用即可,无需进行其他操作。
常见的内置函数有:input()、type()、int()、...
不同变量之间的运算
# 1. 在Python中数字类型变量可以直接进行算术运算
# 如果变量是布尔型的话:True ---->1、False ----> 0
# i = 10
# f = 10.1
# b = True
# print(i+f+b) # 自动类型转行,转换成浮点数(系统自动选择精确度最高的)
# —— 21.5
# -----------------------------------------------------------------------
# ***拓展***
# 一行声明以上的变量(即一一对应)
i, f, b = 10, 10.1, True
print(i+f+b) # 类型自动转换,即全部转化成了精确度最大的浮点数(系统会优先选择精确度最大的数)
—— 21.1
# -----------------------------------------------------------------------
# ***拓展***
# Python中交换变量的值的最快方法:
x = 1314
y = 520
x, y = y, x # 直接调换变量的位置然后重新赋值即可
print('x=', x, 'y=', y)
—— x= 520 y= 1314
字符拼接
# Python中,字符串之间可以用“+”加号进行拼接,生成新的字符串
first_name = '雪碧'
last_name = '最骚'
print(first_name + last_name) # 输出两个变量拼接后的结果
—— 雪碧最骚
# -----------------------------------------------------------------------
# ***拓展***
# 数字和字符串之间不能进行链接,会报错:
print(first_name+'的学号为:'+ 9527)
——TypeError: can only concatenate str (not "int") to str
# 解决方法一:
print(first_name+'的学号为:'+str(9527)) # 使用str()内置函数将int类型的数据强制转化为str类型的数据
—— 雪碧的学号为:9527
# 解决方法二:
print(first_name+'的学号为:'+'9527') # 用单引号或者双引号直接把其他类型的数据转化为字符串类型的数据
—— 雪碧的学号为:9527
# -----------------------------------------------------------------------
# +++举一反三+++
# int() # 强制转化为整型的数据
# float() # 强制转化为浮点型的数据
# bool() # 强制转化为布尔型的数据
# str() # 强制转化为字符串类型的数据
# list() # 强制转化为列表类型的数据
# tuple() # 强制转化为元组类型的数据
# dict() # 强制转化为字典类型的数据
# np.array() # 强制转化为矩阵(括号里一般为列表)
# -----------------------------------------------------------------------
# ***拓展***
# 字符串类型可以和整数使用*号,可以达到重复拼接字符串的效果(即输出多少遍)
print('雪碧'*10) # 把"雪碧"输出10遍
—— 雪碧雪碧雪碧雪碧雪碧雪碧雪碧雪碧雪碧雪碧
print('!'*15) # 把"!"输出15遍
—— !!!!!!!!!!!!!!!
变量的输入
input()内置函数,可以实现在控制台中进行输入
所谓的函数,我们可以理解为别人已写好的代码,而我们可以进行调用,无需关系内部的实现细节。
【实例2】超市买香蕉
banana_price = float(input("place input banana's price(¥):")) # 将从键盘输入的数据转换成浮点类型(小数)
banana_weight = float(input("place input banana's weight(kg):")) # 将从键盘输入的数据转换成浮点类型(小数)
amount = banana_price * banana_weight # 计算总金额
print('amount:', amount)
—— place input banana's price(¥):2.5
place input banana's weight(kg):5
amount: 12.5
内存(未完整)
a = 1
a = 2
b = a # b和a同时指向2
a = 3 # a跑了,指向3
print(b) # 只剩b指向2
print(a) # a指向3
# —— 2
# —— 3
c = [1, 2, 3]
d = c
c.append(4)
print(d)
print(c)
格式化字符串(格式化输出)
- 使用%格式化操作符进行格式化输出(明确输入的数据类型)
# 1. 使用%格式化操作符进行格式化输出(易出错)
# 格式:
# print('格式化字符串' % 变量)
# 例如:print('%s' % '雪碧')
# print('格式化字符串' % (变量1, 变量2, ...))
# 例如:print('%s,%d,%f,...' % ('雪碧', 3, 3.3, ...))
# %s 字符串
# %d 有符号的十进制数
# %f 浮点数
# %% 输出%本身
# 注意:%d的使用情况
student_number = 1
print('我的学号是%06d' % student_number)
# —— 我的学号是000001
print('我的学号是%6d' % student_number)
# —— 我的学号是 1
print('我的学号是%011d' % student_number)
# —— 我的学号是0000000001
print('我的学号是%11d' % student_number)
# —— 我的学号是 1
# 结论:%d要分情况讨论,非零数前含有0时,会在输入的数字前补上n-1个零,否则会留n-1个空格。
# 注意:%f的使用情况
print('香蕉的单价为%000000000000.2f元/斤' % (00000.1))
—— 香蕉的单价为0.10元/斤
print('香蕉的单价为%.0000000000002f元/斤' % (0000.1))
—— 香蕉的单价为0.10元/斤
print('香蕉的单价为%.2f元/斤' % (0000.1))
—— 香蕉的单价为0.10元/斤
print('香蕉的单价为%.2f元/斤' % (1))
—— 香蕉的单价为1.00元/斤
print('香蕉的单价为%.1f元/斤' % (1))
—— 香蕉的单价为1.0元/斤
print('香蕉的单价为%.10f元/斤' % (1))
—— 香蕉的单价为1.0000000000元/斤
结论:%.f要分情况讨论,当为小数点前或小数点后非零数位置时,对数本身没有任何影响。
- 使用format()进行格式化输出(无需考虑数据类型)
# 2. 通过{}进行格式化输出,代替传统的%
# 格式:
# print('{}{}...{}'.format(a, b, ...))
# {}内可以是任意的数字类型或非数字类型的数据
# 例:print('我叫{},今年{}岁了。'.format('雪碧', 20))
# ***拓展***
# --------------
# 格式:
# {模板字符串}.format(逗号分隔的参数)
str1 = '{}曰:学而时习之,不亦说乎。'.format('孔子')
print(str1)
—— 孔子曰:学而时习之,不亦说乎。
# 模板字符串中含有多个槽时且没有指定序号,则会按照槽出现的顺序分别对应参数
str2 = '{}曰:学而时习之,不亦{}。'.format('孔子', '说乎')
print(str2)
—— 孔子曰:学而时习之,不亦说乎。
# 可以通过format()参数的序号在模板字符串槽中指定参数的使用,参数从0开始编号(类似于索引)
str2 = '{1}曰:学而时习之,不亦{0}。'.format('说乎', '孔子')
print(str2)
—— 孔子曰:学而时习之,不亦说乎。
【练习2】输出“公孙离的等级为:15”这句话
name = '公孙离'
grade = 15
# 拼接字符串形式输出:
print(name+'的等级为:'+str(grade))
—— 公孙离的等级为:15
# 使用%进行字符串的格式化输出
print('%s的等级为:%d' % (name, grade))
—— 公孙离的等级为:15
# 使用format()进行字符串的格式化输出
print('{}的等级为:{}'.format(name, grade))
—— 公孙离的等级为:15
# 结论:
# 1. 输出结果一样,哪种方便用哪种,当输出的数比较多且复杂时会使用后面两种。
# 2. 第一种方式比较粗暴且不好用(要把非字符串的统统进行强制类型转化为字符串类型),
# 第二种方式要区分好数据类型,
# 第三种方式的优点在于无需区分数据类型,直接调用输出即可
# 3. 推荐使用第三种方式(最常用且最不易出错)
# 4. 以后会介绍更加便捷的方法,请期待 ~
【练习3】课后习题1
# 定义字符串变量name,输出我的名字叫小明,请多多关照!
# 定义整数变量student_no,输出我的学号是000001
# 定义小数price、weight、money,输出苹果单价9.00元/斤,购买了5.00斤,需要支付45.00元
# 定义一个小数scale,输出数据比例是10.00 %
name = '小明'
print('我的名字叫%s请多关照!' % name)
student_no = 1
print('我的学号是%06d' % student_no)
price = 9.00
weight = 5.00
money = price * weight
print('苹果单价%.2f元/斤,购买了%.2f斤,需要支付%.2f元' % (price, weight, money))
scale = 10.00
print('数据比例是%.2f%%' % scale)
—— 我的名字叫小明请多关照!
我的学号是000001
苹果单价9.00元/斤,购买了5.00斤,需要支付45.00元
数据比例是10.00%
【练习4】课后习题2-1——个人名片(使用%格式操作符)
"""在控制台一次提示用户输入:姓名、公司、职位、电话、电子邮箱"""
name = input('请输入名字:')
company = input('请输入公司:')
title = input('请输入职位:')
phone = input('请输入电话:')
email = input('请输入邮箱:')
print('*' * 50)
print(company)
print()
print('%s(%s)' % (name, title))
print()
print('电话:%s' % phone)
print('邮箱:%s' % email)
print('*' * 50)
【练习5】课后习题2-2——个人名片(使用format())
"""在控制台一次提示用户输入:姓名、公司、职位、电话、电子邮箱"""
name = input('请输入名字:')
company = input('请输入公司:')
title = input('请输入职位:')
phone = input('请输入电话:')
email = input('请输入邮箱:')
print('*' * 50)
print(company)
print()
print('{}({})'.format(name, title))
print()
print('电话:{}'.format(phone))
print('邮箱:{}'.format(email))
print('*' * 50)
效果如下(练习4和练习5):
请输入名字:雪碧
请输入公司:巨大动力
请输入职位:CEO
请输入电话:7533
请输入邮箱:2398344557@qq.com
**************************************************
巨大动力
雪碧(CEO)
电话:7533
邮箱:2398344557@qq.com
**************************************************
变量的命名
--- 标识符
- 是程序员自己命名的变量名
- 原则上,标识符的命名要有”见名知意”的效果,尽量不要随意起名
# bad命名:
c = '东软'
en = '9527'
# good命名:
company = 'neusoft'
employNumber = '9527'
- 标识符可以由字母、下划线、数字组成
- 不能以数字开头
- 不能与保留字(关键字)重复
--- 保留字(关键字)
- 关键字就是Python中内部已经定义好的标识符
- 具有特殊的功能和含义
- 不允许定义和关键字相同的标识符
- 保留字(关键字)如下:
# 查看方式
import keword
print(keyword.kwlist)
# 输出如下:
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
- 变量的命名规则
目的:规范的命名是为了增强代码的可读性,其他人及自己对代码的识别
注意:Python中的标识符是严格区分大小写的
【错误示范】
userName = 'xuebi'
print(username)
—— NameError: name 'username' is not defined
# 1. 下划线命名法:
# 原则:每个单词都要小写,单词直接使用_链接
first_name = 'joe'
qq_number = '888888'
# 2. 驼峰式命名法:
# 小驼峰:第一个单词从小写字母开始,后续单词首字母大写
firstName = 'Robbt'
# 大驼峰:每个单词首字母都才去大写的方式
FirstName = 'Juliet'