Python【day1】:Python简介(下载安装、流程控制、文件操作、数据类型列表、字符串、元组、整数、浮点数等介绍)
day1踩过的坑:
1、猜数游戏中,没有将raw_input()返回的数转换成int,从而造成猜数输出不正确;
2、pycharm没有执行对文件,就是本来想执行模块a,结果执行的是模块b,自己还以为执行的是模块a,
直接点击pycharm下面输出框旁边的run按钮,经常会出现这个问题,(大王也中招了,haha)
避免这个问题发生的办法,每次都应该在代码正文右键-run;
3、缩进问题,在如何跳出多层嵌套循环中,break跳出内循环后,准备跳出外循环,在进行条件判断的时候,缩进错了,if写到了内循环while代码块中,这个是不对的,必须改到和内循环while同级
pycharm小技巧:
1、多行全选,shift+tab整体往前缩进一个tab
2、多行全选,tab整体向后缩进一个tab
3、多行全选,ctrl+/注释所选代码,再次按ctrl+/注释取消所选代码
4、pycharm中切换3.5和2.7:file菜单-settings-project pycharmPreject--project interpreter选项,可以切换2.7和3.5版本
参考:http://jingyan.baidu.com/article/fec4bce25f677df2618d8be8.html
python2.7和3.5两个版本同时安装(windows),liniux下自带python(2.6需要升级到2.7)
1、官网下载这2个版本
2、分别安装到c盘的根目录下,去不同的名字,例如c:\python2.7 c:\python3.5
安装3.5的时候,有个选择勾选后,就不用单独配置环境变量了,会自动加环境变量
3、2.7版本安装完后,需要手动配置环境变量
【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到 变量名为Path 的一行,双击】 --> 【Python安装目录追加到变值值中,用 ; 分割】
如:原来的值;C:\python27,切记前面有分号
变量:
变量的命名规则:
1、首字符只能是下划线或者大小写字母;
2、变量的名字中只能包含大小写字母,数字或者下划线;
3、以下关键字不能声明为变量名
['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']
注意:关键字当做变量后,重启交互解释器或者pycharm重启才能恢复
输入(把用户输入的东西存入内存)
输入 3.5写法是input 2.7是raw_input(2.7的input,输入的字符串必须是字符串,"jack"才行,输入jack是不行的,
# 但是raw_input是可以输入jack)
# 3.5的input相当于2.7的 raw_input()
# 3.5的eval(input()) 相当于2.7的 input()
eval的参数是字符串,需要根据字符串去找变量名是a1的,然后将值取出来
a1 = 5
# print eval("a1") #相当于将变量a1的值取出来
流程控制(if-else\while\for\break\continue)
1 while 3次锁定或者死循环True 加计数器
#需求1:猜数lucky num num=6 ,猜的数字比6大,打印猜的数太大,猜的数字比6小,打印猜的数太小,
# 三次输入错误,锁定,要求用while来实现
num = 6 #定义要猜的目标数
count = 0 #计数器
while count <3: #指定循环3次
#必须将输入的字符串转换成int才行
input_num = int(raw_input("enter:")) #这个需要写在while中,才会实现多次输入
if input_num > num:
print "猜的数太大"
elif input_num < num:
print "猜的数太小"
else:
print "猜对了"
break #跳出整个循环(break后,最后的else不执行)
count += 1 #计算器加1 count需要在if同一级
else:#上面的循环正常执行完毕,else才会执行,如果是不正常退出(break),else不会执行
print "3次输入错误,锁定"
#while死循环 直到输入对才会退出
num = 6
while True: #这里设置的是死循环,只有输入正确,才会break跳出整个循环
#必须将输入的字符串转换成int才行
input_num = int(raw_input("enter:")) #这个需要写在while中,才能实现多次输入
if input_num > num:
print "猜的数太大"
elif input_num < num:
print "猜的数太小"
else:
print "猜对了"
break #跳出整个循环
flag 标签
num = 6
input_num = 0
flag = True #设置flag标签,控制判断条件
while flag: #直接判断不相等
#必须将输入的字符串转换成int才行
input_num = int(raw_input("enter:")) #这个需要写在while中,才能多次要求输入
if input_num < num:
print "猜的数太小"
elif input_num > num:
print "猜的数太大"
else:
print "猜对了"
flag = False #跳出循环
上述3次锁定,如果不允许用break或者flag的话,下面这种实现方式可以,但是不推荐,太绕
num = 6
input_num = 0
count =0
while input_num != num and count<3 : #and是2个条件必须同时满足
#必须将输入的字符串转换成int才行
input_num = int(raw_input("enter:")) #这个需要写在while中
if input_num > num:
print "猜的数太大"
elif input_num < num:
print "猜的数太小"
count += 1
#因为有2次不同的其他条件
if input_num == num: #2次判断
print "猜对了"
else:
print "3次机会用完了"
2 for 3次锁定 固定次数的循环(不需要计数器了)
#需求:猜数lucky num num=6 ,猜的数字比6大,打印猜的数太大,猜的数字比6小,打印猜的数太小,
# 三次输入错误,锁定,要求用for来实现
num = 6
for i in range(3):
#必须将输入的字符串转换成int才行 2.7中
input_num = int(raw_input("enter:")) #这个需要写在for中,才能实现多次输入
if input_num > num:
print "猜的数太大"
elif input_num < num:
print "猜的数太小"
else:
print "猜对了"
break #跳出整个循环
else:#上面的循环正常执行完毕,else才会执行,如果是不正常退出(break),else不会执行
print "3次输入错误,锁定"
continnue和break的区别:
1、break是跳出整个循环,跳出后,while或者for后面的else也不会执行
2、continue不是跳出整个循环,而是只是跳出当前这次循环(也叫当前迭代),回到循环条件判断处,继续下次循环
#简单的嵌套循环(两层或者多层循环)
# for j in range(2):
# for i in range(10):
# if i<5:
# continue #跳出本次迭代,继续下一次迭代
# if j>1:
# break #跳出整个循环
# print i
#如何实现一次跳出多层循环(尤其是多层都是死循环的情况),break一次只能跳出一层循环
loop1 = 0
loop2 = 0
while True:
loop1 += 1
print "loop1:",loop1
break_flag = False #设置一个跳出flag,用于控制外循环跳出
while True:
loop2 += 1
if loop2 == 5:
break_flag = True #跳出内循环前,先把跳出flag置为True
break #跳出内循环(第一层),但是外循环还是在循环
print "loop2:",loop2
if break_flag: #外循环跳出的条件具备了 注意这里的if必须和内循环的while同级,而不能在内循环代码块中
print "内循环跳出了,外循环也该跳出了"
break #跳出外循环
循环小结:
#输入正确跳出整个循环的的方式:
# 1 break
# 2 flag
#指定3次数锁定的方式
# 1 while count<3 count=0 count += 1 else:
# 2 for i in range(2) else:
字符串
字符串格式化
#1字符串格式化--推荐下面这个(不推荐加号拼接,浪费内存) %s字符串 %d数字(%s也能表示字符串) %f浮点数
name = raw_input("name:").strip() #strip()去掉两边的空格 参数默认是去空格 strip("A") 去掉两边的"A"
age = raw_input("age:").strip()
job = raw_input("job:").strip()
msg = """
information of %s:
name:%s
age:%s
job:%s
""" % (name,name,age,job) #这里是4个参数,两个name
print msg
# 输出
# information of jack:
# name:jack
# age:15
# job:it
字符串拆分
name_str = "jack_tom_bob"
print name_str.split("_") #['jack', 'tom', 'bob'] (字符串变列表)
列表
#列表的作用是为了在一个变量中存储多个信息
#1列表和字符串、元组间的互相转换
name_str = "jack_tom_bob"
print name_str.split("_") #['jack', 'tom', 'bob'] (字符串变列表)
name_list = ["jack","18","jack","tom","jack","18"] #创建列表
print tuple(name_list) #('jack', '18', 'jack', 'tom', 'jack', '18') #列表转换成元组
str1 = "_".join(name_list) #jack_18_jack_jack_18(列表变字符串)
print str1
print dir(name_list) #输出列表中包含的内置方法,主要关注不是2个下划线开头的 ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__',
'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
#列表的切片
print name_list[:2]
print name_list[-2]
print name_list[:]
print name_list[::2]
#列表的内置方法
name_list = ["jack","18","jack","jack","18"]
name_list1 = ["bob","17"]
name_list.append("tom")
print name_list #['jack', '18', 'jack', 'jack', '18', 'tom'] 添加元素到列表
print name_list.count("jack") #计算元素在列表中出现的次数
name_list.extend(name_list1) print name_list #['18', '18', 'tom', 'bob', '17'] #将列表name_list1合并到列表name_list中
print name_list.index("18") #输出左边第一个出现的"18"的索引号
name_list.insert(2,"kate") #在了表索引号是2的地方插入一个元素 print name_list #['18', 'kate', '18', 'tom', 'bob', '17']
print name_list.pop() #['18', 'kate', '18', 'tom', 'bob'] 删除最后一个元素并返回 print "pop---",name_list.pop(2) #指定索引号可以删除指定值
name_list.remove("jack") #删除左边第一个出现的"jack" print name_list
name_list.reverse() #反转输出列表的各个元素 print "reverse:",name_list
name_list.sort() #按照asci顺序排序列表的所有元素 print "sort:",name_list
#需求:如何删除一个拥有比如400w个元素的列表中的指的元素,例如:"jack"
for i in range(name_list.count("jack")):
# 思路:先计算列表中想要删除的字符串"jack"一共是多少个count,如果是3个, 那么遍历列表的时候,删除remove3次"jack"即可
name_list.remove("jack")
print name_list
name_list = ["jack","18","jack","jack","18"]
for i in range(3):
name_list.remove("jack")
print name_list
元组
#元组和列表的区别:元组是只读的,不能修改
tuple_name = (1,3) #创建元组
print dir(tuple_name) #显示元组的内置方法
['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']
print list(tuple_name) #[1, 3] 元组转换成列表
位运算
# a = 60 # 60 = 0011 1100
# b = 13 # 13 = 0000 1101
# c = 0
# c = a & b; # 12 = 0000 1100 位与"&" 2个都是真1,结果才是真1
# print "Line 1 - Value of c is ", c
#
# c = a | b; # 61 = 0011 1101 或"|"只有一个是真1,结果就是真1
# print "Line 2 - Value of c is ", c
#
# c = a ^ b; # 49 = 0011 0001 异或"^" 只有一真1一假0,结果就是真1
# print "Line 3 - Value of c is ", c
#
# c = ~a; # -61 = 1100 0011 #相当于1取反是0,,0取反是1
# print "Line 4 - Value of c is ", c
#
# c = a << 2; # 240 = 1111 0000 #左移2位
# print "Line 5 - Value of c is ", c
#
# c = a >> 2; # 15 = 0000 1111 #右移两位
# print "Line 6 - Value of c is ", c
文件操作(写、读、追加、光标移动)
打开文件:# #
file_obj = file("文件路径","模式") #
obj = open("文件路径","模式") # #
打开文件的模式有:# #
r,以只读方式打开文件 #
w,打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 #
a,打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。 # 也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 #
w+,打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 # #
读取文件的内容: # #
一次性加载所有内容到内存 # obj.read() # # #
一次性加载所有内容到内存,并根据行分割成字符串,每个行字符串作为列表的一个元素 # obj.readlines() # # #
每次仅读取一行数据,遍历文件的每行 # for line in obj:# # print line # # 写文件的内容: # obj.write('内容')
# 文件的光标定位 #
obj.seek(0) 光标回到文件的最开始处 #
obj.tell() 显示当前光标在文件的位置 # # #
关闭文件句柄:# #
obj.close() # obj = open("log","w") #
写的模式新建一个文件对象
obj.write("first\n") #
写入2行文本
obj.write("second line\n") #\n是换行符
obj = open("log","a") #追加的模式往文件追加2行 obj.write("third\n") #追加写入2行文本 obj.write("fourth line\n")
obj = open("log","r") #只读的模式,将文件内容读入到内存 #
print obj.read() #读出文件所有的内容 #
print obj.readlines() #每个行字符串作为列表的一个元素,包含换行符(空格和换行符可以用strip去掉) #['first\n', 'second line\n', 'third\n', 'fourth line\n']
for i in obj:
print i, #这里加上逗号,可以去掉空行 print obj.tell() #40 显示光标目前的位置,是第40个字符
#文件的光标的移动
# obj.seek(0) #光标回到文件最开始处,第二个参数可以不写,默认就是文件开始0
# obj.seek(0,0) #光标回到文件最开始处
obj.seek(12,0) #光标回到以文件0开始,第12个字符处
print obj.tell()
obj.seek(6,1) #光标从当前位置1开始,第6个字符处
print obj.tell()
obj.seek(3,2) #光标从文件最后2开始,第3个字符处
print obj.tell() #0 显示光标目前的位置,是第0个字符
# seek小结
# 第二个参数,0代表文件开始,1代表文件当前,2代表文件结尾
# 第一个参数,代表位移的字符个数

浙公网安备 33010602011771号