判断语句
- 判断语句是多分支结构,满足某个条件就执行它的代码块。其他条件不再判断
- 语法结构
if 条件1:
条件1为True时执行的代码块
elif 条件2:
条件2为True时执行的代码块
elif 条件3:
条件3为True时执行的代码块
... ...
elif 条件n:
条件n为True时执行的代码块
else:
上面所有的条件都为False时执行的代码块
- 各种数据类型也可以作为判断条件。任何值为0的数字都是False,非0为True。其他任非空对象都是True,空对象为False
if 3 > 0:
print('yes')
print('ok')
if -0.0:
print('值为0表示假')
if 100:
print('值非0表示真')
if ' ':
print('空格也是一个字符,为真')
if '':
print('空字符串,长度为0,表示假')
if []:
print('空列表,为假')
if (10, 20):
print('非空元组,为真')
if {}:
print('空字典,为假')
if not []:
print('空列表,为假,取反为真')
案例1.编写login.py脚本:
- 提示用户输入用户名和密码
- 将用户名和密码分别保存在变量中
- 如果用户名为bob并且密码为123456,则输出Login successful,否则输出Login inorrect
import getpass #调用该函数可以在命令行窗口里面无回显输入密码
user = input('username: ')
passwd = getpass.getpass('password:')
if user == 'bob' and passwd == '123456':
print ('\033[32;1mLogin successful!\033[0m') #绿色粗体显示
else:
print('\033[31;1mLogin incorrect!\033[0m') #红色粗体显示
测试脚本执行:
[root@localhost day02]# python3 login2.py
username: bob
password: 123456 #此处所填写的密码将不在屏幕上显示
Login successful
[root@localhost day02]# python3 login2.py
username: tom
password: 123456 #此处所填写的密码将不在屏幕上显示
Login incorrect!
案例2:编写判断成绩的程序
score = int(input('成绩:')) #将用户输入的字符转换为数字类型
if score >= 60 and score < 70:
print('及格')
elif 70 <= score < 80:
print('良')
elif 80 <= score < 90:
print('好')
elif score >= 90:
print('优秀')
else:
print('你要努力了!')
测试脚本执行
[root@localhost day02]# python3 grade.py
成绩: 59
你要努力了!
[root@localhost day02]# python3 grade.py
成绩: 88
好
[root@localhost day02]# python3 grade.py
成绩: 64
及格
random模块
>>> import random
>>> random.choice('abcd')
'b'
>>> random.choice('abcd')
'c'
>>> random.choice(['aaaa', 'bbb', 'ccc'])
'aaaa'
>>> random.choice(['aaaa', 'bbb', 'ccc'])
'ccc'
# 取出1到100间的随机整数,包括1和100
>>> random.randint(1, 100)
47
案例3.编写石头剪刀布小游戏
-
编写game.py脚本,实现以下目标:
-
计算机随机出拳
-
玩家自己决定如何出拳
-
代码尽量简化
import random
xuanxiang = ['石头', '剪刀', '布']
#将人胜利的情况提前定义好
wins = [['石头', '剪刀'], ['剪刀', '布'], ['布', '石头']]
prompt = '''(0) 石头
(1) 剪刀
(2) 布
请选择(0/1/2): '''
computer = random.choice(xuanxiang)
i = int(input(prompt)) # 把用户输入的0/1/2转找成数字
player = xuanxiang[i] # 根据下标取出相应的选项
print("Your choice: %s, computer's choice: %s" % (player, computer))
if player == computer:
print('\033[32;1m平局\033[0m')
elif [player, computer] in wins:
print('\033[31;1mYou WIN!!!\033[0m')
else:
print('\033[31;1mYou LOSE!!!\033[0m')
测试脚本执行:
[root@python day2]# python3 lianxi.py
(0)石头
(1)剪刀
(2)布
请选择(0)(1)(2):1
您出了剪刀 ,计算机出了:石头
You Lose
[root@python day2]# python3 lianxi.py
(0)石头
(1)剪刀
(2)布
请选择(0)(1)(2):2
您出了布 ,计算机出了:石头
You win
循环语句
- 在python中有while和for两种循环语句。
- 大多数情况下都能把for改写为while循环。
- 当循环次数未知时,使用while循环。
- 当循环次数已知时,使用for循环。
while循环
- 语法结构
while 条件:
当条件满足时执行的语句
案例4. 石头剪刀布两胜制
import random
xuanxiang = ['石头', '剪刀', '布']
wins = [['石头', '剪刀'], ['剪刀', '布'], ['布', '石头']]
prompt = '''(0) 石头
(1) 剪刀
(2) 布
请选择(0/1/2): '''
pwin = 0
cwin = 0
while pwin < 2 and cwin < 2: # 如果电脑或者玩家都没有赢够两次就要继续 。and两端都为真最后才为真,有一个为假最终为假。
#while 1:
computer = random.choice(xuanxiang)
i = int(input(prompt)) # 把用户输入的0/1/2转找成数字
player = xuanxiang[i] # 根据下标取出相应的选项
print("Your choice: %s, computer's choice: %s" % (player, computer))
if player == computer:
print('\033[32;1m平局\033[0m')
elif [player, computer] in wins:
print('\033[31;1mYou WIN!!!\033[0m')
pwin += 1 #玩家赢一次就加1
else:
print('\033[31;1mYou LOSE!!!\033[0m')
cwin += 1 #电脑赢一次就加1
#if pwin == 2 or cwin == 2
#break
- while后面的条件与if的条件完全一样
- break语句:循环遇到break就会结束,跳到循环后面的代码处继续向下执行
- continue语句:循环遇到continue语句后,将会结束本次循环,跳到循环条件处,如果循环条件为真,则继续执行,否则结束。
- else语句:循环的else,是当循环条件为假的时候执行的语句;注意,当循环被break掉,else语句也不会执行。
100以内所有数值相加:
# 定义保存结果的变量
result = 0
# 定义一个用于累加的变量
i = 1
while i < 101:
# 将i累加到result中
result += i
# 将i的值自增1
i += 1
100以内所有偶数相加
# 定义变量,用于保存最终结果
result = 0
# 定义一个累加计数器
i = 0
while i < 100:
i += 1 #相等于 i = i + 1
if i % 2 == 1: 奇数除于2都余1
continue 退出循环
else:
result += i #相等于 result = result + i
print(result)
# 定义变量,用于保存最终结果
result = 0
# 定义一个累加计数器
i = 0
while i < 100:
i += 1 #控制循环次数
if i % 2: # i%2的结果只有1或0,1表示真,0表示假
continue
result += i #每次都会将循环的值覆盖,成为最新循环的值,知道循环结束
print(result)
案例5.猜数字游戏
import random
a = random.randint(1,100)
i = 0
while i < 7:
num = int(input('请输入要猜的数字'))
i += 1
if num == a:
print('YES')
break 退出循环
elif num > a:
print('Guess Big')
else:
print('Guess Small')
print('正确的数字是',a)
for循环
- 它的break / continue / else用法与while一样
- 语法结构
for 变量 in 对象集合:
能够从对象集合中取出值时执行的语句
range函数
- range函数用于生成数字。它得到的是一个range对象。潜在可以产生很多数字,但是不会立即生成。当向它取值时,它会临时生成。这样有助于节省内存使用率。
- 它的用法与序列对象的下标类似
>>> range(10) # 只给定一个数字是结束数字,起始数字是0
range(0, 10) # 结束数字不包含
>>> for i in range(10):
... print(i)
>>> list(range(10)) # 将range(10)可以生成的数字转成列表
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(range(6, 11))
[6, 7, 8, 9, 10]
>>> list(range(1, 10, 2))
[1, 3, 5, 7, 9]
>>> list(range(10, 0, -1))
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
for循环的使用
s1 = 'hello' 循环字符
for zifu in s1:
print(zifu)
nums = [10, 20, 30, 50] 循环列表
for i in nums:
print(i)
users = ('tom', 'jerry', 'zhangsan') 循环元组
for name in users:
print(name)
info = {'name': 'lisi', 'age': 20} 循环字典
for k in info:
print(k, info[k])
result1 = 0 利用range函数做for循环,可以求出100以内所有数字加起来的总和
for i in range(1, 101):
result1 += i 相等于 result1 = result1 + i
print(result1)
result2 = 0 求取100以内所有偶数的和
for i in range(2, 101, 2): 从2开始到101,结束不包含,步长为2
result2 += i
print(result2)
列表解析
- 也叫列表表达式,用于快速生成列表
# 将表达式的计算结果放到列表
>>> [5 + 5]
[10]
# 通过for循环控制表达式计算的次数
>>> [5 + 5 for i in range(10)]
[10, 10, 10, 10, 10, 10, 10, 10, 10, 10]
# 表达式可以使用for循环的变量
>>> [5 + i for i in range(1, 11)]
[6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
# 还可以通过if判断来实现过滤条件,判断为真时,才保留计算结果
>>> [5 + i for i in range(1, 11) if i % 2 == 1]
[6, 8, 10, 12, 14]
# 获取192.168.1.0网段中所有的IP地址
>>> ['192.168.1.%s' % i for i in range(1, 255)]
案例6 .斐波那契数列
result = [0,1] 列表可变
for i in range(8):
result.append(result[-1] + result[-2]) 每次将列表中的最后两位相加
print(result)
result = [0,1]
n = int(input('请输入:'))
for i in range( n -2 ):
result.append(result[-1] + result[-2])
print(result)