python学习之路-day2-pyth基础2
python学习之路-day2-python基础2
本节内容:
- 第一个python程序
- 字符编码简单介绍
- 变量和格式化
- 注释
- 用户输入
- 数据类型
- 数据运算
一、第一个python程序
注:文章中所有的程序都是使用pycharm执行的,请自行安装pycharm
- 输出:
python中使用print 打印想要输出的内容。
在pycharm中新建一个hello.py的文件
1 print("Hello World!")
注:1、Python3中print打印的时候需要加小括号(),pyhton2中可加可不加
2、print打印的时候如果打印想要输出的内容需要加双引号或者单引号“”,否则会按打印变量处理
- 指定解释器
1、如果是在Linux上面执行py文件可以直接指定解释器:
python hello.py
2、上一步中执行 python hello.py 时,明确的指出 hello.py 脚本由 python 解释器来执行。
如果想要类似于执行shell脚本一样执行python脚本,例: ./hello.py
,那么就需要在 hello.py
文件的头部指定解释器,如下:
1 #!/usr/bin/env python
2
3 print ("hello,world")
二、字符编码简单介绍
python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill)
ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256-1,所以,ASCII码最多只能表示 255 个符号。
python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill),如果是如下代码的话:
1 #!/usr/bin/env python
2
3 print ("你好,世界" )
报错:ascii码无法表示中文
改正:应该显示的告诉python解释器,用什么编码来执行源代码,即:
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3
4 print "你好,世界"
三、变量和格式化
- 变量的定义规则
- 变量名只能是 字母、数字或下划线的任意组合
- 变量名的第一个字符不能是数字
- 以下关键字不能声明为变量名
【'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield'】
- 变量的赋值
在Python中,等号=
是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值
例1:
1 name = "lw" #变量赋值,后面要加双引号
1 name = "lw"
2
3 name2 = name
4 print(name,name2)
5
6 name = "Jack"
7 print(name,name2)
注:1、第一次输出:lw,lw
第二次输出:jack,lw
name2指向的是name这个变量的值而不是name
2、赋值的含义:
上面对name 赋值lw,实际上是将name这个变量指向lw的内存地址,name2 = name,也是将name2指向lw的内存地址,而后面的name = jack是建name指向jack的内存地址,name2指向的内存地址并没有变。
举一个例子:将变量比作房间的标识(房间号),内存地址比作房间,name 指向的是lw这个房间,name2 指向的也是lw这个房间,后面讲name指向jack这个房间,但是name2的指向并没有变。
- 格式化输出
- 打印 I am ok
print("I am ok")
I am ok
- 如果需要打印的字符串中包含双引号:
print('"I am ok"') "I am ok"
- 如果需要打印的内容中既包含双引号又包含单引号,就需要用到转义 \
print('"I\'m ok"') #对单引号'转义,\‘
"I'm ok"
- 如果打印的内容中还包含\,一样是用\转义
print('"I \\ am ok"') "I \ am ok"
- 如果字符串里面有很多字符都需要转义,就需要加很多
\
,为了简化,Python还允许用r''
表示''
内部的字符串默认不转义:
- 如果字符串里面有很多字符都需要转义,就需要加很多
print('\\\t\\')
\ \
print(r'\\\t\\')
\\\t\\
- 如果内容里面有换行,可以使用\n
print('"I \\ am \n ok"')
"I \ am
ok"
- 如果内容里面有很多换行,用\n就不方便了,Python允许用
'''...'''
的格式化内容输出:
- 如果内容里面有很多换行,用\n就不方便了,Python允许用
print('''
line1
line2
line3
... ''')
输出:
line1
line2
line3
...
info = '''
this is a test
my name is lw
'''
print (info)
this is a test
my name is lw
- %
%也是一种格式化,用来替换字符串中的字符,%s
表示用字符串替换,%d
表示用整数替换,%f表示用浮点数替换,如果输入的替换内容的数据类型(后文中会提到)不正确的话将会报错。
print("this is %s test"%'lw')
输出:
this is lw test
===================
print("this is %s test %f"%('lw',123)) 输出:
this is lw test 123.000000
=====================
如果输出的内容中带%,需要转义,此时\就不管用了,%要用%来转义:
print("this %% is %s test %f"%('lw',123))
输出:
this % is lw test 123.000000
四、注释
- 单行注释:#
- 多行注释:''' ''' 如果代码中有'''作为格式化,可以使用""" """
"""
print('''
line1
line2
line3
... ''')
info = '''
this is a test
my name is lw
''' """
五、用户输入
- 有时需要用户输入一些信息,用变量接受用户输入的内容
1 name = input("please input your name") #输入后赋值给name,接收的是字符串格式。如果输入的是数字,需要加int,name = int(input("please input your name"))
2 print("Hello " + name )
- 密码的输入
输入密码时,如果想要不可见,需要利用getpass 模块中的 getpass方法,即:
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3
4 import getpass
5
6 # 将用户输入的内容赋值给 name 变量
7 pwd = getpass.getpass("请输入密码:")
8
9 # 打印输入的内容
10 print(pwd)
六、数据类型
1、整数
Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如:1
,5,7,-8
,-10,0
,等等。
2、浮点数
浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23x109和12.3x108是完全相等的。浮点数可以用数学写法,如1.23
,3.14
,-9.01
,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x109就是1.23e9
,或者12.3e8
,0.000012可以写成1.2e-5
,等等。
3、布尔值
布尔值和布尔代数的表示完全一致,一个布尔值只有True
、False
两种值,要么是True
,要么是False
,在Python中,可以直接用True
、False
表示布尔值(请注意大小写),也可以通过布尔运算计算出来:
print(True)
print(False)
print(3>2)
print(3>3)
print(3>5) 输出:
True
False
True
False
False
布尔值可以用and
、or
和not
运算。
and
运算是与运算,只有所有都为True
,and
运算结果才是True
or
运算是或运算,只要其中有一个为True
,or
运算结果就是True
not
运算是非运算,它是一个单目运算符,把True
变成False
,False
变成True
4、空值
空值是Python里一个特殊的值,用None
表示。None
不能理解为0
,因为0
是有意义的,而None
是一个特殊的空值。
5、列表list
列表(list)是一种有序集合,列表使用中括号来定义【】
列表定义:
names = 【】定义一个空列表
names = [“lw”,”lw1”,”lw2”] #有lw,lw1,lw2,3个元素的列表
使用索引来获取列表中的元素,索引从0开始,取第一个元素:
L = ["zhangsan","lisi","wangwu"]
print(L[0])
输出:
zhangsan
=======================
L = ["zhangsan","lisi","wangwu"]
print(L[0:2])#取第一个和第二个值(顾头不顾尾,取0,不取2)
输出:
['zhangsan', 'lisi']
也可以从后面开始取:
L = ["zhangsan","lisi","wangwu"]
print(L[-1])
输出:
wangwu
=================
同理,取倒数第二个,以此类推,可以取倒数第三个、第四个.....:
L = ["zhangsan","lisi","wangwu"]
print(L[-2])
输出:
lisi
1.列表追加----append
L = ["zhangsan","lisi","wangwu"]
L.append("lw") #插入到列表最后面
print(L)
输出:
['zhangsan', 'lisi', 'wangwu', 'lw']
2.插入
L.insert(1,“test”) #插入到列表下面为1的位置。
3.修改
L = ["zhangsan","lisi","wangwu"]
L[1] = "lw"
print(L)
输出:
['zhangsan', 'lw', 'wangwu']
4.删除
1 L.remove(“lw”) #直接跟值
2
3 del L[0] 删除列表中第一个值
4
5 L.pop() 不输入下标默认删除最后一个值
5. 统计
L = ["zhangsan","lisi","wangwu","lisi"]
print(L.count("lisi")) #统计lisi在列表中有几个 输出:
2
6. 清空列表
names.clear()
7. 排序
names.sort()
a = [1,2,3,4,4,4,4,4,4,4,2,2,2,2,2,3,3,3,3,3]
b = ["b","c","a"]
a.sort()
b.sort()
print(a,b)
注:数字和字母不能进行排序
8、获取下标
print(names.index("lisi"))
a = [1,2,3,4,4,4,4,4,4,4,2,2,2,2,2,3,3,3,3,3]
b = ["b","c","a"]
a.sort()
b.sort()
print(a,b)
print(a.index(4)) 输出:
[1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4] ['a', 'b', 'c']
13 #注:列表中存在多个元素时,取第一个元素的下标,这里13是以为上面进行了排序
9、拷贝
深浅拷贝
如果希望将列表复制一份,通过列表的内置方法copy就可以实现:
1 s = [[1,2],3,4]
2 s1 = s.copy()
3 print(s)
4 print(s1)
拷贝出的列表s1与原列表s完全一致。
[[1, 2], 3, 4]
[[1, 2], 3, 4]
对s1修改:
1 s = [[1,2],3,4]
2 s1 = s.copy()
3 s1[1] = 'oliver'
4 s1[0][1] = 'hello'
5 print('列表s:',s)
6 print('列表s1:',s1)
输出:把列表s1中的元素3修改为'oliver'后,原列表并未受影响。
将s1中第一个元素[1,2]中的2修改为'hello'时,原列表中也跟着变了。
列表s: [[1, 'hello'], 3, 4]
列表s1: [[1, 'hello'], 'oliver', 4]
问题来了,通过copy方法拷贝列表s得到列表s1,修改s1中的元素后,s中的元素有的没变,有的跟着变了。为什么会出现这种现象?s与s1之间有什么联系呢?二者的内存空间是否完全独立?
如下图所示,使用列表内置的copy方法,是将新列表中的元素指向了与原列表相同的内存空间。但是,如果列表中嵌套了列表,拷贝后的列表中嵌套的列表元素指针,指向原列表中嵌套列表的整体地址,而不是指向嵌套列表中元素的内存地址。
由此可得,s1[0][1]修改后,s列表中的该元素指针指向的内存空间也会发生改变。
这便是列表的浅拷贝。
如果希望拷贝后的列表拥有完全独立的内存空间,则需要一个新的方法深拷贝来实现:
1 import copy
2 s = [[1,2],3,4]
3 s2 = copy.deepcopy(s)
4 s2[0][1] = 'abc'
5 print('列表s:',s)
6 print('列表s2:',s2)
使用copy.deepcopy()方法来拷贝列表,修改嵌套列表中的元素,原列表不受影响。
列表s: [[1, 2], 3, 4]
列表s2: [[1, 'abc'], 3, 4]
总结
1、浅拷贝只能拷贝最外层,修改内层则原列表和新列表都会变化。
2、深拷贝是指将原列表完全克隆一份新的。
10、扩展
11、切片-取多个元素
七、数据运算
- 算数运算
print(2+3)
print(2*2)
print(9/3) 输出:
5
4
3.0
- 比较运算
- 赋值运算
- 逻辑运算
- 成员运算
- 身份运算
- 位运算
- 运算符优先级
七、流程控制
- 判断表达式if...else
用户登录验证
#!/usr/bin/env python
#_*_coding:utf-8_*_
user = "lw"
print(type(user))
password = ""
a = '''
######################################################
### ###
######################################################
'''
def login():
print(a)
count = 0
while count < 3:
u = raw_input("请输入用户名:")
p = raw_input("请输入密码")
if u == user and p == password:
print("login success!")
break
else:
print("user or password error,login failed!,please login again")
count +=1
continue
login()
猜年龄
- 循环表达式for...else
for循环和if判断一样,先执行for循环语句,循环体的else分支触发条件是循环正常结束。如果循环内被break跳出,就不执行else。所以这个逻辑是:如果循环内break了,不触发else,则执行下一句外层循环中的break;如果正常结束,执行else分支里的continue,直接跳转到外层循环的下一轮,跳过了第二个break。
- 循环表达式while...else
三、 列表
四、元组
元组和列表一样,但是元组一旦创建就不能在修改
元组只有2个方法,一个是count,一个是index,完毕。
五、字典
字典的特性:
- dict是无序的
- key必须是唯一的,天生去重
六、字符串的操作
1.操作大集合
name = "my name is lw age"
print(name.capitalize())
print(name.count("a")) #字符串出现的次数
print(name.center(50,"-")) #一共打印50个字符,不足的用“-”补充,name的变量居中
print(name.endswith("ex")) #是否以ex结尾,是输出true
print(name.find("name"))
#print(format(name='lw',age=23))
print('1A'.isdigit()) #是否是个正数
print('A1'.isidentifier()) #判断是否是一个合法的变量名
print('+'.join(['','',''])) #输出1+2+3
print(name.ljust(50,'*'))
print(name.rjust(50,'*'))
print('lw'.lstrip()) #去掉左边的空格或者回车
print('lw'.rstrip()) #去掉左边的空格或者回车
print('lw'.strip()) #全部空格或者回车
-----------
p = str.maketrans("abcd","")
print("adlw cx".translate(p)) #将adlw cx根据p(abcd --- 1234的对应关系替换
------------------------
print('alex li'.replace('l','L','')) #l替换成L,只替换1个
print('alex li'.split()) #默认以空格分隔成列表
python学习之路-day2-pyth基础2的更多相关文章
- python学习之路day2
模块学习: 标准库: os: 第三方库:
- ql的python学习之路-day2
python中所有字符串操作 , )))), ))))#返回50个长度的字符串,不够左边就以0补充,可以用在十六进制补位(不常用)运行结果: My name is qinjiaxi---------- ...
- Python学习之路-Day2
数据类型常用操作 不管是查整数还是查布尔或者是列表...要记住 dir(int) 查看某个类型的功能 help(int) 查看该类型的功能及文档说明 type(4) 查看某个字符或数字的类型- ...
- Python学习之路-Day2-Python基础2
Python学习之路第二天 学习内容: 1.模块初识 2.pyc是什么 3.python数据类型 4.数据运算 5.bytes/str之别 6.列表 7.元组 8.字典 9.字符串常用操作 1.模块初 ...
- Python学习之路-Day1-Python基础
学习python的过程: 在茫茫的编程语言中我选择了python,因为感觉python很强大,能用到很多领域.我自己也学过一些编程语言,比如:C,java,php,html,css等.但是我感觉自己都 ...
- Python学习之路【第一篇】-Python简介和基础入门
1.Python简介 1.1 Python是什么 相信混迹IT界的很多朋友都知道,Python是近年来最火的一个热点,没有之一.从性质上来讲它和我们熟知的C.java.php等没有什么本质的区别,也是 ...
- Python学习之路-Day2-Python基础3
Python学习之路第三天 学习内容: 1.文件操作 2.字符转编码操作 3.函数介绍 4.递归 5.函数式编程 1.文件操作 打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个 ...
- python学习之路------你想要的都在这里了
python学习之路------你想要的都在这里了 (根据自己的学习进度后期不断更新哟!!!) 一.python基础 1.python基础--python基本知识.七大数据类型等 2.python基础 ...
- python学习之路网络编程篇(第四篇)
python学习之路网络编程篇(第四篇) 内容待补充
随机推荐
- 在Label中显示一段文字
Let’s create a new Xamarin.Forms PCL solution, named Greetings, using the same process described abo ...
- Visual Studio 2015里面汇编工具Asm Dude的配置!
最近开始学习汇编,也开始使用Visual Studio 2015写汇编程序,比较了半天,最后觉得Asm Dude应该是目前Visual Studio 2015非常好的汇编开发插件了,但是如果默认安装上 ...
- bootstrap-图文混排 media
<!-- media 图文混排 media-left(right) 图片的区域 在左边显示(右边) media-body 内容区域 media-heading 内容区域里的标题 media-mi ...
- Linux 下没有conio.h 已解决
原文:http://blog.sina.com.cn/s/blog_6a95e00b0100zqvf.html #include <stdio.h>//#include <conio ...
- 【知识点】安全存储服务(SSS)目标应用程序类型
存在若干种类型的目标应用程序.它们分为两大类:单独的目标应用程序和组目标应用程序.目标应用程序的类型与用于映射用户凭据的帐户类型对应.如果每个用户都在目标应用程序中具有一个帐户,则选择单独的类型.如果 ...
- AX Dynamic 2012 tabletype:TempDB使用
LedgerJournalTmp ledgerJournalTmpJoin; LedgerJournalTransAccrual this.takeOwnershipOfTempTable(ledge ...
- (整理)IIS 7 503 "service unavailable" errors
原文地址:http://mvolo.com/where-did-my-iis7-server-go-troubleshooting-503-quotservice-unavailablequot-er ...
- Chapter7: question 49 - 50
49. 把字符串转换为整数 很多细节需要注意.(空格,符号,溢出等) Go: 8. String to Integer (atoi) 50. 树种两个结点的最低公共祖先 A. 若是二叉搜索树,直接与根 ...
- Tomcat中解决sql server连接失败--- java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver
php连接mysql数据库很容易,他俩真是黄金搭档.最近转战java连接微软sqlServer,步骤稍微复杂一点,但也不是太难,中途遇到了一点小问题,最后在csdn论坛里找到了答案http://bbs ...
- google快捷键,通过浏览器本身来查看
今天玩google浏览器时发现一个不需要访问google就能查看其快捷键的方式,再此记录一下,以备后用. 1:打开Google浏览器 2:打开开发者工具,有三种方法 2-1:按F12快捷键 2-2:按 ...