Python流程控制
六,输入输出
输入
还记得shell里的read吗
[root@node1 python]# cat shell_read.sh #!/bin/bash read -p "input your name:" name read -p "input your age:" age echo "$name,you are $age old years"
用python3中可以使用input()函数等待用户的输入(python2中为raw_input()函数)
示例
name = input("what is your name:") age = input("what is your age: ") print(name, "你"+age+"岁了")
注意:input输入都认为是str类型
输出
输出用print()
示例
print("=" * 10) print("1-系统") print("2-数据库") print("3-quit") print("=" * 10)
输出
========== 1-系统 2-数据库 3-quit ==========
格式化输出
还记得awk里的printf吗? (学过C基础的也肯定知道printf)
python里不用printf,但也可以用 % 表示格式化操作符
操作符 | 说明 |
%S | 字符串 |
%d | 整数 |
%f | 浮点数 |
%% | 输出% |
示例
name = input("请输入你的名字:") age = input("请输入你的年龄:") age = int(age) print("%s,你%d岁了" % (name,age) )
下面是一种新的格式化输出的写法,不用纠结是写%是还是%d,至对应好顺序就行(0代表第一个,1代表第二个)
name = input("请输入你的名字:") age = input("请输入你的年龄:") age = int(age) print("%s,你%d岁了" % (name,age) ) print("{},你{}岁了".format(name,age))
默认{}内是按照顺序的,也可以手动指定顺序例如
name = input("请输入你的名字:") age = input("请输入你的年龄:") age = int(age) print("%s,你%d岁了" % (name,age) ) print("{},你{}岁了".format(name,age)) print("{1},你{0}岁了".format(name,age))
输出
请输入你的名字:liuym 请输入你的年龄:18 liuym,你18岁了 liuym,你18岁了 18,你liuym岁了
练习题
键盘输入一些信息然后输出
name = input("请输入你的名字:") sex = input("请输入你的性别:") job = input("请输入你的工作:") phonenum = input("请输入你的电话:") info = ''' ------------ information of {} ----------- name: {} sex: {} job: {} phonenum: {} '''.format(name, name, sex, job, phonenum) print(info)
七,运算符
算数运算符
算数运算符 | 描述 | 实例 |
+ | 加法 | 1=2=3 |
- | 减法 | 5-1=4 |
* | 乘法 | 3*5=15 |
/ | 除法 | 10/2=5有余数结果为浮点数 |
// | 整除 | 10//3=3 |
** | 求幂 | 2**3=8 |
% | 取余 | 10%3=1 |
赋值运算符
赋值运算符 | 描述 | 实例 |
= | 简单的赋值运算符,下面全部为复合运算符 | c=a+b |
+= | 加法赋值运算符 | a+=b等同于a=a+b |
-= | 减法赋值运算符 | a-=b等同于a=a-b |
*= | 乘法赋值运算符 | a*=b等同于a=a*b |
/= | 除法赋值运算符 | a/=b等同于a=a/b |
//= | 整除赋值运算符 | a//=b等同于a=a//b |
**= | 求幂赋值运算符 | a**=b等同于a=a**b |
%= | 取余赋值运算符 | a%=b等同于a=a%b |
比较运算符
比较运算符 | 描述 | 示例 |
== | 等于 | print(1==1)返回True |
!= | 不等于 | print(2!=1) 返回True |
<> | 不等于同!= | print(2<>1) 返回True |
< | 小于 | print(2>1) 返回True |
> | 大于 | print(2<1) 返回False |
>= | 大于等于 | print(2>=1) 返回True |
<= | 小于等于 | print(2<=1) 返回False |
逻辑运算符
逻辑运算符 | 逻辑表达式 | 描述 |
and | x and y | x与y都为True,则返回True;x与y任一个或两个都为False,则返回False |
or | x or y | x与y任一个条件为True,则返回True |
not | not x | x为True,返回False; x为False,返回True |
成员运算符
在后面讲解和使用序列(str,list,tuple) 时,还会用到以下的运算符。
成员运算符 | 描述 |
in | x 在 y 序列中 , 如果 x 在 y 序列中返回 True; 反之,返回False |
not in | x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True; 反之,返回False |
身份运算符
身份运算符 | 描述 | 实例 |
is | is 是判断两个标识符是不是引用自一个对象 | x is y, 类似id(x) == id(y) , 如果是同一个对象则返回 True,否则返回 False |
is not | is not 是判断两个标识符是不是引用自不同对象 | x is not y ,类似id(a) != id(b)。如果不是同一个对象则返回结果 True,否则返回 False。 |
is 与 == 区别:
is 用于判断两个变量引用对象是否为同一个(同一个内存空间), == 用于判断引用变量的值是否相等。
a = [1, 2, 3] b = a[:] c = a print(a, id(a)) print(b, id(b)) print(c, id(c)) print(b is a) print(b == a) print(c is a) print(c == a)
输出
[1, 2, 3] 2849709901960 [1, 2, 3] 2849709923400 [1, 2, 3] 2849709901960 False True True True
a与c在同一个内存空间 b只是等于a 但是与a不在同一个内存空间
位运算符
这里的python位运算符也是用于操作二进制的。
位运算符 | 说明 |
& | 对应二进制位两个都为1,结果为1 |
| | 对应二进制位两个有一个1, 结果为1, 两个都为0才为0 |
^ | 对应二进制位两个不一样才为1,否则为0 |
>> | 去除二进制位最右边的位,正数上面补0, 负数上面补1 |
<< | 去除二进制位最左边的位,右边补0 |
~ | 二进制位,原为1的变成0, 原为0变成1 |
运算符的优先级
常用的运算符中: 算术> 比较> 逻辑> 赋值
示例:请问下面的结果是什么?
result = 3 - 4 >= 0 and 4*(6-2) > 15 print(result)
结果是false
算数优先级最高优先计算3 - 4 = -1 4*(6-2)=16
再计算比较-1 是小于等于0的 16是大于15的
在计算逻辑 False and True结果为False
最后赋值 使用结果为False
八,判断语句
shell里的判断语句格式
if 条件;then 执行动作一 fi
示例
if [ 1 == 1 ];then echo 1;fi
shell双分支判断语句
if 条件;then 执行动作一 else 执行动作二 fi
示例
if [ 1 == 2 ];then echo 1;else echo 2;fi
shell多分支判断语句
if 条件一;then 执行动作一 elif 条件二;then 执行动作二 elif 条件三;then 执行动作三 else 执行动作四 fi
或者
case 变量 in 值一) 动作一;; 值二) 动作二;; *) 其他动作 esac
python里的判断语句格式
python单分支判断语句
if 条件: #结束加: 执行动作 #一定要缩进否则语法报错 #没有fi结束符,就是看缩进
示例
if 1 == 1: print("True")
python多分支判断语句
if 条件一: 执行动作一 elif 条件二: 执行条件二 elif 条件三: 执行动作三 else: 执行动作四
示例
str1 = input("输入yes/no:") if str1 == "yes": print("True") elif str1 == "no": print("Flase") else: print("Error")
示例:通过年龄判断对一个人的称呼
男的大于18叫sir
男的小于18叫boy
女的大于18叫lady
女的小于18叫girl
name = input("请输入姓名:") sex = input("请输入性别man/women:") age = int(input("请输入年龄:")) if sex == "man": if age >= 18: print("hello {} sir".format(name)) else: print("hello {} boy".format(name)) elif sex == "women": if age >= 18: print("hello {} lady".format(name)) else: print("hello girl".format(name)) else: print("输入有误")
if嵌套
if嵌套也就是if里还有if,你可以无限嵌套下去,但层次不宜过多(嵌套层次过多的话程序逻辑很难读,也说明你的程序思路不太好,应该有很好的流程思路来实现)
九,循环语句
while循环
while 条件: 条件满足时候:执行动作一 条件满足时候:执行动作二 ......
continue #跳出本次循环 break #退出循环,执行循环外代码 exit() #退出python程序,可以指定返回值
打印1-10
i = 1 while i <= 100: print(i, end=" ") i += 1
示例
计算1-100偶数之和
1-100偶数之和.py
i = 0 j = 0 while i <= 100: if i % 2 == 0: j = j + i i += 1 print(j)
猜数字
import random num = random.randint(1, 100) while True: g_num = int(input("请输入你猜想的数字1-100")) if g_num > num: print("大了") continue elif g_num < num: print("小了") continue else: print("对了 {}".format(num)) break
for循环
for循环遍历一个对象(比如数据序列,字符串,列表,元组等),根据遍历的个数来确定循环次数。
for循环可以看作为定循环,while循环可以看作不定循环
for循环的基本格式
for 变量 in 数据: 重复执行的代码
示例
#for循环一个元组 for i in (1, 2, 3, 4, 5): print(i, end=" ") #循环range函数这里表示 1 2 3 4 5不包含6 for i in range(1,6): print(i) #循环0 1 2 3 4 5不包含6 for i in range(6): print(i) #循环奇数,步长为2 for i in range(1, 100, 2): print(i) #循环从100-1 步长为-2即从100降序打印偶数 for i in range(100, 1, -2): print(i)
示例
使用for循环来实现1-100之间能被5和3同时整除的数字之和
sum = 0 for i in range(1,101): if i % 5 == 0 and i % 3 == 0: sum += i print(sum)
练习:改写猜数字游戏,最多5次,5次没有猜对就退出
方法一:使用while
import random Num = random.randint(1, 100) j = 0 while True: GuessNum = int(input("请输入你猜想的数字1-100")) if GuessNum > Num and j < 5: j += 1 print("大了,已经猜{}次了".format(j)) continue elif GuessNum < Num and j < 5: j += 1 print("小了,已经猜{}次了".format(j)) continue elif GuessNum == Num and j < 5: j += 1 print("对了数字是{}你猜了{}次".format(GuessNum, j)) break elif j >= 5: print("次数用完了数字是{}".format(Num)) break
方法二:使用for循环
import random Num = random.randint(1, 100) for i in range(1, 6): GuessNum = int(input("请输入你猜想的数字1-100")) if GuessNum > Num: print("大了,已经猜{}次了".format(i)) elif GuessNum < Num: print("小了,已经猜{}次了".format(i)) else: print("对了,一共猜了{}次数字是{}".format(i, Num)) break if i == 5: print("五次机会用完了") exit()