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允许用'''...'''的格式化内容输出:
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.233.14-9.01,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x109就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。

3、布尔值

布尔值和布尔代数的表示完全一致,一个布尔值只有TrueFalse两种值,要么是True,要么是False,在Python中,可以直接用TrueFalse表示布尔值(请注意大小写),也可以通过布尔运算计算出来:

print(True)
print(False)
print(3>2)
print(3>3)
print(3>5) 输出:
True
False
True
False
False

布尔值可以用andornot运算。

and运算是与运算,只有所有都为Trueand运算结果才是True

or运算是或运算,只要其中有一个为Trueor运算结果就是True

not运算是非运算,它是一个单目运算符,把True变成FalseFalse变成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的更多相关文章

  1. python学习之路day2

    模块学习: 标准库: os: 第三方库:

  2. ql的python学习之路-day2

    python中所有字符串操作 , )))), ))))#返回50个长度的字符串,不够左边就以0补充,可以用在十六进制补位(不常用)运行结果: My name is qinjiaxi---------- ...

  3. Python学习之路-Day2

    数据类型常用操作 不管是查整数还是查布尔或者是列表...要记住 dir(int)   查看某个类型的功能 help(int) 查看该类型的功能及文档说明 type(4)   查看某个字符或数字的类型- ...

  4. Python学习之路-Day2-Python基础2

    Python学习之路第二天 学习内容: 1.模块初识 2.pyc是什么 3.python数据类型 4.数据运算 5.bytes/str之别 6.列表 7.元组 8.字典 9.字符串常用操作 1.模块初 ...

  5. Python学习之路-Day1-Python基础

    学习python的过程: 在茫茫的编程语言中我选择了python,因为感觉python很强大,能用到很多领域.我自己也学过一些编程语言,比如:C,java,php,html,css等.但是我感觉自己都 ...

  6. Python学习之路【第一篇】-Python简介和基础入门

    1.Python简介 1.1 Python是什么 相信混迹IT界的很多朋友都知道,Python是近年来最火的一个热点,没有之一.从性质上来讲它和我们熟知的C.java.php等没有什么本质的区别,也是 ...

  7. Python学习之路-Day2-Python基础3

    Python学习之路第三天 学习内容: 1.文件操作 2.字符转编码操作 3.函数介绍 4.递归 5.函数式编程 1.文件操作 打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个 ...

  8. python学习之路------你想要的都在这里了

    python学习之路------你想要的都在这里了 (根据自己的学习进度后期不断更新哟!!!) 一.python基础 1.python基础--python基本知识.七大数据类型等 2.python基础 ...

  9. python学习之路网络编程篇(第四篇)

    python学习之路网络编程篇(第四篇) 内容待补充

随机推荐

  1. 【SQL】找出行数与自增标识值不相等的表(即有缺行)

    环境:mssql ent 2k8 r2 原理:遍历所有含自增列的用户表,用sp_spaceused过程分别获取每张表的行数并写入临时表,然后使用IDENT_CURRENT函数获取表的最大标识值,比较二 ...

  2. Amazon全场满$35减$5 (需Facebook)

    在Amazon.com上建一个Wish List(创建Wish List后须点击“Manage your lists”,在“Privacy”那一栏选择“Public”或“Shared”,再回到这个链接 ...

  3. javaScript中有关正则表达式的用法总结

    js中处理正则表达式的类:RegExp 用法: var reg=new RegExp("express"); 或者: var reg=/express/; js中常用的6个方法: ...

  4. 二叉树与AVL树

    二叉树 什么是二叉树? 父节点至多只有两个子树的树形结构成为二叉树.如下图所示,图1不是二叉树,图2是一棵二叉树. 图1 普通的树                                    ...

  5. 项目需求分析与建议-NABCD模型

    N(Need 需求) 首先我们的创意解决了现有阶段学校查空余教师的问题,充分解决了同学们上自习却找不到教室的苦衷,同时也会适当的拓展一些适当的学习计时功能或者每日一语等等,来帮助同学们来控制好学习时间 ...

  6. SQL 分隔字符串

    ALTER FUNCTION dbo.fn_Split ( ), ) ) RETURNS @table_Value TABLE ( SortNo ,) NOT NULL, Value ) COLLAT ...

  7. Python实战(6)单线程和多线程导入mysql数据对比测试

    单线程脚本 导入文件的行数 # wc -l /data/logs/testlog/20120219/testlog1/* 1510503 total # -*- coding: utf-8 -*- # ...

  8. rabbitmq学习(一) —— 安装篇

    安装篇之windows: 略(楼主在windows上安装基本就是按部就班的没遇到什么坑) 安装篇值centos7: 主要记录下centos7下的安装,因为在该系统下安装稍微折腾了下 参考https:/ ...

  9. Http请求的工具

    1.火狐的插件 HttpRequester 安装方法:火狐浏览器的最右上角的菜单,打开附件组件 ,搜索:HttpRequester,重启火狐浏览器.在菜单栏的工具下可以看到 HttpRequester ...

  10. Linux线程编程之信号处理

    前言 Linux多线程环境中的信号处理不同于进程的信号处理.一方面线程间信号处理函数的共享性使得信号处理更为复杂,另一方面普通异步信号又可转换为同步方式来简化处理. 本文首先介绍信号处理在进程中和线程 ...