02.变量和基本数据类型
python语法注释
在进入正题之前,首先需要了解一下注释。
注释就是对一段代码的解释说明(不参与实际程序执行,写出来就是给人看的,起提示说明作用)
# 下面是打印0到9的python代码
for i in range(10):
print(i)
书写规范
如果是单行注释并且写在代码的上方 那么注释内容与井号之间空一格。 如果是单行注释并且写在代码的后方 那么井号与代码之间空两格 内容与井号之间空一格。
快捷方式
code选项中的Reformat code(热键Ctrl+Alt+L)可以自动将写好的代码准换成标准语法结构。
1.单行注释
使用井号即可。
# 注释内容
2.多行注释
使用三引号,但双引号皆可,但必须是英文格式的。
'''注释内容'''
"""注释内容"""
小技巧:pycharm中如何快速注释/解开注释代码?
ctrl + ?
对于我们初学者来说,写代码的时候一定要养成写注释的习惯。
变量
变量即变化的量,用来记录事物的变化(也可以不变)状态。
比如:人的年龄、薪资、体重等。
举个栗子:
name = 'jason'
age = 18
addr = '芜湖'
这三条代码便是三个变量。
变量的语法结构
变量名 赋值符号 变量的值(真正的数据)
需要强调的是:变量推荐使用英文,不建议使用汉语拼音,更不推荐使用中文。
变量的内部本质
以name='jason'为例。
1.先看赋值符号的右侧
在内存空间中申请一块内存空间将jason存储进来
2.给这块空间绑定一个变量名
该变量名就是访问该空间的详细坐标,要想访问内存中的数据必须通过变量名。
如果一个在内存中的数据没有一个变量名与之绑定,这个数据就被称之为垃圾数据。
小练习
练习1
name = 'jason'
name = 'kevin'
print(name)
#打印出来会是哪个名字?
在最开始,内存空间中有一段数据jason,绑定一个变量名name。
接着,内存空间中又有一段数据Kevin,也使用name作为它的变量名。
于是name断开与jason的链接,转而链接kevin;而此时的jason就变成了垃圾数据。
所以最后打印出来的结果是kevin。
一个变量名只能绑定一个变量值,就像一个车牌号只能给一辆车用一样。
练习2
x = 1
x = x + 1
print(x)
# 能否打印出x?会是1还是2还是x+1?
首先在内存空间中申请一块空间来存储变量值1,然后绑定一个变量名x与之绑定。
接着内存空间中的1+1变成了2,于是变量名断开与1的链接指向2。
练习3
name = 'jason'
name1 = name
name2 = name
print(name1)
print(name2)
name1,name2分别会打印出什么?
首先在内存空间中申请一块空间来存储变量值jason,随后绑定变量名name。
name1=name这一行代码。先看右边name,是一个变量名,指向的是变量值jason,所以name1也指向jason,name2也同理。
在python中,多个变量名可以绑定同一个值。
变量名的命名规范
1.变量名只能由数字、字母、下划线组成
2.数字不能开头,下划线尽量也不要开头(有特殊含义)
3.变量名一定要做到"见名知意"
4.变量名不能与关键字(自带功能)冲突
小练习:请判断以下变量是否能打印
8name = 'jason'
_url = 'https://www.baidu.com'
user_name_666 = 'heiheihei'
name@ = 'haha'
8name = 'jason'不能
_url = 'https://www.baidu.com'可以
user_name_666 = 'heiheihei'可以
name@ = 'haha'不能
变量名的命名风格
1.下划线式 # python推荐使用下划线式
user_name_from_db = 'jason'
2.驼峰体 # JavaScript推荐使用驼峰体
大驼峰 # 所有单词首字母大写
UserNameFromDb = 'jason'
小驼峰 # 首字母不大写其他都大写
userNameFromDb = 'jason'
"""无论使用哪种风格都没有关系 但是尽量不要混着用"""
常量
常量即不变的量。
例如:圆周率。
需要注意的是:在python中没有真正意义上的常量,只是我们"墨守成规"的将全大写的变量名看成是常量。
HOST = '127.0.0.1'
PORT = 3306
……
不过在其他编程语言中是存在真正意义上的常量的,定义了之后就无法修改。
"""JavaScript中"""
const pi = 3.14
pi = 666 # 报错
数据类型
事物的状态千变万化,对应的变量的值也应该有很多种类型。
# 如何查看数据的数据类型
type()
1.整型int
整型数据就相当于生活中的整数,填写班级人数、年龄、年份时会用到。
定义整型时,直接写整数即可。
eg:
stu_num = 15
age = 18
year = 2021
2.浮点型float
浮点型数据相当于生活中的小数,在填写身高、体重、薪资时会用到。
定义浮点型时,直接写小数即可
eg:
height = 1.83
weight = 75.5
salary = 3.1
3.字符串str
字符串相当于一段文字描述,主要用于描述性性质的内容。
name = 'jason'
name1 = "jason"
name2 = """jason"""
name3 = '''jason'''
# 如果在三引号的左边有变量名和赋值符号,那么就是字符串,否则就是注释。
字符串也支持加法和乘法:
name + name1
name * 5
4.列表list
列表用中括号括起来,内部可以存放多个元素,元素与元素之间逗号隔开,元素可以是任意数据类型。
stu_list = ['jason', 'kevin', 'tony']
列表可以进行索引取值:
print(stu_list[1]) # kevin
可以看见索取到了kevin而不是jason,因为在IT领域,索引一般都是从0开始而非日常生活中的从1开始。
小练习
l1 = [11,22,33,[44,55,['jason','kevin','tony']]]
需求:通过索引取值获取到kevin
思路:
1.先明确l1大列表有几个元素?
4个元素。
2.再明确你要的数据在哪个元素里面?
最后一个。
那么将思路转化成实际的代码:
l2 = l1[3] # 将列表l1中第四个元素赋值给列表l2
l3 = l2[2] # 将列表l2中第三个元素赋值给列表l3
print(l3[1]) # 打印列表l3中的第二个元素
这样写需要分两行代码,太复杂了,我们可以简化为一行:
print(l1[3][2][1]) # 打印列表l1中的第四个元素中的第三个元素中的第二个元素
5.字典dict
字典用大括号括起来,内部可以存放多个元素,并且元素的组织形式是K:V键值对,键值对与键值对之间逗号隔开。
K(Key键)一般是对V(Value值)的描述性性质的数据,大部分情况下是字符串,V类似于变量,它的值可以是任意数据类型。
user_dict = {
'name': 'jason',
'age': 18,
'hobby': 'read'
}
print(user_dict['name'])
小练习
user_dict = {
'name': 'jason',
'age': 18,
'hobby': 'read',
'addr': {'country': 'China', 'city': ['芜湖', '合肥']}
}
现在需要获取数据芜湖,应该怎么做?
思路:
1.先获取芜湖所在的字典
d1 = user_dict['addr']
print(d1) # 'country': 'China', 'city': ['芜湖', '合肥']}
2.获取芜湖所在的列表
l2 = d1['city']
print(l2) # ['芜湖', '合肥']
3.获取列表中芜湖
print(l2[0])
出于简化代码的考量,这些步骤也可以做简化:
print(user_dict['addr']['city'][0])
6.布尔值bool
布尔值只有两种状态:
True
False
布尔值可以用来表示对错、是否可行等逻辑判断。
一般情况下存储布尔值的变量名习惯使用is开头。
is_right = True
is_delete = False
7.元组tuple
元组是使用小括号括起来的,内部可以存放多个元素,元素与元素之间逗号隔开,元组内的元素可以是任意数据类型。
元组内元素不支持修改而列表可以(小外号:不可变的列表)
t = ('joe', 1, 2)
t[0] = 'simon'
print(t)
小练习
t1 = (11, 22, [33, 44])
t1[2][0] = 666
print(t1)
最终会得到什么结果?
A 报错
B (11, 22, [666, 44])
C 未知
思路:元组是不可修改的,但是列表是可以修改的。所以即便是元组内的列表,也是可以进行修改的,因为这样的操作并不是在修改元组。所以正确答案是B。
8.集合set
集合使用大括号括起来,里面可以存档多个元素,元素与元素之间逗号隔开,元素不是K:V的形式 并且集合内元素不可以是任意类型,大部分情况下只能是数字和字符串(不可变类型)
s = {1, 2, 3, 4, 5, 6, 7, 8}
利用集合,我们可以做出种种功能:
# 去重
去掉重复的元素
# 关系运算
# 交叉并集
共同好友、共同关注
与用户交互
当程序编写完成之后,接下来就该考虑应该怎样呈现在使用者眼前。或者当需要收集用户的数据时,应该有地方接收。
1.输入
input() # 获取用户输入
那么我们来尝试一下获取用户输入的名字。
username = input('请输入用户名>>>:')
print(type(username))
可以看到:通过input获取到的用户输入都会存为字符串类型。
2.输出
其实输出方式在上面就已经出现了。
print()
print不光可以打印一个值,也可以一次性打印多个值。
print(123)
print(111,222,333,444)
3.格式化输出
每个月初,我们都会收到各种各样的账单,如果放在一起看,不难看出他们的格式都是固定的,只有少数几处涉及到数字人名的地方有所不同。就像是学校发的奖状毕业证,版面都是相似的,该填写不同内容的地方都划线留出空,就等着校长用钢笔填写了。
info = "亲爱的%s你好!你%s月的话费是%s,余额是%s"
上面一行代码中的%s就是占位符,提前占据好位置,之后只需要填充相应的的数据就可以做到格式化输出了。
print(info % ('jason', 8, 100, -100))
print(info % ('tony', 8, 200, -200))
print(info % ('kevin', 8, 500, 8800))
# 文本里面有几个%s后面就需要给几个真实的数据
小练习
# username = input('username>>>:')
# age = input('age>>>:')
# print('my name is %s and my age is %s' % (username, age))
小练习
res = """
------------ info of %s -----------
Name : %s
Age : %s
gender : %s
Job : %s
------------- end -----------------
"""
username = input("请输入您的用户名>>>:")
age = input('请输入您的年龄>>>:')
gender = input('请输入您的性别>>>:')
job = input('请输入您的工作岗位>>>:')
print(res % (username, username, age, gender, job))
除了%s,占位符还有不少,比如%d。与%s不同的是,%d只能给数字占位。
res = 'my name is %s my age is %d'
print(res%('jason',18))
使用%d就可以生成具有固定位数的号码,可以用来创建各种各样的订单账单。
print('%08d' % 123) # 生成8位数序号,没有数字的位数用0填充
print('%08d' % 123133)
print('%08d' % 666)
print('%08d' % 2346456546456757) # 生成8位数序号,没有数字的位数用0填充,如果超过8位数则保持原来的数值