人生苦短,我用 Python —— Life is short, you need Python
私信小编01即可获取大量的Python学习资料
Python 的创始人为吉多·范罗苏姆(Guido van Rossum)
计算机不能直接理解任何除机器语言以外的语言,所以必须要把程序员所写的程序语言翻译成机器语言,计算机才能执行程序。 将其他语言翻译成机器语言的工具,被称为编译器
编译器翻译的方式有两种:一个是 编译 ,另外一个是 解释 。两种方式之间的区别在于 翻译时间点的不同 。当编译器 以解释方式运行的时候 ,也称之为 解释器
1999 年,吉多·范罗苏姆向 DARPA 提交了一条名为 “Computer Programming for Everybody” 的资金申请,并在后来说明了他对 Python 的目标:
这些想法中的基本都已经成为现实,Python 已经成为一门流行的编程语言
在 Python 社区,吉多被称为“仁慈的独裁者”
同一样问题,用不同的语言解决,代码量差距还是很多的,一般情况下 Python 是 Java 的 1/5,所以说 人生苦短,我用 Python
# 这是第一个单行注释print("hello python")
为了保证代码的可读性, # 后面建议先添加一个空格,然后再编写相应的说明文字
print("hello python") # 输出 `hello python`
"""这是一个多行注释在多行注释之间,可以写很多很多的内容……""" print("hello python")
在一些正规的开发团队,通常会有 代码审核 的惯例,就是一个团队中彼此阅读对方的代码
任何语言的程序员,编写出符合规范的代码,是开始程序生涯的第一步
计算机,顾名思义就是负责进行 数学计算 并且 存储计算结果 的电子设备
运算符描述实例+加10 + 20 = 30-减10 - 20 = -10*乘10 * 20 = 200/除10 / 20 = 0.5//取整除返回除法的整数部分(商) 9 // 2 输出结果 4%取余数返回除法的余数 9 % 2 = 1**幂又称次方、乘方,2 ** 3 = 8
In [1]: "-" * 50Out[1]: '----------------------------------------'
运算符描述**幂 (最高优先级)* / % //乘、除、取余数、取整除+ -加法、减法
变量名 = 值
变量定义之后,后续就可以直接使用了
# 定义 qq_number 的变量用来保存 qq 号码In [1]: qq_number = "1234567"# 输出 qq_number 中保存的内容In [2]: qq_numberOut[2]: '1234567'# 定义 qq_password 的变量用来保存 qq 密码In [3]: qq_password = "123"# 输出 qq_password 中保存的内容In [4]: qq_passwordOut[4]: '123'
使用交互式方式,如果要查看变量内容,直接输入变量名即可,不需要使用 print 函数
# 定义 qq 号码变量qq_number = "1234567"# 定义 qq 密码变量qq_password = "123"# 在程序中,如果要输出变量的内容,需要使用 print 函数print(qq_number)print(qq_password)
使用解释器执行,如果要输出变量的内容,必须要要使用 print 函数
# 定义苹果价格变量price = 8.5# 定义购买重量weight = 7.5# 计算金额money = price * weightprint(money)
# 定义苹果价格变量price = 8.5# 定义购买重量weight = 7.5# 计算金额money = price * weight# 只要买苹果就返 5 元money = money - 5print(money)
利用 单步调试 确认变量中保存数据的类型
提示:在 Python 2.x 中, 整数 根据保存数值的长度还分为:
intlong
In [1]: type(name)
i = 10f = 10.5b = True
In [1]: first_name = "三"In [2]: last_name = "张"In [3]: first_name + last_nameOut[3]: '三张'
In [1]: "-" * 50Out[1]: '--------------------------------------------------'
In [1]: first_name = "zhang"In [2]: x = 10In [3]: x + first_name---------------------------------------------------------------------------TypeError: unsupported operand type(s) for +: 'int' and 'str'类型错误:`+` 不支持的操作类型:`int` 和 `str`
函数说明print(x)将 x 输出到控制台type(x)查看 x 的变量类型
字符串变量 = input("提示信息:")
函数说明int(x)将 x 转换为一个整数float(x)将 x 转换到一个浮点数
# 1. 输入苹果单价price_str = input("请输入苹果价格:")# 2. 要求苹果重量weight_str = input("请输入苹果重量:")# 3. 计算金额# 1> 将苹果单价转换成小数price = float(price_str)# 2> 将苹果重量转换成小数weight = float(weight_str)# 3> 计算付款金额money = price * weightprint(money)
price = float(input("请输入价格:"))
苹果单价 9.00 元/斤,购买了 5.00 斤,需要支付 45.00 元
格式化字符含义%s字符串%d有符号十进制整数, %06d 表示输出的整数显示位数,不足的地方使用 0 补全%f浮点数, %.2f 表示小数点后只显示两位%%输出 %
print("格式化字符串" % 变量1)print("格式化字符串" % (变量1, 变量2...))
print("我的名字叫 %s,请多多关照!" % name)print("我的学号是 %06d" % student_no)print("苹果单价 %.02f 元/斤,购买 %.02f 斤,需要支付 %.02f 元" % (price, weight, money))print("数据比例是 %.02f%%" % (scale * 100))
**************************************************公司名称姓名 (职位)电话:电话邮箱:邮箱**************************************************
实现代码如下:
"""在控制台依次提示用户输入:姓名、公司、职位、电话、电子邮箱"""name = input("请输入姓名:")company = input("请输入公司:")title = input("请输入职位:")phone = input("请输入电话:")email = input("请输入邮箱:")print("*" * 50)print(company)print()print("%s (%s)" % (name, title))print()print("电话:%s" % phone)print("邮箱:%s" % email)print("*" * 50)
标示符就是程序员定义的 变量名 、 函数名
名字需要有 见名知义 的效果,见下图:
思考:下面的标示符哪些是正确的,哪些不正确为什么?
fromNo12from#12my_Booleanmy-BooleanObj22ndObjmyIntMy_tExt_testtest!32haha(da)ttjack_rosejack&roseGUIG.U.I
通过以下命令可以查看 Python 中的关键字
In [1]: import keywordIn [2]: print(keyword.kwlist)
提示: 关键字的学习及使用 ,会在后面的课程中不断介绍
命名规则可以被视为一种 惯例 ,并无绝对与强制
目的是为了 增加代码的识别和可读性
注意 Python 中的 标识符 是 区分大小写的
生活中的判断几乎是无所不在的,我们每天都在做各种各样的选择,如果这样?如果那样?……
if 今天发工资: 先还信用卡的钱 if 有剩余: 又可以happy了,O(∩_∩)O哈哈~ else: 噢,no。。。还的等30天else: 盼着发工资
正是因为有了判断,才使得程序世界丰富多彩,充满变化!
判断语句又被称为 “分支语句”,正是因为有了判断,才让程序有了很多的分支
在 Python 中, if 语句 就是用来进行判断的,格式如下:
if 要判断的条件: 条件成立时,要做的事情 ……
注意:代码的缩进为一个 tab 键,或者 4 个空格 —— 建议使用空格
# 1. 定义年龄变量age = 18# 2. 判断是否满 18 岁# if 语句以及缩进部分的代码是一个完整的代码块if age >= 18: print("可以进网吧嗨皮……")# 3. 思考!- 无论条件是否满足都会执行print("这句代码什么时候执行?")
在使用 if 判断时,只能做到满足条件时要做的事情。那如果需要在 不满足条件的时候 ,做某些事情,该如何做呢?
else ,格式如下:
if 要判断的条件: 条件成立时,要做的事情 ……else: 条件不成立时,要做的事情 ……
# 1. 输入用户年龄age = int(input("今年多大了?"))# 2. 判断是否满 18 岁# if 语句以及缩进部分的代码是一个完整的语法块if age >= 18: print("可以进网吧嗨皮……")else: print("你还没长大,应该回家写作业!")# 3. 思考!- 无论条件是否满足都会执行print("这句代码什么时候执行?")
条件1 and 条件2
条件 1条件 2结果成立成立成立成立不成立不成立不成立成立不成立不成立不成立不成立
条件1 or 条件2
条件 1条件 2结果成立成立成立成立不成立成立不成立成立成立不成立不成立不成立
not 条件
条件结果成立不成立不成立成立
答案 1:
# 练习1: 定义一个整数变量 age,编写代码判断年龄是否正确age = 100# 要求人的年龄在 0-120 之间if age >= 0 and age <= 120: print("年龄正确")else: print("年龄不正确")
答案 2:
# 练习2: 定义两个整数变量 python_score、c_score,编写代码判断成绩python_score = 50c_score = 50# 要求只要有一门成绩 > 60 分就算合格if python_score > 60 or c_score > 60: print("考试通过")else: print("再接再厉!")
答案 3:
# 练习3: 定义一个布尔型变量 `is_employee`,编写代码判断是否是本公司员工is_employee = True# 如果不是提示不允许入内if not is_employee: print("非公勿内")
if 条件1: 条件1满足执行的代码 ……elif 条件2: 条件2满足时,执行的代码 ……elif 条件3: 条件3满足时,执行的代码 ……else: 以上条件都不满足时,执行的代码 ……
if 条件1 and 条件2: 条件1满足 并且 条件2满足 执行的代码 ……
holiday_name = "平安夜"if holiday_name == "情人节": print("买玫瑰") print("看电影")elif holiday_name == "平安夜": print("买苹果") print("吃大餐")elif holiday_name == "生日": print("买蛋糕")else: print("每天都是节日啊……")
elif的应用场景是: 同时 判断 多个条件 ,所有的条件是 平级 的
if 条件 1: 条件 1 满足执行的代码 …… if 条件 1 基础上的条件 2: 条件 2 满足时,执行的代码 …… # 条件 2 不满足的处理 else: 条件 2 不满足时,执行的代码 # 条件 1 不满足的处理else: 条件1 不满足时,执行的代码 ……
# 定义布尔型变量 has_ticket 表示是否有车票has_ticket = True# 定义整数型变量 knife_length 表示刀的长度,单位:厘米knife_length = 20# 首先检查是否有车票,如果有,才允许进行 安检if has_ticket: print("有车票,可以开始安检...") # 安检时,需要检查刀的长度,判断是否超过 20 厘米 # 如果超过 20 厘米,提示刀的长度,不允许上车 if knife_length >= 20: print("不允许携带 %d 厘米长的刀上车" % knife_length) # 如果不超过 20 厘米,安检通过 else: print("安检通过,祝您旅途愉快……")# 如果没有车票,不允许进门else: print("大哥,您要先买票啊")
序号规则1石头 胜 剪刀2剪刀 胜 布3布 胜 石头
# 从控制台输入要出的拳 —— 石头(1)/剪刀(2)/布(3)player = int(input("请出拳 石头(1)/剪刀(2)/布(3):"))# 电脑 随机 出拳 - 假定电脑永远出石头computer = 1# 比较胜负# 如果条件判断的内容太长,可以在最外侧的条件增加一对大括号# 再在每一个条件之间,使用回车,PyCharm 可以自动增加 8 个空格if ((player == 1 and computer == 2) or (player == 2 and computer == 3) or (player == 3 and computer == 1)): print("噢耶!!!电脑弱爆了!!!")elif player == computer: print("心有灵犀,再来一盘!")else: print("不行,我要和你决战到天亮!")
import random
random.randint(12, 20) # 生成的随机数n: 12 <= n <= 20 random.randint(20, 20) # 结果永远是 20 random.randint(20, 10) # 该语句是错误的,下限必须小于上限
数学符号表链接: https://zh.wikipedia.org/wiki/数学符号表
运算符描述实例+加10 + 20 = 30-减10 - 20 = -10*乘10 * 20 = 200/除10 / 20 = 0.5//取整除返回除法的整数部分(商) 9 // 2 输出结果 4%取余数返回除法的余数 9 % 2 = 1**幂又称次方、乘方,2 ** 3 = 8
In [1]: "-" * 50Out[1]: '----------------------------------------'
运算符描述==检查两个操作数的值是否 相等 ,如果是,则条件成立,返回 True!=检查两个操作数的值是否 不相等 ,如果是,则条件成立,返回 True>检查左操作数的值是否 大于 右操作数的值,如果是,则条件成立,返回 True<检查左操作数的值是否 小于 右操作数的值,如果是,则条件成立,返回 True>=检查左操作数的值是否 大于或等于 右操作数的值,如果是,则条件成立,返回 True<=检查左操作数的值是否 小于或等于 右操作数的值,如果是,则条件成立,返回 True
Python 2.x 中判断 不等于 还可以使用 <> 运算符
!= 在 Python 2.x 中同样可以用来判断 不等于
运算符逻辑表达式描述andx and y只有 x 和 y 的值都为 True,才会返回 True
否则只要 x 或者 y 有一个值为 False,就返回 Falseorx or y只要 x 或者 y 有一个值为 True,就返回 True
只有 x 和 y 的值都为 False,才会返回 Falsenotnot x如果 x 为 True,返回 False
如果 x 为 False,返回 True
运算符描述实例=简单的赋值运算符c = a + b 将 a + b 的运算结果赋值为 c+=加法赋值运算符c += a 等效于 c = c + a-=减法赋值运算符c -= a 等效于 c = c - a*=乘法赋值运算符c *= a 等效于 c = c * a/=除法赋值运算符c /= a 等效于 c = c / a//=取整除赋值运算符c //= a 等效于 c = c // a%=取 模 (余数)赋值运算符c %= a 等效于 c = c % a**=幂赋值运算符c **= a 等效于 c = c ** a
运算符描述**幂 (最高优先级)* / % //乘、除、取余数、取整除+ -加法、减法<= < > >=比较运算符== !=等于运算符= %= /= //= -= += *= **=赋值运算符not or and逻辑运算符
初始条件设置 —— 通常是重复执行的 计数器while 条件(判断 计数器 是否达到 目标次数): 条件满足时,做的事情1 条件满足时,做的事情2 条件满足时,做的事情3 ...(省略)... 处理条件(计数器 + 1)
while# 1. 定义重复次数计数器i = 1# 2. 使用 while 判断条件while i <= 5: # 要重复执行的代码 print("Hello Python") # 处理计数器 i i = i + 1print("循环结束后的 i = %d" % i)
注意:循环结束后,之前定义的计数器条件的数值是依旧存在的
由于程序员的原因, 忘记 在循环内部 修改循环的判断条件 ,导致循环持续执行,程序无法终止!
运算符描述实例=简单的赋值运算符c = a + b 将 a + b 的运算结果赋值为 c+=加法赋值运算符c += a 等效于 c = c + a-=减法赋值运算符c -= a 等效于 c = c - a*=乘法赋值运算符c *= a 等效于 c = c * a/=除法赋值运算符c /= a 等效于 c = c / a//=取整除赋值运算符c //= a 等效于 c = c // a%=取 模 (余数)赋值运算符c %= a 等效于 c = c % a**=幂赋值运算符c **= a 等效于 c = c ** a
常见的计数方法有两种,可以分别称为:
因此,大家在编写程序时,应该尽量养成习惯: 除非需求的特殊要求,否则 循环 的计数都从 0 开始
在程序开发中,通常会遇到 利用循环 重复计算 的需求
遇到这种需求,可以:
# 计算 0 ~ 100 之间所有数字的累计求和结果# 0. 定义最终结果的变量result = 0# 1. 定义一个整数的变量记录循环的次数i = 0# 2. 开始循环while i <= 100: print(i) # 每一次循环,都让 result 这个变量和 i 这个计数器相加 result += i # 处理计数器 i += 1print("0~100之间的数字求和结果 = %d" % result)
开发步骤
# 0. 最终结果result = 0# 1. 计数器i = 0# 2. 开始循环while i <= 100: # 判断偶数 if i % 2 == 0: print(i) result += i # 处理计数器 i += 1print("0~100之间偶数求和结果 = %d" % result)
break 和 continue 是专门在循环中使用的关键字
break 和 continue 只针对 当前所在循环 有效
i = 0while i < 10: # break 某一条件满足时,退出循环,不再执行后续重复的代码 # i == 3 if i == 3: break print(i) i += 1print("over")
break 只针对当前所在循环有效
i = 0while i < 10: # 当 i == 7 时,不希望执行需要重复执行的代码 if i == 7: # 在使用 continue 之前,同样应该修改计数器 # 否则会出现死循环 i += 1 continue # 重复执行的代码 print(i) i += 1
continue 只针对当前所在循环有效
while 条件 1: 条件满足时,做的事情1 条件满足时,做的事情2 条件满足时,做的事情3 ...(省略)... while 条件 2: 条件满足时,做的事情1 条件满足时,做的事情2 条件满足时,做的事情3 ...(省略)... 处理条件 2 处理条件 1
***************
# 1. 定义一个计数器变量,从数字1开始,循环会比较方便row = 1while row <= 5: print("*" * row) row += 1
知识点对 print 函数的使用做一个增强
# 向控制台输出内容结束之后,不会换行print("*", end="")# 单纯的换行print("")
end="" 表示向控制台输出内容结束之后,不会换行
假设 Python 没有提供 字符串的 * 操作 拼接字符串
***************
row = 1while row <= 5: # 假设 python 没有提供字符串 * 操作 # 在循环内部,再增加一个循环,实现每一行的 星星 打印 col = 1 while col <= row: print("*", end="") col += 1 # 每一行星号输出完成后,再增加一个换行 print("") row += 1
需求输出 九九乘法表,格式如下:
1 * 1 = 1 1 * 2 = 2 2 * 2 = 4 1 * 3 = 3 2 * 3 = 6 3 * 3 = 9 1 * 4 = 4 2 * 4 = 8 3 * 4 = 12 4 * 4 = 16 1 * 5 = 5 2 * 5 = 10 3 * 5 = 15 4 * 5 = 20 5 * 5 = 25 1 * 6 = 6 2 * 6 = 12 3 * 6 = 18 4 * 6 = 24 5 * 6 = 30 6 * 6 = 36 1 * 7 = 7 2 * 7 = 14 3 * 7 = 21 4 * 7 = 28 5 * 7 = 35 6 * 7 = 42 7 * 7 = 49 1 * 8 = 8 2 * 8 = 16 3 * 8 = 24 4 * 8 = 32 5 * 8 = 40 6 * 8 = 48 7 * 8 = 56 8 * 8 = 64 1 * 9 = 9 2 * 9 = 18 3 * 9 = 27 4 * 9 = 36 5 * 9 = 45 6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81
*********************************************
# 定义起始行row = 1# 最大打印 9 行while row <= 9: # 定义起始列 col = 1 # 最大打印 row 列 while col <= row: # end = "",表示输出结束后,不换行 # "\t" 可以在控制台输出一个制表符,协助在输出文本时对齐 print("%d * %d = %d" % (col, row, row * col), end="\t") # 列数 + 1 col += 1 # 一行打印完成的换行 print("") # 行数 + 1 row += 1
制表符的功能是在不使用表格的情况下在 垂直方向 按列对齐文本
转义字符描述\反斜杠符号\'单引号\"双引号\n换行\t横向制表符\r回车
定义函数的格式如下:
def 函数名(): 函数封装的代码 ……
调用函数很简单的,通过 函数名() 即可完成对函数的调用
name = "小明"# 解释器知道这里定义了一个函数def say_hello(): print("hello 1") print("hello 2") print("hello 3")print(name)# 只有在调用函数时,之前定义的函数才会被执行# 函数执行完成之后,会重新回到之前的程序中,继续执行后续的代码say_hello()print(name)
用 单步执行 F8 和 F7 观察以下代码的执行过程
注意:因为 函数体相对比较独立 , 函数定义的上方 ,应该和其他代码(包括注释)保留 两个空行
演练代码如下:
def sum_2_num(): num1 = 10 num2 = 20 result = num1 + num2 print("%d + %d = %d" % (num1, num2, result))sum_2_num()
函数只能处理 固定数值 的相加
def sum_2_num(num1, num2): result = num1 + num2 print("%d + %d = %d" % (num1, num2, result))sum_2_num(50, 20)
注意: return 表示返回,后续的代码都不会被执行
def sum_2_num(num1, num2): """对两个数字的求和""" return num1 + num2# 调用函数,并使用 result 变量接收计算结果result = sum_2_num(10, 20)print("计算结果是 %d" % result)
def test1(): print("*" * 50) print("test 1") print("*" * 50)def test2(): print("-" * 50) print("test 2") test1() print("-" * 50)test2()
体会一下工作中 需求是多变 的
def print_line(char): print("*" * 50)
def print_line(char): print(char * 50)
def print_line(char, times): print(char * times)
提示:工作中针对需求的变化,应该冷静思考, 不要轻易修改之前已经完成的,能够正常执行的函数 !
def print_line(char, times): print(char * times)def print_lines(char, times): row = 0 while row < 5: print_line(char, times) row += 1
name = "黑马程序员"
import hm_10_分隔线模块hm_10_分隔线模块.print_line("-", 80)print(hm_10_分隔线模块.name)
模块可以让 曾经编写过的代码 方便的被 复用 !
注意:如果在给 Python 文件起名时, 以数字开头 是无法在 PyCharm 中通过导入这个模块的
C 是 compiled 编译过 的意思