1. 编程与编程语言
编程的目的是什么?
#计算机的发明,是为了用机器取代/解放人力,而编程的目的则是将人类的思想流程按照某种能够被计算机识别的表达方式传递给计算机,从而达到让计算机能够像人脑/电脑一样自动执行的效果。
什么是编程语言?
#上面提及的能够被计算机所识别的表达方式即编程语言,语言是沟通的介质,而编程语言是程序员与计算机沟通的介质。在编程的世界里,计算机更像是人的奴隶,人类编程的目的就命令奴隶去工作。
什么是编程?
#编程即程序员根据需求把自己的思想流程按照某种编程语言的语法风格编写下来,产出的结果就是包含一堆字符的文件。
#强调:程序在未运行前跟普通文件无异,只有程序在运行时,文件内所写的字符才有特定的语法意义
所以
Python是语言,而学习语言的套路都是一样的,以英语学习为例,你需要学单词,然后学语法,最后写作文。
英语的单词---------->Python中的关键字
英语的语法---------->Python的语法
英语的作文---------->用Python语言写的程序
有人说python很简单,全都是在记忆一些固定的套路而已。学习没有捷径,要经过几万行代码的洗礼,才有可能成为一名优秀的程序员。
屌丝到不能再屌丝的我们,如果没有这点意志力,就别妄想咸鱼翻身了。
2. 编程语言分类
编程的语言的发展经历了
#机器语言:站在计算机(奴隶)的角度,说计算机能听懂的语言,那就是直接用二进制编程,直接操作硬件;
#汇编语言:站在计算机(奴隶)的角度,简写的英文标识符取代二进制去编写程序,本质仍然是直接操作硬件;
#高级语言:站在人(奴隶主)的角度,说人话,即用人类的字符去编写程序,屏蔽了硬件操作
高级语言更接近人类语言,因而造就了:他必须翻译成被计算机能读懂的二进制后,才能被执行,按照翻译方式分为:
#1. 编译型(需要编译器,相当于用谷歌翻译):如C,执行速度快,调试麻烦
#2. 解释型(需要解释器,相当于同声传译):如python,执行速度慢,调试方便
总结:
机器语言
#优点是最底层,执行速度最快
#缺点是最复杂,开发效率最低
汇编语言
#优点是比较底层,执行速度最快
#缺点是复杂,开发效率最低
高级语言
#编译型语言执行速度快,不依赖语言环境运行,跨平台差
#解释型跨平台好,一份代码,到处使用,缺点是执行速度慢,依赖解释器运行
#速度不是关键,开发效率高才是王道
3. 主流编程语言介绍
#C语言:
C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。它由美国贝尔研究所的D.M.Ritchie于1972年推出,1978年后,C语言已先后被移植到大、中、小及微型机上,它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画,具体应用比如单片机以及嵌入式系统开发。
#C++:
C++是C语言的继承的扩展,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。
C++不仅拥有计算机高效运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。
#JAVA:
Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE, JavaEE, JavaME)的总称。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
#Python:
Python是一门优秀的综合语言, Python的宗旨是简明、优雅、强大,在人工智能、云计算、金融分析、大数据开发、WEB开发、自动化运维、测试等方向应用广泛,已是全球第4大最流行的语言。
4. python介绍
python的创始人是吉多.范罗苏姆,python这个名字,来自吉多所挚爱的电视剧Monty Python's Flying Circus,他希望这个新的叫做python的语言,能符合他的理想:创造一种C和shell之间,功能全面,易学易用的,可扩展的语言。
python可以应用于众多领域:数据分许、组件集成、网络服务、图像处理、数值计算和科学计算等众多领域,目前业内几乎所有大中型互联网企业都在使用python,如:Youtube、Dropbox、BT、中国知乎(Quora)、豆瓣、google、Yahoo!、Facebook、NASA、百度、腾讯、汽车之家、美团等
目前python的主要应用领域
#1. WEB开发——最火的Python web框架Django, 支持异步高并发的Tornado框架,短小精悍的flask,bottle, Django官方的标语把Django定义为the framework for perfectionist with deadlines(大意是一个为完全主义者开发的高效率web框架)
#2. 网络编程——支持高并发的Twisted网络框架, py3引入的asyncio使异步编程变的非常简单
#3. 爬虫——爬虫领域,Python几乎是霸主地位,Scrapy\Request\BeautifuSoap\urllib等,想爬啥就爬啥
#4. 云计算——目前最火最知名的云计算框架就是OpenStack,Python现在的火,很大一部分就是因为云计算
#5. 人工智能——谁会成为AI 和大数据时代的第一开发语言?这本已是一个不需要争论的问题。如果说三年前,Matlab、Scala、R、Java 和 Python还各有机会,局面尚且不清楚,那么三年之后,趋势已经非常明确了,特别是前两天 Facebook 开源了 PyTorch 之后,Python 作为 AI 时代头牌语言的位置基本确立,未来的悬念仅仅是谁能坐稳第二把交椅。
#6. 自动化运维——问问中国的每个运维人员,运维人员必须会的语言是什么?10个人相信会给你一个相同的答案,它的名字叫Python
#7. 科学运算—— 你知道么,97年开始,NASA就在大量使用Python在进行各种复杂的科学运算,随着NumPy, SciPy, Matplotlib, Enthought librarys等众多程序库的开发,使的Python越来越适合于做科学计算、绘制高质量的2D和3D图像。和科学计算领域最流行的商业软件Matlab相比,Python是一门通用的程序设计语言,比Matlab所采用的脚本语言的应用范围更广泛
#9. 游戏开发——在网络游戏开发中Python也有很多应用。相比Lua or C++,Python 比 Lua 有更高阶的抽象能力,可以用更少的代码描述游戏业务逻辑,与 Lua 相比,Python 更适合作为一种 Host 语言,即程序的入口点是在 Python 那一端会比较好,然后用 C/C++ 在非常必要的时候写一些扩展。Python 非常适合编写 1 万行以上的项目,而且能够很好地把网游项目的规模控制在 10 万行代码以内。另外据我所知,知名的游戏<文明> 就是用Python写的
python有哪些种类
我们现在知道了Python是一门解释型语言,代码想运行,必须通过解释器执行,Python的解释器本身也可以看作是个程序(翻译官司是哪国人不重要),这个程序是什么语言开发的呢? 答案是好几种语言? what? 因为Python有好几种解释器,分别基于不同语言开发,每个解释器特点不同,但都能正常运行我们的Python代码,下面分别来看下:
#CPython:CPython是使用最广且被的Python解释器。本教程以CPython为准。
当我们从Python官方网站下载并安装好Python 2.7后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。
#IPython
IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。
CPython用>>>作为提示符,而IPython用In [序号]:作为提示符。
#PyPy
PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。
绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。如果你的代码要放到PyPy下执行,就需要了解PyPy和CPython的不同点。
#Jython
Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。
#IronPython
IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。
python2还是python3?
目前虽然业内很多企业还在大量使用Python2.6 or 2.7,因为旧项目几十万甚至上百万行的代码想快速升级到3.0不是件容易的事,但是大家在开发新项目时几乎都会使用3.x。
另外Python3 确实想比2.x做了很多的改进,直观点来讲,就像从XP升级到Win7的感觉一样,棒棒的。
Py2 和Py3的具体细节区别我们在以后课程中会慢慢深入。
5. 第一个python程序
python解释器执行程序是解释执行,即打开文件读内容,因此文件的后缀名没有硬性限制,但通常定义为.py结尾
#C++
#include <iostream>
int main(void)
{
std::cout<<"Hello world";
}
#C
#include <stdio.h>
int main(void)
{
printf("\nhello world!");
return 0;
}
#JAVA
public class HelloWorld{
// 程序的入口
public static void main(String args[]){
// 向控制台输出信息
System.out.println("Hello World!");
}
}
#PHP
<?php
echo "hello world!";
?>
#Ruby
puts "Hello world."
#GO
package main
import "fmt"
func main(){
fmt.Printf("Hello World!\n God Bless You!");
}
6. 变量
# 什么是变量
# 变量即变化的量,核心是"变"与"量"二字,变即变化,量即衡量状态
为什么要有变量
# 程序执行的本质就是一系列状态的变化,变是程序执行的直接体现。所以我们需要有一种机制能够反映或者说是保存下来程序执行状态以及状态的变化
# 比如:
英雄的等级为1,打怪升级(变)为10
僵尸的存活状态True,被植物打死了,于是变为False
人的名字为egon,也可以修改为Egon
如何定义变量
# 变量名(相当于门牌号,指向值所在的空间),等号,变量值
name = "dingding"
sex = "male"
age = 18
level = 10
变量的定义范围
#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']
定义方式
#驼峰体
AgeOfOldboy = 56
NumberOfStudents = 80
#下划线(推荐使用)
age_of_oldboy = 56
number_of_students = 80
定义变量名不好的方式
#1. 变量名为中文、拼音
#2. 变量名过长
#3. 变量名词不达意
定义的变量会有id, type, value
#1 等号比较的是value,
#2 is比较的是id
#强调:
#1. id相同,意味着type和value必定相同
#2. value相同type肯定相同,但id可能不同,如下
>>> x='Info Egon:18'
>>> y='Info Egon:18'
>>> id(x)
4376607152
>>> id(y)
4376607408
>>>
>>> x == y
True
>>> x is y
False
常量
# 常量是指不变的量,如pai 3.141592653,或在程序运行过程中不会改变的量
# 举例
加入我的年龄会变,那这个就是变量;但在一些情况下,我的年龄不变了,那就是常量了。
# 在python中没有一个专门的语法代表常量,程序员约定俗成用变量名全是大写代表常量
AGE_OF_DINGDING = 27
7. 用户与程序交互
# 在python3中
input: 用户输入任何值,都存成字符串类型
# 在python2中
input: 用户输入什么类型,就存成什么类型
raw_input: 等于python3中的input
注释
#1. 不用全部加注释,只需要在自己觉得重要或不好理解的部分加注释即可
#2. 注释可以用中文或英文,但不要用拼音
"""
多行注释可以用三对双引号
""
文件头
#!/usr/bin/env python
# -*- coding:utf-8 -*-
8. 基本数据类型
什么是数据?为何要有多种类型的数据?
#数据即变量的值,如age=18,18则是我们保存的数据。
#变量的是用来反映/保持状态以及状态变化的,针对不同的状态就应该用不同类型的数据去标识
数字
# int整型
定义:age=10 #age=int(10)
用于标识:年龄,等级,身份证号,qq号,个数
# float浮点
定义: salary=3.1 #salary=float(3.1)
同于标识: 工资,身高,体重
# int整型
在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即
-2147483648~2147483647
在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即
-9223372036854775808~9223372036854775807
# long(长整型)
跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。
注意:
1.自从python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。
2.在python3里不再有long类型了,全都是int
a = 2**64
print(type(a))
b = 2**60
print(type(b))
# complex复数型
x = 1-2j
print(x.imag)
-2.0
print(x.real)
1.0
字符串
# 在python中,加了引号的字符就是字符串类型,python并没有字符类型
定义: name='dingding' #name=str('dingding')
用于标识: 描述性的内容,如姓名,性别,国籍,种族
#那单引号、双引号、多引号有什么区别呢? 单双引号木有任何区别,只有下面这种情况 我需要考虑单双的配合
msg = "My name is Egon , I'm 18 years old!"
#多引号什么作用呢?作用就是多行字符串必须用多引号
msg = '''
今天我想写首小诗,
歌颂我的同桌,
你看他那乌黑的短发,
好像一只炸毛鸡。
'''
print(msg)
#数字可以进行加减乘除等运算,字符串呢?也能但只能进行"相加"和"相乘"运算。
name='egon'
age='18'
print(name+age)
'egon18'
print(name*5)
'egonegonegonegonegon'
#注意1:字符串相加的效率不高
字符串1+字符串3,并不会在字符串1的基础上加字符串2,而是申请一个全新的内存空间存入字符串1和字符串3,相当字符串1与字符串3的空间被复制了一次,
#注意2:只能字符串加字符串,不能字符串加其他类型
列表
# 在[]内用逗号分隔, 可以存放n个任意类型的值
定义: student=['dingding','aping','peiqi']
用于标识: 存储多个值的情况,比如一个人有多个爱好
# 存放多个学生的信息:姓名,年龄,爱好
students_info=[['dingding', 18, ['play',]], ['peiqi', 18, ['play', 'sleep']]]
students_info[0] [2] [0] #取出第一个学生的第一个爱好
'play'
字典
# 为何还要用字典
存放一个人的信息:姓名,性别,年龄,很明显是多个值,既然是存多个值,我们完全可以基于刚刚学习的列表去存放,如下
info = ['dingding', 'male', '28']
定义列表的目的不单单是为了存,还要考虑取值,如果我想取出这个人的年龄,可以用
info[2]
18
但这是基于我们已经知道在第3个位置存放的是年龄的前提下,我们才知道索引2对应的是年龄
即:
#name, sex, age
info=['egon','male',18]
而这完全只是一种假设,并没有真正意义上规定第三个位置存放的是年龄,于是我们需要寻求一种,即可以存放多个任意类型的值,又可以硬性规定值的映射关系的类型,比如key=value,这就用到了字典
# 字典
# 在{}内用逗号分隔,可以存放多个key:value的值, value可以是任意类型
定义
info = {'name':'dingding', 'age':18, 'sex':'male'}
# info=dict({'name':'dingding', 'age':18, 'sex':'male'})
用于标识: 存储多个值的情况,每个值都有唯一一个对应的key,可以更为方便高效的取值
# 举例
info = {
'name': 'dingding',
'hobbies': ['play', 'sleep'],
'company_info': {
'name': 'xiaoding',
'type': 'education',
'emp_num': 40,
}
}
# 取出公司名
print(info['company_info']['name'])
students = {
{'name':'alex','age':38,'hobbies':['play','sleep']},
{'name':'egon','age':18,'hobbies':['read','sleep']},
{'name':'wupeiqi','age':58,'hobbies':['music','read','sleep']},
}
# 取出第二个学生的第二个爱好
print(students[1]['hobbies'][1])
布尔
#布尔值,一个True一个False
#计算机俗称电脑,即我们编写程序让计算机运行时,应该是让计算机无限接近人脑,或者说人脑能干什么,计算机就应该能干什么,人脑的主要作用是数据运行与逻辑运算,此处的布尔类型就模拟人的逻辑运行,即判断一个条件成立时,用True标识,不成立则用False标识
# 例1
a = 3
b = 5
print(a>b)
# 不成立就是false,即假
False
# 成立就是True,即真
True
布尔类型的重点知识:
# 所有数据类型都自带布尔值
1. None,0,空(空字符串,空列表,空字典等)三种情况下布尔值为False
2. 其余均为真
注意
#1. 可变类型: 在id不变的情况下, value可以变,则称为可变类型,如列表,字典
#2. 不可变类型: value一旦改变,id也改变,则称为不可变类型(id变,意味着创建了新的内存空间)
9. 格式化输出
程序中经常会有这样的场景: 要求用户输入信息,然后打印成固定的格式
比如要求输入用户名和年龄,然后打印以下格式:
my name is xxx, my age is xxx.
很明显,用逗号进行字符串拼接,只能把用户输入的名字和年龄放到末尾,无法放到指定的xxx位置。而且数字也必须经过str(数字)的转换才能与字符串进行拼接
# %s 字符串占位符:可以接收字符串,也可以接收数字
print('My name is %s, my age is %s' %('dingding', 18))
# %d数字占位符, 只能接收数字
print('My name is %s, my age is %d' %('dading', 18))
print('My name is %s, my age is %d' %('dading', '18')) # 报错
# 接收用户输入,打印成指定格式
name = input('Your name: ')
age = input('your age: ') # 用户输入18, 会变成字符串18,无法传给%d
print('My name is %s, my age is %s' %(name, age))
# 注意
# print('My name is %s, my age is %d' %(name, age)) # age为字符串类型,无法传给%d,所以会报错
练习
# 用户输入姓名、年龄、工作、爱好,然后打印出以下格式
------------ info of Dingding ------------
Name: Dingding
Age: 22
Sex: male
Job: Teacher
----------------- End ----------------------
Name = input("请输入姓名: ")
Age = input("请输入年龄: ")
Sex = input("请输入性别: ")
Job = input("请输入工作: ")
print('''------------ info of Egon -----------\n
Name : %s\n
Age : %s\n
Sex : %s\n
Job : %s\n
------------- end -----------------\n
''' % (Name, Age, Sex, Job))
10. 基本运算符
计算机可以进行的运算有很多种,不只有加减乘除。运算种类可分为算数运算、比较运算、逻辑运算、赋值运算
算数运算:
以下假设变量: a=10, b=20
比较运算:
以下假设变量: a=10, b=20
赋值运算:
以下假设变量:a=10, b=20
逻辑运算:
布尔:与或非
身份运算:
is 比较的是 id
而 == 比较的是值
11. 流程控制之 if ... else ...
既然我们编程的目的是为了控制计算机能够像人脑一样工作,那么人脑能做什么,就需要程序中想要的机制去模拟。人脑无非是数学运算和逻辑运算,对于数学运算在上一节就已经说过了。对于逻辑运算,即人根据外部条件的变化而做出不同的反映。比如
# 如果女人的年龄>30岁,那么叫阿姨,否则叫姐姐
age_of_girl = 31
if age_of_girl > 30:
print('阿姨好')
age_of_girl = 18
if age_of_girl > 30:
print('阿姨好')
else:
print('姐姐好')
# 如果:女人的年龄>=18 并且 <22 并且 身高>170 并且 体重 < 100 并且是漂亮的,那么表白,否则叫阿姨
age_of_girl = 20
height = 171
weight = 90
face = True
if 18 <= age_of_girl < 22 and height > 170 and weight < 100 and face == True:
print('表白')
else:
print('阿姨好')
# if嵌套if
# 在表白成功的基础上继续,如果表白成功那么在一起,否则:打印...
age_of_girl = 20
height = 171
weight = 90
face = True
success = False
if 18 <= age_of_girl < 22 and height > 170 and weight < 100 and face == True:
if success:
print('表白成功,在一起')
else:
print('再也不相信爱情了')
else:
print('阿姨好')
"""
如果:成绩>=90,优秀
成绩>=80且<90,良好
成绩>=70且<80,普通
其他情况: 很差
"""
score = input('>>: ')
score = int(score)
if score >= 90:
print('优秀')
elif score >= 80:
print('良好')
elif score >= 70:
print('普通')
else:
print('很差')
# 格式:
if 条件1:
缩进的代码块
elif 条件2:
缩进的代码块
elif 条件3:
缩进的代码块
......
else:
缩进的代码块
# 练习1: 用户登陆验证
#!/usr/bin/env python
name = input('请输入用户的名字:')
password = input('请输入密码:')
if name == 'dingding' and password == '666':
print('dingding login success')
else:
print('用户名或密码错误')
##########################################
# 练习2: 根据用户输入内容输出其权限
#!/usr/bin/env python
'''
egon --> 超级管理员
tom --> 普通管理员
jack,rain --> 业务主管
其他 --> 普通用户
'''
name=input('请输入用户名字:') if name == 'egon': print('超级管理员') elif name == 'tom': print('普通管理员') elif name == 'jack' or name == 'rain': print('业务主管') else: print('普通用户')
##########################################
# 练习3
# 如果:今天是Monday,那么:上班 # 如果:今天是Tuesday,那么:上班 # 如果:今天是Wednesday,那么:上班 # 如果:今天是Thursday,那么:上班 # 如果:今天是Friday,那么:上班 # 如果:今天是Saturday,那么:出去浪 # 如果:今天是Sunday,那么:出去浪
#方式一:
today=input('>>: ') if today == 'Monday': print('上班') elif today == 'Tuesday': print('上班') elif today == 'Wednesday': print('上班') elif today == 'Thursday': print('上班') elif today == 'Friday': print('上班') elif today == 'Saturday': print('出去浪') elif today == 'Sunday': print('出去浪') else: print('''必须输入其中一种: Monday Tuesday Wednesday Thursday Friday Saturday Sunday ''')
# 方式二:
today = input('>>: ')
if today == "Saturday" or today == "Sunday":
print('出去浪')
elif today == 'Monday' or today == 'Tuesday' or today == 'Wednesday' or today == 'Thursday' or today == 'Friday':
print('上班')
else:
print('''必须输入其中一种:
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
''')
# 方式三
today = input('>>: ')
if today in ['Saturday', 'Sunday']:
print('出去浪')
elif today in ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']:
print('上班')
else:
print('''必须输入其中一种:
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
''')
12. 流程控制之while循环
# 1.为什么要用循环
# 上节课我已经学会用if .. else 来猜年龄的游戏啦,但是只能猜一次就中的机率太小了,如果我想给玩家3次机会呢?就是程序启动后,玩家最多可以试3次,这个怎么弄呢?我总不能想着把代码复制3次吧。。。。
age_of_oldboy = 48
guess = int(input(">>:")) if guess > age_of_oldboy : print("猜的太大了,往小里试试...") elif guess < age_of_oldboy : print("猜的太小了,往大里试试...") else: print("恭喜你,猜对了...") #第2次 guess = int(input(">>:")) if guess > age_of_oldboy : print("猜的太大了,往小里试试...") elif guess < age_of_oldboy : print("猜的太小了,往大里试试...") else: print("恭喜你,猜对了...") #第3次 guess = int(input(">>:")) if guess > age_of_oldboy : print("猜的太大了,往小里试试...") elif guess < age_of_oldboy : print("猜的太小了,往大里试试...") else: print("恭喜你,猜对了...")
# 作为小白,也觉得这样的代码实在太Low了,以后要改动功能还得修改3次,因此我们要记住,写重复的代码是程序员最不耻的行为。那么如何做到不用谢重复代码又能让程序重复一段代码多次呢?循环语句就派上用场啦。
# 2. 条件循环:while 语法如下
while 条件:
# 循环体
# 如果条件为真, 那么循环体则执行,执行完毕后再次循环,重新判断条件
# 如果条件为假, 那么循环体不执行,循环终止
# 打印0-10
count = 0
while count <= 10:
print('loop', count)
count += 1
# 打印0-10之间的偶数
count = 0
while count <= 10:
if count%2 == 0:
print('loop', count)
count += 1
# 打印0-10之间的奇数
count = 0
while count <= 10:
if count%2 == 1:
print('loop', count)
count += 1
# 死循环
import time
num = 0
while True:
print('count', num)
time.sleep(1)
num += 1
# 循环嵌套与tag
tag = True
while tag:
...
while tag:
...
while tag:
tag = false
# 练习,要求如下
1. 循环验证用户输入的用户名和密码
2. 认证通过后,运行用户重复执行命令
3. 当用户输入命令为quit时,则退出整个程序
#实现一:
name = 'Jane'
password = '123'
# 进入while循环
while True:
# 用户输入用户名
inp_name = input('用户名:')
# 用户输入密码
inp_age = input('密码:')
# 判断用户输入的用户和密码是否正确
if inp_name == name and inp_age ==password:
# 用户和密码正确后进入循环
while True:
# 用户输入指令
cmd = input('>>: ')
# 如果没有指令,则跳出此循环,将进入下一次循环
if not cmd:
continue
# 如果指令为quit,则跳出此循环,不再进入循环
if cmd == 'quit':
break
# 打印用户输入的命令
print('<%s>' % cmd)
else:
# 用户密码输错
print('用户名或密码错误')
# 跳出本次循环,继续进入下一次的while循环
continue
#实现二:使用tag
name = 'Jane'
password = '123'
tag = True
# 进入while循环
while tag:
# 用户输入用户名
inp_name = input('用户名:')
# 用户输入密码
inp_age = input('密码:')
# 判断用户输入的用户和密码是否正确
if inp_name == name and inp_age ==password:
# 用户和密码正确后进入循环
while tag:
# 用户输入指令
cmd = input('>>: ')
# 如果没有指令,则跳出此循环,将进入下一次循环
if not cmd:
continue
# 如果指令为quit,则跳出此循环,不再进入循环
if cmd == 'quit':
tag = False
continue
# 打印用户输入的命令
print('<%s>' % cmd)
else:
# 用户密码输错
print('用户名或密码错误')
#break用于退出本层循环
while True:
print "123"
break
print "456"
#continue用于退出本次循环,继续下一次循环
while True:
print "123"
continue
print "456"
# while+else
#与其它语言else 一般只与if 搭配不同,在Python 中还有个while ...else 语句,while 后面的else 作用是指,当while 循环正常执行完,中间没有被break 中止的话,就会执行else后面的语句
count = 0
while count <= 5 :
count += 1
print("Loop",count)
else:
print("循环正常执行完啦")
print("-----out of while loop ------")
输出
Loop 1
Loop 2
Loop 3
Loop 4
Loop 5
Loop 6
循环正常执行完啦
-----out of while loop ------
#如果执行过程中被break啦,就不会执行else的语句啦
count = 0
while count <= 5 :
count += 1
if count == 3:break
print("Loop",count)
else:
print("循环正常执行完啦")
print("-----out of while loop ------")
输出
Loop 1
Loop 2
-----out of while loop ------
while练习:
# 1. 使用while循环输出1 2 3 4 5 6 8 9 10
# 方法1
count = 1
while count <= 10:
if count == 7:
count += 1
continue
print(count)
count += 1
# 方法2
count = 1
while count <= 10:
if count != 7:
print(count)
count += 1
# 2. 求1-100的所有数的和
# 和为0
res = 0
count = 1
while count <= 100:
res = res + count
count += 1
print(res)
# 3. 输出 1-100 内的所有奇数
count = 1
while count <= 100:
if count % 2 != 0:
print(count)
count += 1
# 4. 输出 1-100 内的所有偶数
count = 1
while count <= 100:
if count % 2 == 0:
print(count)
count += 1
# 5. 求1-2+3-4+5 ... 99的所有数的和
res = 0
count = 1
while count <= 100:
if count % 2 == 0:
res -= count
else:
res += count
count += 1
print(res)
# 6. 用户登陆(三次机会重试)
count = 1
name = 'ading'
password = '12345'
while count <= 3:
inp_name = input("用户名:")
inp_pwd = input("密码:")
if inp_name == name and inp_pwd == password:
print("登陆成功")
break
else:
print("用户和密码错误")
count += 1
# 7:猜年龄游戏
"""
要求:
允许用户最多尝试3次,3次都没猜对的话,就直接退出,如果猜对了,打印恭喜信息并退出
"""
age = 48
count = 1
while count <= 3:
inp_age = input("请输入年龄:")
inp_age = int(inp_age)
if inp_age == age:
print("猜对了")
break
else:
print("猜错了")
count += 1
# 8:猜年龄游戏升级版
'''要求:
允许用户最多尝试3次
每尝试3次后,如果还没猜对,就问用户是否还想继续玩,如果回答Y或y, 就继续让其猜3次,以此往复,如果回答N或n,就退出程序
如何猜对了,就直接退出
'''
age = 48
count = 1
while count <= 3:
inp_age = input("请输入年龄:")
inp_age = int(inp_age)
if inp_age == age:
print("猜对了")
break
else:
print("猜错了")
count += 1
while count > 3:
print("你已经猜错3次了!")
cmd = input("是否继续玩?")
if cmd in ['Y', 'y']:
count = 1
break
elif cmd in ['N', 'n']:
print("退出游戏")
break
else:
print("请输入Y|y, N|n")
continue
##########################
8. 优化后的程序
age = 48
count = 0
while True:
if count == 3:
cmd = input('继续(Y|N?)>>:')
if cmd == 'Y' or cmd == 'y':
count = 0
else:
break
inp_age = input('年龄>>:')
if inp_age == age:
print('you got it success')
break
count += 1
13. 流程控制之for循环
# 1.迭代式循环: for,语法如下
for i in range(10):
缩进的代码块
# 2. break与continue(同上,与while中用法一致)
# 3. 循环嵌套
# 打印乘法表
for i in range(1, 10):
for j in range(1, i+1):
print('%s * %s = %s' % (j, i, i*j), end=' ')
print()
# 金字塔
'''
#max_level=5
* #current_level=1,空格数=4,*号数=1
*** #current_level=2,空格数=3,*号数=3
***** #current_level=3,空格数=2,*号数=5
******* #current_level=4,空格数=1,*号数=7
********* #current_level=5,空格数=0,*号数=9
#数学表达式
空格数=max_level-current_level
*号数=2*current_level-1
'''
# 实现
max_level = 5
for current_level in range(1, max_level+1):
for i in range(max_level - current_level):
print(' ', end='')
for j in range(current_level * 2 - 1):
print('*', end='')
# print() 本身自带换行,完美输出
print()
14. 作业
练习题目
# 1. 简述编译型与解释型语言的区别,且分别列出你知道的哪些语言属于编译型,哪些属于解释型
# 2. 执行 Python 脚本的两种方式是什么
交互式模式
脚本文件的形式
# 3. Pyhton 单行注释和多行注释分别用什么?
# 和 """ """ 或 ''' '''
# 4. 布尔值分别有什么?
True 和 False, 其中False还有三种情况: None, 0, 空(空字符串、 空列表、 空字典等)
# 5. 声明变量注意事项有那些?
变量只能是字母、数字或下划线的任意组合
变量名的第一个字符不能是数字
关键字不能声明为变量名
# 6. 如何查看变量在内存中的地址?
# 7. 写代码
实现用户输入用户名和密码,当用户名为 seven 且 密码为 123 时,显示登陆成功,否则登陆失败!
实现用户输入用户名和密码,当用户名为 seven 且 密码为 123 时,显示登陆成功,否则登陆失败,失败时允许重复输入三次
实现用户输入用户名和密码,当用户名为 seven 或 alex 且 密码为 123 时,显示登陆成功,否则登陆失败,失败时允许重复输入三次
# 8. 写代码
-
a. 使用while循环实现输出2-3+4-5+6...+100 的和
b. 使用 while 循环实现输出 1,2,3,4,5, 7,8,9, 11,12 使用 while 循环实现输出 1-100 内的所有奇数e. 使用 while 循环实现输出 1-100 内的所有偶数
-
现有如下两个变量,请简述 n1 和 n2 是什么关系?
n1 = 123456
n2 = n1
来源:oschina
链接:https://my.oschina.net/u/4256408/blog/3520383