Python从基础到精通day2

判断语句

  • 判断语句是多分支结构,满足某个条件就执行它的代码块。其他条件不再判断
  • 语法结构
if 条件1:
    条件1True时执行的代码块
elif 条件2:
    条件2True时执行的代码块
elif 条件3:
    条件3True时执行的代码块
... ...
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)

猜你喜欢

转载自blog.csdn.net/m0_46588765/article/details/106328354