1.pycharm安装
Pycharm安装与首次设置
2.编程语言介绍
编程语言分类:
编译型:一次把所有代码转换成机器语言,然后写成可执行文件
(C++)有一个负责翻译的程序来对源代码进行转换,生成相应的可执行代码。--编译,负责编译的程序称为编译器。把所有的源文件编译完成,可把这些半成品文件打包成一个可执行文件,此过程好像是把包含可执行代码的目标文件连接装配起来,所以又称为链接,负责链接的程序叫做链接程序,也可链接其他资源(图片、音频等)
如C/C++、Pascal/Object Pascal(Delphi)、VB等 -----不便于移植
解释型:在程序运行的前一刻,还只有源程序而没有可执行程序,而程序每执行到源程序的某一条指令,则会有一个称之为解释程序的外壳程序将源代码转换成二进制代码以供执行。总言之,就是不断地解释、执行、解释、执行......如Java、JavaScript、VBScript、Perl、Python等 -----方便移植
动态类型语言:在运行期间才去做数据类型检查的语言,不需要给任何变量指定数据类型,会在第一次赋值时,在内部将数据类型记录下来,如python和rube
静态类型语言:数据类型是在编译期间检查的,也就是说在写程序时要声明所有变量的数据类型,如C、C++等
强类型定义语言:一旦一个变量被指定了某个数据类型,如果不经过强制转换,就永远不改变。如python、Java
弱类型定义语言:一个变量可以被赋予不同数据类型的值。如VBScript
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']
变量名有一定含义
4.字符编码
python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill)
ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256-1,所以,ASCII码最多只能表示 255 个符号。
关于中文:为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的big5。
GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。
显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode
Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536,
注:此处说的的是最少2个字节,可能更多
UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...
所以,python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill)
# -*- coding:utf-8 -*-表示指定使用utf-8执行
5.注释
注释:
当行注释:# 被注释内容
多行注释:""" 被注释内容 """三单引号或三双引号均可
在python中单引与双引在大多数情况下用法是相同的
#!/usr/bin/python是告诉操作系统执行这个脚本的时候,调用/usr/bin下的python解释器;
#!/usr/bin/env python这种用法是为了防止操作系统用户没有将python装在默认的/usr/bin路径里,会去环境设置寻找python目录。当系统看到这一行的时候,首先会到env设置里查找python的安装路径,再调用对应路径下的解释器程序完成操作。
6.用户输入
字符串的拼接---用+
占位符:%s --字符,数字均可string(此时默认数字为字符串型) %d---只能接受数字 %f---浮点型(小数)
print(type(age))---打印age数据类型
强制转换age = int(input("age:")----强制转换为整数型integer age = str(input("age:)----强制转换为字符串
.format()
格式化输出: {_name} .format(_name= name)调用变量,需指定参数
{0} {1} .format(name,age) ---变量位置参数
import getpass---- 导入模块,导入后才可使用
7.if...else...
密码用密文,可直接调用python标准库 import getpass
认证名称密码是否正确,判断语句
Python强制缩进:省略掉了结束符
import getpass
_username = "SJC"
_password = "abc123"
username = input("username:")
password = input("password:")
if _username == username and _password == password:
print("Welcome user {name} login...".format(name=username))
else:
print("Invalid username or password!")
passwd
age_of_oldboy = 56
guess_age = int(input("guess age:"))
if guess_age == age_of_oldboy:
print("yes, you got it!")
elif guess_age > age_of_oldboy:
print("think smaller...")
else:
print("think bigger...")
guess
8.while循环
1 '''
2 age_of_oldboy = 56
3 count = 0
4 while count <3:
5 guess_age = int(input("guess age:"))
6 if guess_age == age_of_oldboy:
7 print("yes, you got it!")
8 break
9 elif guess_age > age_of_oldboy:
10 print("think smaller...")
11 else:
12 print("think bigger...")
13 count = count +1
14 else:
15 print("You have tried too many times...")
16 '''
17 age_of_oldboy = 56
18 for i in range(3):
19 guess_age = int(input("guess age:"))
20 if guess_age == age_of_oldboy:
21 print("yes, you got it!")
22 break
23 elif guess_age > age_of_oldboy:
24 print("think smaller...")
25 else:
26 print("think bigger...")
27 else:
28 print("You have tried too many times...")
guess2
9.for循环
1 age_of_oldboy = 56
2
3 for i in range(3):#i从0开始执行,默认步长为1
4 guess_age = int(input("guess age:"))
5 if guess_age == age_of_oldboy:
6 print("yes, you get it. ")
7 break
8 elif guess_age > age_of_oldboy:
9 print("think smaller...")
10 else:
11 print("think bigger!")
12 else:
13 print('you have tried too many times...')
for
or-步长:range(0,10,3)-从0至10且步长为3(即间隔两个),range(10)则表示从0-10且步长为1
continue-跳出本次循环并进入下一次循环 break-跳出整个循环(可打断点debug run看数据流) pass-不做任何事情,一般用做占位语句
练习
1.
编写登陆接口
- 输入用户名密码
- 认证成功后显示欢迎信息
- 输错三次后锁定
1 #进阶版(有多个用户;输入三次错误密码后用户锁定,重启程序后该用户仍是锁定状态;判定某用户名是否存在,不存在则弹出提示):
2 import sys
3
4 _username = ['ZYH', 'FKK', 'ZJL', 'WK', 'WRR', 'SJC']#用户名表
5 _password = ['123', '456', '789', '147', '258', '369']#密码表(需要与用户名一一对应,不如嵌套)
6 blacklist = []#空表,后续用作黑名单
7 f = open('blacklist.txt', 'a+')
8 f.seek(0)
9 for line in f.readlines():
10 line = line.strip('\n')#移除首尾的换行符,默认移除空格
11 blacklist.append(line)
12 count = 0
13 while True:#死循环
14 username = input('Please input your username:')
15 if username in _username:#判断用户是否存在
16 if username in blacklist:#判断用户是否在黑名单
17 print(f'User{username} has been locked, please contact administrator to unlock.')
18 sys.exit()
19 else:#用户不在黑名单
20 while count < 3:
21 password = input('Please input your password:')
22 i = _username.index(username)#索引用户名位置
23 if password == _password[i]:
24 print(f'Welcome you, {username}!')
25 break
26 else:#密码不正确
27 count += 1
28 print(f'Wrong password, you have another {3-count} chance.')#提示剩余的输入次数
29 else:#连续输错3次
30 f.write(username)
31 f.write('\n')
32 f.close()
33 print('Too many times of wrong password, user locked')
34 break
35 else:
36 print("User doesn't exist, please input again.")
login
2.
多级菜单
- 三级菜单
- 可依次选择进入各子菜单
- 所需新知识点:列表、字典
1 data = {
2 '北京':{
3 '昌平':{
4 '沙河':['oldboy','test'],
5 '天通苑':['链家地产','我爱我家'],
6 },
7 '朝阳':{
8 '望京':['奔驰','陌陌'],
9 '国贸':['CICC','HP'],
10 '东直门':['Advent','飞信'],
11 },
12 '海淀':{},
13 },
14 '山东':{
15 '德州':{},
16 '青岛':{},
17 '济南':{},
18 },
19 '广东':{
20 '东莞':{},
21 '常熟':{},
22 '佛山':{},
23 },
24 }
25 exit_flag = False
26
27 while not exit_flag:
28 for i in data:
29 print(i)
30
31 choice = input('选择进入1>>:')
32 if choice in data:
33 while not exit_flag:
34 for i2 in data[choice]:
35 print('\t',i2)
36 choice2 = input('选择进入2>>:')
37 if choice2 in data[choice]:
38 while not exit_flag:
39 for i3 in data[choice][choice2]:
40 print('\t\t', i3)
41 choice3 = input('选择进入3>>:')
42 if choice3 in data[choice][choice2]:
43 for i4 in data[choice][choice2][choice3]:
44 print('\t\t\t', i4)
45 choice4 = input('最后一层,按b返回>>:')
46 if choice4 == 'b':
47 pass
48 elif choice4 == 'q':
49 exit_flag = True
50 if choice3 == 'b':
51 break
52 elif choice3 == 'q':
53 exit_flag = True
54 if choice2 == 'b':
55 break
56 elif choice2 == 'q':
57 exit_flag = True
3level_menus