一、为什么选择python3?
python2是遗产,python3是现在和未来的语言 目前2.7会支持到2020年,2.x版本不会再有大变动和更新
所有的最新的标准库更新只会在3.x版本出现 3.x不兼容老版本,是最激进的改变, python3可以直接默认写中文了,详见字符编码知识点
某些库改名了 下划线取消,大写变小写
twisted目前还不支持3.x,他是一个非常强大又复杂的异步网络框架,异步的牛逼之处在于单线程的能力还优于多线程,预计2018-2019会支持
我的第一个python程序:hello world
print ("Hello World!")
二、变量
变量就是把内容存起来,后面留着调用使用,变量存在内存中
变量的使用:直接赋值就可以
1 # Auther: Tank Jarvis 2 name1 = "Tank" 3 print(name1)
1 # Auther: Tank Jarvis 2 3 print("Hello world") 4 5 name1 = "Tank" 6 name2 = name1 7 print(name1) 8 print(name2) 9 10 name1 = "Jarvis" 11 12 print(name1) 13 print(name2)
name2会跟随name1而改变吗?
答案是不会,为什么?因为变量的指向是内存,一开始name1与name2都指向了内存的Tank,后来name1变为Jarvis,name2还是指向Tank而不是name1,所以要明白我们变量的内容都在内存里,每个变量也都在指向内存中的赋值。
1.变量的规则:
- 变量名只能是 字母、数字或下划线的任意组合
- 变量名的第一个字符不能是数字
- 以下关键字不能声明为变量名
['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']
另外变量名字要有意义,别整一个字母就当变量 、别整拼音当变量、别整中文当变量
三、字符编码
计算机只认识0与1
怎么用0与1表示所有的数字? 就用二进制
0 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 。。。
依次是从2的0次方开始向后计算
2**0 2**1 2**2 2**3 2**4 2**5 。。。
如果要表示79,就可以这么去想 79-64=15 15-8=7 7-4=3 3-2=1 1-1=0,用到了64、8、4、2、1,用到就是1,没用到就是0
那么79的二进制就是 :
0 1 2 4 8 16 32 64
0 1 1 1 1 0 0 1
79=1001111
那么计算机只认识0 1 那怎么把字符和0 1 关联起来??
就用到了字符编码,规定某些数字固定对应某些字符,就产生了ASCII(没过标准信息交换代码)
一共占用2**8 不大于128位数字
但是中文几千个字装不下,怎么办?
既然127个装不下就扩展
128-一个数 就当做目录,GB2312(1980年),这个目录里存了7445个汉字字符,
后来1995年GBK1.0收录21003个汉字字符
最后2000年GB18030收录了27484个汉字,同时还有少数民族文字
一些MP3 手机一般只支持GB2312
我们最常用的是GBK
为了避免各个国家都搞自己的编码太乱,后来出来了统一标准:Unicode,统一万国码但是不兼容GBK等,Unicode存的多了,占用的空间就大,ASCII码一个字符占8个比特位,Unicode一个字符,不论中文汉字还是英文字母,都占16个比特位,也就是2个字节,就会出现空间有被占满的风险
然后在unicode基础上出现了UTF-8,字符的大小可变长,所有的英文字符按照ascii码存,所有的汉字按照unicode存,所以不会占用多余的空间
ASCII码 2**8个 占1个字节
1980年 GB2312 支持7000多个汉字
1995年 GBK1.0 支持20000+汉字
2000年 GB18030 支持27000+汉字
90年代初出现了 Unicode 统一占2个字节
UTF-8 英文 1个字节 中文 3个字节
python3与python2的区别就是python3是UTF-8编码,默认支持中文,python2默认是ASCII编码,要想在python2里写中文,就要先声明字符集为UTF-8
1 _*_ coding:utf-8 _*_ 2 或者 3 -*- coding:utf-8 –*-
四、用户交互
1.注释
单行注释: #
多行注释: ‘’’ 多行内容 ‘’’ 或者 “”“ 多行内容 ”“”
多行注释的内容也可以被赋予给变量
2.用户输入 (交互)
1 username = input("Please input your username:") 2 password = input("Please input your password:") 3 4 print(username, password) 5
用户交互+格式化输出 %s的使用方法:
1 name = input("Name:") 2 age = input("Age:") 3 job = input("Job:") 4 salary = input("Salary:") 5 6 info = ''' -----------Info of %s----------- 7 Name: %s 8 Age:%s 9 Job:%s 10 Salary: %s 11 ''' % (name,name,age,job,salary) 12 13 print(info)
%s 代表的是string,字符串,在Age处也可以写 %d,代表数字整数(但是要注意str与int之间的转换,因为数字也是str,要是想用%d,需要转化为int)
%f 代表浮点,一般是小数
用户交互+格式化输出 format的使用方法:
1 name = input("Name:") 2 age = input("Age:") 3 job = input("Job:") 4 salary = input("Salary:") 5 6 info = ''' -----------Info of {Name}----------- 7 Name: {Name} 8 Age:{Age} 9 Job:{Job} 10 Salary: {Salary} 11 ''' .format(Name = name, Age = age, Job = job, Salary = salary) 12 13 print(info)
用户交互+格式化输出 format{参数}的使用方法:
1 name = input("Name:") 2 age = input("Age:") 3 job = input("Job:") 4 salary = input("Salary:") 5 6 info = ''' -----------Info of {0}----------- 7 Name: {0} 8 Age:{1} 9 Job:{2} 10 Salary: {3} 11 ''' .format(name, age, job, salary) 12 13 print(info)
五、初识模块
什么是模块? python有标准库,直接import导入进来,再调用这个模块的语句就可以使用了。
比如之前说的输入用户名密码是明文的,怎么搞成密文的?
1 # Auther: Tank Jarvis 2 import getpass 3 4 username = input("Username: ") 5 password = getpass.getpass("Password: ") 6 7 print(username,password) 8 # pycharm不能使用这个模块哦!
六、逻辑判断
1. if-else while-else
1 # Auther: Tank Jarvis 2 3 _username = "tank" 4 _password = "123" 5 count = 0 6 7 while count < 3: 8 username = input("Username: ") 9 password = input("Password: ") 10 11 if username == _username and password == _password: 12 print("Welcome {name}!".format(name = username)) 13 break 14 else: 15 print("You input a wrong num or passwd, please try again!") 16 count += 1 17 else: 18 print("You have tried 3 times wrong, get off")
2. 猜数字-while循环 注意数字是int ,input 默认把输入的变成字符串
1 # Auther: Tank Jarvis 2 age_of_tank = 28 3 print("Let's play a game , guess the age of tank.") 4 count = 0 5 while count < 6: 6 guessnum = input("Input your answer: ") 7 if int(guessnum) > int(age_of_tank): 8 print("Your answer is bigger, try again.") 9 count += 1 10 elif int(guessnum) == int(age_of_tank): 11 print("You got the right answer, good job!") 12 break 13 else: 14 print("Your answer is smaller, try again") 15 count += 1 16 else: 17 print("You have tried 6 times, Bad luck, bye")
3. 猜数字-for循环
1 # Auther: Tank Jarvis 2 age_of_tank = 28 3 print("Let's play a game , guess the age of tank.") 4 for i in range(6): 5 guessnum = input("Input your answer: ") 6 if int(guessnum) > int(age_of_tank): 7 print("Your answer is bigger, try again.") 8 elif int(guessnum) == int(age_of_tank): 9 print("You got the right answer, good job!") 10 break 11 else: 12 print("Your answer is smaller, try again") 13 else: 14 print("You have tried 6 times, Bad luck,bye")
4.猜数字-无限循环
1 # Auther: Tank Jarvis 2 age_of_tank = 28 3 print("Let's play a game , guess the age of tank.") 4 count = 0 5 while count < 6: 6 guessnum = input("Input your answer: ") 7 if int(guessnum) > int(age_of_tank): 8 print("Your answer is bigger, try again.") 9 count += 1 10 elif int(guessnum) == int(age_of_tank): 11 print("You got the right answer, good job!") 12 break 13 else: 14 print("Your answer is smaller, try again") 15 count += 1 16 if count == 6: 17 confirm = input("Do you want to continue guess?") 18 if confirm != 'n': 19 count = 0 20 else: 21 break
5.break-continue
continue 是直接跳到下一次循环
break 是结束整个循环
6.循环套循环
1 for i in range(10): 2 print('---------', i ) 3 for j in range(10): 4 print(j) 5 if j > 5: 6 break
七:练习
1.编写登陆接口
- 输入用户名密码
- 认证成功后显示欢迎信息
- 输错三次后锁定
2.多级菜单
- 三级菜单
- 可依次选择进入各子菜单
- 所需新知识点:列表、字典