python3学习笔记(0)
一、编程语言主要从以下几个角度分类:
1、编译型和解释型
2、静态语言和动态语言
3、强类型定义语言和弱类型定义语言 编译型:程序运行前先由负责翻译的程序将代码转换成可执行代码进行执行。例如C/C++、Pascal/Delphi、VB。其优点为运行速度快,对系统要求低,适用于开发操作系统、大型应用程序、数据库系统等。
解释型:程序运行时每直行到一条指令就由解释程序将所执行到的代码转换成可执行代码进行执行,如此反复,直至程序直行完毕。例如Java、JavaScript、VBScript、Perl、Python。适用于网页脚本、服务器脚本及辅助开发接口这样对速度要求不高,但对不同系统平台间的兼容性有一定要求的程序。
静态语言:即静态类型语言,在写程序时要声明所有变量的数据类型,数据类型会在编译期间进行检查。例如C/C++
动态语言:即动态类型语言,在写程序时不用给任何变量指定数据类型,在运行期间才去做数据类型检查。例如Python、Ruby
强类型定义语言:即强制数据类型定义的语言,一旦一个变量被指定了一个数据类型,如果不经过强制转换,那么它永远就是这个数据类型了。
弱类型定义语言:即数据类型可以被忽略的语言,一个变量可以赋不同类型的值。 Python是动态语言、强类型定义语言(类型安全的语言)
VBScript是动态语言、弱类型定义语言(类型不安全的语言)
Java是静态语言、强类型定义语言(类型安全的语言) 二、Python:解释型语言、动态语言、强类型定义语言
优点如下:
1、优雅、明确、简单易懂
2、开发效率高,有强大的第三方库
3、高级语言,无需考虑内存一类的底层细节
4、可移植性强,可以兼容多平台
5、可扩展性强,可以在python中使用其他程序,例如C/C++
6、可嵌入性强,可以将python脚本嵌入到其他程序,例如C/C++
缺点如下:
1、运行速度比编译型语言慢
2、源码以明文形式存放,不能加密
3、线程不能利用多CPU python解释器有:
1、CPython,用C语言开发的,使用最广泛的
2、IPython,基于CPython开发的
3、PyPy,另一种解释器,可以提高代码的执行速度。
4、JPython,用Java开发的
5、IronPython,用C#开发的 Linux中,第一行用“#!/usr/bin/env python”,找python环境变量
系统自带的环境变量在/usr/bin/,后装的环境变量在/usr/local/bin/。 三、变量:
name = “Alex Li”
name2 = name
name = “PaoChe Ge”
print(name,name2)
以上代码中,name2被赋值的是name所指向的内存地址,因此name的赋值发生改变,name2不会发生改变。 四、变量定义规则:
1、变量名只能是字母、下划线、数字的组合
2、变量名第一个字符不能是数字
3、不能用关键字作为变量名
4、3.X中可以用中文作为变量名,但不建议这样做。 五、字符编码:
python3.X默认使用UTF-8。
python2.X默认使用ASCII码,需要使用 # -*- coding:utf-8 -*- 来声明使用的字符集后,方可使用中文。 六、注释方法:
1、单行注释:#
2、多行注释:''''''或者"""""",常用单引号
另,单引号或双引号还可以打印多行,例如:
msg = '''
name = “Alex Li”
name2 = name
name = “PaoChe Ge”
'''
print (msg) 七、用户输入:
1、intput输入的值,默认为字符串类型。
input()
例1:
name = input("what`s your name?") 八、格式化输出:
name = qj
age = 30
job = it
salary = 6000 例1:字符串拼接方法,不建议,因为会在内存中开辟多块内存空间。
info = '''
---------- info of ''' + name + ''' ---------
Name:''' + name + '''
Age:''' + age + '''
job:''' + job + '''
Salary:''' + salary 例2:使用%s、%d、%f占位
info = '''
---------- info of %s ---------
Name:%s
Age:%d
job:%s
Salary:%d
''' % (name,name,age,job,salary)
print(info)
%s:代表字符串
%d:代表整数(需强制相关变量为整数类型)
%f:代表浮点即小数(需强制相关变量为浮点类型)
打印变量类型:print(type(变量名))
强制转换变量类型为整形:age = int(input(age))
强制转换变量类型为字符串:age = str(input(age)) 例3:使用{}占位(官方建议使用此方式)
info = '''
---------- info of {_name} ---------
Name:{_name}
Age:{_age}
job:{_job}
Salary:{_salary}
''' .format(_name = name,_age = age,_job = job,_salary = salary)
print(info) 例4:使用{}占位,花括号中不指定参数
info = '''
---------- info of {0} ---------
Name:{0}
Age:{1}
job:{2}
Salary:{3}
''' .format(name,age,job,salary)
print(info) 九、初识模块
1、使用模块前需先导入
例:
import XXXX
2、实现输入为密文模块 getpass()
例:
import getpass
password = getpass.getpass("password") 十、判断
1、python中if语句的子语句必须要缩进,因为python中if语句没有开始和结束标志符
2、if主语句必须以冒号结尾
3、所有的顶级代码必须顶格写
例1:
import getpass
username = input("username:")
password = getpass.getpass("password:")
_username = qj
_password = 123
if username == _username and password == _password:
print("welcome user {name} login....".format(name=name))
else:
print("invalid username or password!")
例2:猜年龄游戏
age_of_oldboy = 56
guess_age = int(input("guess age:"))
if age_of_oldboy == guess_age:
print("yes,you got it!")
elif age_of_oldboy < guess_age:
print("think smaller....")
else:
print("think bigger....")
十一、循环
1、while
count = 0
while true:
print("count:",count)
count = count +1 #count +=1
例1:
count = 0
age_of_oldboy = 56
while true:
if count == 3
break
guess_age = int(input("guess age:"))
if age_of_oldboy == guess_age:
print("yes,you got it!")
break
elif age_of_oldboy < guess_age:
print("think smaller....")
else:
print("think bigger....")
count +=1
例2:
count = 0
age_of_oldboy = 56
while count < 3:
guess_age = int(input("guess age:"))
if age_of_oldboy == guess_age:
print("yes,you got it!")
break
elif age_of_oldboy < guess_age:
print("think smaller....")
else:
print("think bigger....")
count +=1
else:
print ("you have tried too many times...fuck off")
例3:
count = 0
age_of_oldboy = 56
while count < 3:
guess_age = int(input("guess age:"))
if age_of_oldboy == guess_age:
print("yes,you got it!")
break
elif age_of_oldboy < guess_age:
print("think smaller....")
else:
print("think bigger....")
count +=1
if count == 3:
countine_confirm = input("do you want to keep guessing..?")
if countine_confirm != "n":
count = 0 2、for
i初始为0,每完成一次循环i值自增1
for i in range(10): # 等同于for i in range(0,10,1):
print("loop:",i)
例1:设置步长
i从0开始到9结束,每次自增2
for i in range(0,10,2)
print("loop:",i)
例2:
age_of_oldboy = 56
guess_age = int(input("guess age:"))
for i in range(3):
guess_age = int(input("guess age:"))
if age_of_oldboy == guess_age:
print("yes,you got it!")
break
elif age_of_oldboy < guess_age:
print("think smaller....")
else:
print("think bigger....")
else:
print ("you have tried too many times...fuck off") 3、break和continue
break:退出当前整个循环
continue:跳出本次循环,进行下一次循环
例1:
for i in range(0,10)
if i < 5:
print("loop:",i)
else:
continue
print ("hehe.....")
例2:
for i in range(10):
print(“---------”,i)
for j in range(10):
print(j)
if j > 5:
break 十二、作业:
1、编写登录接口
输入用户名密码
认证成功后显示欢迎信息
输错三次后锁定
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author:Victor Qu
'''
需求:
1、允许用户注册
检测用户名是否存在
2、允许用户登录
输入用户名密码
检测用户名是否存在
认证成功后显示欢迎信息
输错三次后锁定
'''
import os def register ():
"""
在user.data中添加用户
:return:
"""
logo = "用户注册".center(20,"*")
print(logo)
username = input("请输入用户名:")
with open("user.data","r+",encoding="utf-8") as f:
for line in f:
user_data = line.strip().split(":")
if user_data[0] == username:
print("用户名{_username}已存在。".format(_username=username))
return
else:
passwd_time1 = input("请输入密码:")
passwd_time2 = input("请再次输入密码:")
if passwd_time1 == passwd_time2:
f.write("\n{_username}:{_password}:user:True".format(_username=username, _password=passwd_time2))
print("恭喜您,用户{_username}已注册完成。".format(_username=username).center(10, "*"))
return True
else:
print("输入的密码不一致")
return def login ():
"""
验证用户登录信息,密码输错三次则锁定
:return:
"""
logo = "用户登录".center(20,"*")
print(logo)
username = input("请输入用户名:")
with open("user.data","r+",encoding="utf-8") as f:
for line in f:
user_data = line.strip().split(":")
if user_data[0] == username:
break
else:
print("用户{_username}不存在,请注册。".format(_username = username))
return with open("user.data","r+",encoding="utf-8") as f,open("~user.data","w",encoding="utf-8") as f0:
for line in f:
user_data = line.strip().split(":")
if user_data[0] == username:
if user_data[3] == "True":
for i in range(3):
passwd = input("请输入密码:")
if user_data[1] == passwd:
print("恭喜,用户{_username}登录成功。".format(_username = username))
return True
else:
print("密码输错次数过多,用户{_username}已锁定。".format(_username = username))
f0.write(line.replace("True","False"))
continue
else:
print("用户{_username}已被锁定。".format(_username = username))
f0.write(line)
os.remove("user.data")
os.rename("~user.data","user.data") def main():
while True:
print("欢迎使用用户登录/注册系统".center(20,"*"))
li = ("1、登录","2、注册","3、退出")
for line in li:
print(line)
choice = input("请您选择:")
if choice == "":
ret = login()
if ret:
exit()
elif choice == "":
register()
elif choice == "":
print("谢谢,再见")
exit()
else:
print("您的选择错误,请重新选择") main()
2、多级菜单
三级菜单
可一次选择进入各子菜单
所需新知识点:列表、字典
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author:Victor Qu
'''
需求:
1、三级菜单
2、可一次选择进入各子菜单
3、可选择返回上一菜单
4、可选择返回主菜单
5、可选择退出
''' DICT_OF_MEMU = {
"中国":{
"浙江省":{
"杭州市":["上城区","下城区"],
"宁波市":["海曙区","江东区"],
},
"江苏省":{
"南京市":["鼓楼区","玄武区"],
"镇江市":["京口区","丹徒区"],
}
},
"美国":{
"俄亥俄州":{
"城市0":["第零区","第一区"],
"城市1":["第二区","第三区"],
},
"加利福尼亚州":{
"城市2":["第四区","第五区"],
"城市3":["第六区","第七区"],
}
}
} CHS = ["","",""] while True:
if CHS[1] == "":
print("MENU".center(20, "*"))
for country in DICT_OF_MEMU:
print(country)
chice = input("请输入:\n"
"X=退出")
if chice == "x" or chice == "X":
exit("谢谢使用,再见!")
elif chice in DICT_OF_MEMU:
CHS[0] = chice
else:
print("您的输入错误,请重新输入。")
continue while True:
print(CHS[0].center(20, "*"))
for province in DICT_OF_MEMU[CHS[0]]:
print(province)
chice = input("请输入:\n"
"X=退出 B=上级菜单 M=主菜单")
if chice == "x" or chice == "X":
exit("谢谢使用,再见!")
elif chice == "b" or chice == "B":
CHS[1] = ""
break
elif chice == "m" or chice == "M":
CHS[1] = ""
break
elif chice in DICT_OF_MEMU[CHS[0]]:
CHS[1] = chice
break
else:
print("您的输入错误,请重新输入。")
continue if CHS[1] != "":
while True:
print(CHS[1].center(20, "*"))
for city in DICT_OF_MEMU[CHS[0]][CHS[1]]:
print(city)
chice = input("请输入:\n"
"X=退出 B=上级菜单 M=主菜单")
if chice == "x" or chice == "X":
exit("谢谢使用,再见!")
elif chice == "b" or chice == "B":
break
elif chice == "m" or chice == "M":
CHS[1] = ""
break
elif chice in DICT_OF_MEMU[CHS[0]][CHS[1]]:
CHS[2] = chice
print(CHS[2].center(20, "*"))
for district in DICT_OF_MEMU[CHS[0]][CHS[1]][CHS[2]]:
print(district)
exit()
else:
print("您的输入错误,请重新输入。")
continue
python3学习笔记(0)的更多相关文章
- Python3学习笔记(urllib模块的使用)转http://www.cnblogs.com/Lands-ljk/p/5447127.html
Python3学习笔记(urllib模块的使用) 1.基本方法 urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, ...
- Python3学习笔记 - 准备环境
前言 最近乘着项目不忙想赶一波时髦学习一下Python3.由于正好学习了Docker,并深深迷上了Docker,所以必须趁热打铁的用它来创建我们的Python3的开发测试环境.Python3的中文教程 ...
- python3学习笔记(7)_listComprehensions-列表生成式
#python3 学习笔记17/07/11 # !/usr/bin/env python3 # -*- conding:utf-8 -*- #通过列表生成式可以生成格式各样的list,这种list 一 ...
- python3学习笔记(5)_slice
#python3 学习笔记17/07/10 # !/usr/bin/env python3 # -*- coding:utf-8 -*- #切片slice 大大简化 对于指定索引的操作 fruits ...
- 驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址
驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址 最近重新看了乾龙_Heron的<ARM 上电启动及 Uboot 代码分析>(下简称<代码分析>) ...
- ArcGIS API for JavaScript 4.2学习笔记[0] AJS4.2概述、新特性、未来产品线计划与AJS笔记目录
放着好好的成熟的AJS 3.19不学,为什么要去碰乳臭未干的AJS 4.2? 4.2全线基础学习请点击[直达] 4.3及更高版本的补充学习请关注我的博客. ArcGIS API for JavaScr ...
- boost 学习笔记 0: 安装环境
boost 学习笔记 0: 安装环境 最完整的教程 http://einverne.github.io/post/2015/12/boost-learning-note-0.html Linux 自动 ...
- JavaScript学习笔记[0]
JavaScript学习笔记[0] 使用的是廖雪峰JavaScript教程. 数据类型 Number 表示数字,不区分浮点整形. === 比较时不转化数据类型. == 反之. NaN与任何值都不想等, ...
- python3学习笔记(6)_iteration
#python3 学习笔记17/07/10 # !/usr/bin/env python3 # -*- coding:utf-8 -*- #类似 其他语言的for循环,但是比for抽象程度更高 # f ...
- Spark学习笔记0——简单了解和技术架构
目录 Spark学习笔记0--简单了解和技术架构 什么是Spark 技术架构和软件栈 Spark Core Spark SQL Spark Streaming MLlib GraphX 集群管理器 受 ...
随机推荐
- hdu5696 区间的价值
区间的价值 我们定义"区间的价值"为一段区间的最大值*最小值. 一个区间左端点在L,右端点在R,那么该区间的长度为(R-L+1). 现在聪明的杰西想要知道,对于长度为k的区间,最大 ...
- JAVA提高五:注解Annotation
今天我们学习JDK5.0中一个非常重要的特性,叫做注解.是现在非常流行的一种方式,可以说因为配置XML 比较麻烦或者比容易查找出错误,现在越来越多的框架开始支持注解方式,比如注明的Spring 框架, ...
- Android基础知识02—安卓日志工具LogCat的五种方法
--------Android 02-------- >>> Android的日志工具LogCat 五个方法,记录信息的级别不一样,从低到高为: 1.Log.v()-日志 ...
- ModelForm
这是一个神奇的组件,通过名字我们可以看出来,这个组件的功能就是把model和form组合起来,对,你没猜错,相信自己的英语水平. 先来一个简单的例子来看一下这个东西怎么用: 比如我们的数据库中有这样一 ...
- VS2017生成解决方案报错,提示对路径的访问被拒绝
目前我用的vs2017的版本是15.3.5.生成解决方案有时会提示如下: 开始以为是权限的问题,找到相应的目录设置everyone权限,再次生成还是不行.重启VS试了下,还是不行. 最后无奈重启下电脑 ...
- C++基础知识1
1 初始C++ 1.1 编写一个简单的C++程序 1.1.1 程序结构 每个C++程序都包括一个或多个函数(function),但只有一个主函数main.操作系统通过调用 main来运行C++程序. ...
- SimpleDateFormat时间格式化存在线程安全问题
想必大家对SimpleDateFormat并不陌生.SimpleDateFormat 是 Java 中一个非常常用的类,该类用来对日期字符串进行解析和格式化输出,但如果使用不小心会导致非常微妙和难以调 ...
- Spring 组成
Spring 主要由 Bean Context Core 三个组件组成 Bean 组件是整个 Spring 核心,Spring 通过管理 Bean 组件提供服务 Context 是 Bean 组件容器 ...
- java笔记04: String的理解与运用
一,“==”与equals() 运行以下代码,如何解释其输出结果? public class StringPool { public static void main(String args[]) { ...
- 一段批处理脚本(for 嵌套)
需求: 1.服务器上有一堆按日期生成的目录,已经有N个月了,需要只取当前月份的目录. 2.目录中有一系列文件,文件名字不一样,但存在一定的重复规律. 3.需要从服务器上拷贝文件到本地,自动去重,拷贝到 ...