day one python入门
一 python文件的创建
鼠标右键点击想用来存放python文件的文件夹,然后选择New->Python File,即可完成创建,然后就可以开始编程啦。
二 没有hello world莫得灵魂
print('hello world!')
直接使用print语句输出即可
三 变量
变量就是变化的量,“变”就是变化,“量”就是衡量状态。
变量的存在意义:程序执行的本质就是一系列状态的变化,“变”是程序执行的直接体现,所以我们需要有一种机制能够反映或者说是保存下来程序执行时状态以及状态的变化。
变量的定义:
name = 'tank' print(name) #变量值:'tank',会在内存中产生一份内存地址。 #变量名:相当于一个门牌号,用于与变量进行绑定。 #=:用来把变量值绑定给变量。
变量的命名规范:
驼峰命名法:AgeOfJames
下划线命名法:age_of_james(推荐在python中使用)
变量的定义规范:
1、变量名只能由数字、字母和下划线组成;
2、变量名的第一个字符不能使用数字;
3、关键字不能声明为变量名。(比如说“print”、“input”和“if”等就不能声明为变量名)
变量的命名注意:
1、不要用中文命名
2、变量名过长
3、变量名与实际含义没什么关系
定义变量的三大特征:
id:用来表示变量的值在内存中的唯一一份内存地址。
type:变量值的类型。
value:变量的值。
a = 15 print(id(a)) print(type(a))
输出结果为:
1774415776 <class 'int'>
1774415776就是变量a的值在内存中的内存地址。int就是变量a的变量值类型。
小整数池:
1、在交互模式下
Python实现int的时候有个小整数池。为了避免因创建相同的值而重复申请内存空间所带来的效率问题, Python解释器会在启动时创建出小整数池,范围是[-5,256],该范围内的小整数对象是全局解释器范围内被重复使用,永远不会被GC回收。每创建一个-5到256之间的整数,都是直接从这个池里直接拿走一个值。
2、在pycharm中
在pycharm中运行python程序,pycharm出于对性能的考虑,会扩大小整数池的范围,其他的字符串等不可变类型也都包含在内一便采用相同的方式处理了,我们只需要记住这是一种优化机制,至于范围到底多大,无需细究。
注:即使两个变量有相同的值,它们的内存地址仍可看作是唯一的。
四 常量
所谓常量就是不能变的变量,比如常用的数学常数π就是一个常量。在Python中,通常用全部大写的变量名表示常量:
PI = 3.14159265359
但事实上PI仍然是一个变量,Python根本没有任何机制保证PI不会被改变,所以,用全部大写的变量名表示常量只是一个习惯上的用法,如果你一定要改变变量PI的值,也没人能拦住你。
五 用户与程序交互
input:用户输入任何值,都存成字符串类型
input:用户输入什么类型,就存成什么类型
raw_input:等于python3的input
计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0x前缀和0-9,a-f表示,例如:0xff00,0xa5b4c3d2,等等。
age=10 #age=int(10)
例如上面这段语句就是将age定义为整型。
浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23x109和12.3x108是完全相等的。浮点数可以用数学写法,如1.23,3.14,-9.01,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x109就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。
整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四舍五入的误差。
salary=3.1 #salary=float(3.1)
此处就是将salary定义为浮点型。
字符串是以单引号'或双引号"括起来的任意文本,比如'abc',"xyz"等等。请注意,''或""本身只是一种表示方式,不是字符串的一部分,因此,字符串'abc'只有a,b,c这3个字符。如果'本身也是一个字符,那就可以用""括起来,比如"I'm OK"包含的字符是I,',m,空格,O,K这6个字符。
#那单引号、双引号、多引号有什么区别呢? 单双引号木有任何区别,只有下面这种情况 你需要考虑单双的配合 msg = "My name is James , I'm a boy!" #多引号什么作用呢?作用就是多行字符串必须用多引号 msg = ''' 时光微凉 那一场远去的往事被春水浸泡 秋风吹拂 早已洗去铅华 清绝明净 ''' print(msg) #单引号,双引号,三引号的区别
#字符串只能进行"相加"和"相乘"运算。 >>> name='James' >>> age='18' >>> name+age #相加其实就是简单拼接 'James18' >>> name*5 'JamesJamesJamesJamesJames' #注意1:字符串相加的效率不高 字符串1+字符串3,并不会在字符串1的基础上加字符串2,而是申请一个全新的内存空间存入字符串1和字符串3,相当字符串1与字符串3的空间被复制了一次, #注意2:只能字符串加字符串,不能字符串加其他类型 字符串拼接(只能在字符串之间进行,且只能相加或相乘)
如果字符串内部既包含'
又包含"
怎么办?可以用转义字符\
来标识,比如:
'I\'m \"OK\"!' 表示的字符串内容是: I'm "OK"! 所以可以通过在引号前加入\来输出引号
字符串的操作
1、按索引取值(正向取+反向取):只能取一个
2、切片(顾头不顾尾,步长)
3、长度len
4、成员运算in 和not in
5、移除空白strip
6、切分split
7、循环
#1、按索引取值
str1='hello thanks!' print(str1[0])#取str1这一字符串中的第一个字母,正向 print(str1[12])#取str1这一字符串中的第13个字母 print(str1[-1])#取str这一字符串中的最后一个字母,反向
#2、切片 print(str1[0:5])#取0到(5-1)这些位置的值 print(str1[0:12])#取0到(12-1)这些位置的值,步长为1 print(str1[0:12:2])#每隔一个取0到(12-1)这些位置的值,步长为2
3、长度len print(len(str1))#得到str1这个字符串的长度
#4、成员运算in和not in str1 = "hello" print('h' in str1)#True print('h' not in str1)#False
#5、移除空白strip、lstrip、rstrip str2=' hello thanks! ' print(str2) print(str2.strip())#'hello thank' print(str2.lstrip())#'hello thank! ' print(str2.rstrip())#' hello thank
#去除指定的字符
str3='thanks!' print(str3.strip('!'))#'thanks'
#6根据空格切分 str1 = 'hello world' print(str1.split(' '))#分割成hello和world两个字符串
#7、循环 #对str1字符串进行遍历,打印每一个字符 for line in str1: print(line)
字符串操作补充
#lower upper转化为大小写 str1='HAOHEN niupi' print(str1.lower())*haohen niupi,转化为小写 print(str1.upper())*HAOHEN NIUPI,转化为大写
#使用startswith和endswith来判断字符串首尾的部分字符是否与括号里相同 str2="hello james" print(str2.startswith('hello'))#True print(str2.endswith('james'))#True print(str2.startswith('james'))#False print(str2.startswith('hello'))#False
#join字符串拼接 print(' '.join(['abb','aab','pdd']))#根据空格,把列表中的每一个字符串进行拼接 #得到的结果为abb aab pdd print('!'.join(['abb','aab','pdd']))#根据空格,把列表中的每一个字符串进行拼接 #得到的结果为abb!aab!pdd
#replace:字符串替换 str1='i am james' str2=str1.replace('james','lebron')#将字符串'james'替换成‘lebron’ print(str2)#i am lebron
#isdigit 判断字符串是否是数字 num=input("输入1,2,3")#输入1时得到True,输入a时得到False print(num.isdigit())
七 格式化输出
程序中经常会有这样场景:要求用户输入信息,然后打印成固定的格式。
比如要求用户输入用户名和年龄,然后打印如下格式:
My name is xxx,my age is xxx.
很明显,用逗号进行字符串拼接,只能把用户输入的名字和年龄放到末尾,无法放到指定的xxx位置,而且数字也必须经过str(数字)的转换才能与字符串进行拼接。
这就用到了占位符,如:%s、%d
#%s字符串占位符:可以接收字符串,也可接收数字 print('My name is %s,my age is %s' %('kermit',18)) #%d数字占位符:只能接收数字 print('My name is %s,my age is %d' %('kermit',18)) print('My name is %s,my age is %d' %('kermit','18')) #age为字符串类型,无法传给%d,所以会报错 #接收用户输入,打印成指定格式 name=input('your name: ') age=input('your age: ') #用户输入18,会存成字符串18,无法传给%d print('My name is %s,my age is %s' %(name,age))
format(格式化输出)的三种玩法
print('i am {},i am a {}'.format(18,'boy'))#根据位置顺序格式化 print('i am {0},i am a {0}'.format(18,'boy'))#根据索引格式化,输出为i am 18, #i am a 18 print('i am {0},i am a {1}'.format(18,'boy'))#输出为i am 18,i am a boy print('i am {a},i am a {b}'.format(b=18,a='boy'))#指名道姓格式化,输出为i am boy, #i am a 18
八 空值
空值是Python里一个特殊的值,用None
表示。None
不能理解为0
,因为0
是有意义的,而None
是一个特殊的空值。
九 除法
整数的除法也是精确的。在Python中,有两种除法,一种除法是/
:
>>> 10 / 3 3.3333333333333335
/除法计算结果是浮点数,即使是两个整数恰好整除,结果也是浮点数:
>>> 9 / 3 3.0
还有一种除法是//
,称为地板除,两个整数的除法仍然是整数:
>>> 10 // 3 3