流程控制与格式化输出


1 用户输入

#!/usr/bin/env python3.7
#_*_coding:utf-8_*_

#name = raw_input("What is your name?") #only on python 2.x
name = input("What is your name? ")
print("Hello " + name )

输入密码时,若想使其不可见,需用到getpass模块中的getpass方法

#!/usr/bin/env python3.7
# -*- coding: utf-8 -*-

import getpass

# 将用户输入的内容赋值给 name 变量
password = getpass.getpass("请输入密码:")

# 打印输入的内容
print(password)

案例一:让用户输入自己的年龄,计算其还能活多少年,假定每人能活100年

#!/usr/bin/env python3.7

age = input("请输入您的年龄:")
left_age = 100 - int(age)
print("您还能活",str(left_age),"年")

注意:input接收的所有数据都是字符串,即使你输入的是数字,依然会被当成字符串来处理

2 if条件判断

if语句语法:

# 单分支if
a = 1
if a > 0:
    print('hehe')
    
# 双分支if
a = 100
if a < 100:
    print("henhen")
else:
    print("haha")
    
# 多分支if
a = 100
if a < 100:
    print("hehe")
elif a > 100:
    print("xixi")
else:
    print("haha")

案例一:用户登录验证

# 提示输入用户名和密码
# 验证用户名和密码
#     如果错误,则输出用户名或密码错误
#     如果成功,则输出 欢迎,XXX!

#!/usr/bin/env python3.7
import getpass

name = input('请输入用户名:')
pwd = getpass.getpass('请输入密码:')

if name == "wangqing" and pwd == "runtime":
    print("欢迎,忘情!")
else:
    print("用户名和密码错误")

案例二:猜数字游戏
在程序里设定好一个数字,然后启动程序让用户猜,用户输入后,根据他的输入提示用户输入的是否正确,如果错误,提示是猜大了还是猜小了

#!/usr/bin/env python

number = 50

user_input = int(input("input your guess num:"))

if user_input == number:
    print("Congratulations, you got it !")
elif user_input < number:
    print("Oops,think bigger!")
else:
    print("think smaller!")

练习:学习成绩判断

  • 大于等于90为优
  • 大于等于80为良
  • 大于等于70为中
  • 大于60为及格
  • 小于等于60为差

3 for循环

最简单的循环10次

#!/usr/bin/env python3.7
#_*_coding:utf-8_*_
__author__ = 'sean'

for i in range(10):
    print("loop:", i )

结果输出

[root@localhost ~]# python3.7 test.py
loop: 0
loop: 1
loop: 2
loop: 3
loop: 4
loop: 5
loop: 6
loop: 7
loop: 8
loop: 9

案例一:打印10以内的数字,但是遇到小于5的循环次数就跳过,直接进入下一轮循环

#!/usr/bin/env python3.7
#_*_coding:utf-8_*_
__author__ = 'sean'

for i in range(10):
    if i<5:
        continue #不往下走了,直接进入下一轮loop
    print("loop:", i )

案例二:打印10以内的数字,但是遇到大于5的循环次数就中止,直接退出循环

#!/usr/bin/env python3.7
#_*_coding:utf-8_*_
__author__ = 'sean'

for i in range(10):
    if i>5:
        break #不往下走了,直接退出整个loop
    print("loop:", i )

练习:

  • 打印1-100间的奇数
    • 取模实现
    • range实现
  • 打印1-100间的数字,但是50-70不打印

for循环之else
当for循环正常结束后会执行else段的代码

#!/usr/bin/env python3.7

for i in range(10):
    print("loop:",i)
else:
    print("我要上天!")

若for循环非正常结束则不会执行else段代码

#!/usr/bin/env python3.7

for i in range(10):
    if i > 5:
        break
    print("loop:",i)
else:
    print("我要上天!")

4 while循环

有一种循环叫死循环,一经触发,就运行个天荒地老、海枯石烂。

海枯石烂代码

count = 0
while True:
    print("你是风儿我是沙,缠缠绵绵到天涯...",count)
    count +=1

其实除了时间,没有什么是永恒的,死loop还是少写为好 
上面的代码循环100次就退出吧

count = 0
while True:
    print("你是风儿我是沙,缠缠绵绵到天涯...",count)
    count +=1
    if count == 100:
        print("见鬼的风和沙,我要忘情...")
        break

回到上面猜数字游戏的例子,如何实现让用户不断的猜数字,但只给最多3次机会,再猜不对就退出游戏

#!/usr/bin/env python3.7
# -*- coding: utf-8 -*-

number = 50

count = 0
while count < 3:
    user_input = int(input("input your guess num:"))

    if user_input == number:
        print("Congratulations, you got it !")
        break
    elif user_input < number:
        print("Oops,think bigger!")
    else:
        print("think smaller!")
    count += 1 #每次loop 计数器+1
else:
    print("猜这么多次都不对,你个笨蛋.")

不限制猜的次数?要猜的数字为一个随机数?如何实现?

#!/usr/bin/env python3.7
# -*- coding: utf-8 -*-
import random

number = random.randint(1,100)  #生成一个1-100之间的随机整数

count = 0
while True:
    user_input = int(input("input your guess num:"))
    count += 1 #每次loop 计数器+1

    if user_input == number:
        print("Congratulations, you got it !")
        print("恭喜你猜对了,你一共猜了 " + str(count) + "次")
        break
    elif user_input < number:
        print("Oops,think bigger!")
    else:
        print("think smaller!")

练习:

  • 打印1-100间的奇数
  • 用while实现猜数字游戏且不能使用break
#!/usr/bin/env python3.7
# -*- coding: utf-8 -*-
import random

number = random.randint(1,100)  #生成一个1-100之间的随机整数

flag = True
count = 0
while flag:
    user_input = int(input("input your guess num:"))
    count += 1 #每次loop 计数器+1

    if user_input == number:
        print("Congratulations, you got it !")
        print("恭喜你猜对了,你一共猜了 " + str(count) + "次")
        flag = False
    elif user_input < number:
        print("Oops,think bigger!")
    else:
        print("think smaller!")
else:
    print("用flag多爽呀,再也不要暴力终止了")

5 格式化输出

案例一:判断用户输入的长得像不像数字

#!/usr/bin/env python3.7

user_input = input("请输入一个整数:")

print(type(user_input))     # 打印出用户输入的内容属于什么类型
print('-------------------------')
if user_input.isdigit():    # 判断用户输入的内容是否长得像数字
    user_input = int(user_input)    # 将长得像数字的用户输入转换成int整型
else:
    print("您输入的不是整数")
print(type(user_input))     # 打印转换类型后的用户输入类型

exit()函数指定退出状态码

print('-------------------------')
exit(200)
print('-------------------------')

结果输出:

[root@localhost ~]# python3.7 test.py
-------------------------
[root@localhost ~]# echo $?
200

案例二:打印个人信息
想打印个人信息,在不用格式化输出的情况下是这样的

info = '''
-------- info of sean --------
Name: sean
Age: 30
Job: teacher
Salary: 8000
'''

print(info)

但是这样有一个问题,我们的信息都是写死的,不能修改,不够灵活,但使用格式化输出就更方便与灵活,数据也可以用变量代替

#!/usr/bin/env python3.7

name = input("请输入您的姓名:")            # 让用户输入姓名
age = int(input("请输入您的年龄:"))        # 让用户输入年龄
job = input("请输入您的职业:")             # 让用户输入职业
salary = int(input("请输入您的薪资:"))     # 让用户输入薪资

info = '''
-------- info of %s--------
Name: %s
Age: %d
Job: %s
Salary: %d
'''

print(info % (name,name,age,job,salary))
占位符 描述
%s 字符串
%d 整数
%f 浮点数

6 作业

作业一:编写登录接口,要求如下

  • 输入用户名和密码
  • 认证成功后显示欢迎信息
  • 输错三次后锁定

作业二:让用户输入三个数字,输出最大值与最小值
作业三:打印九九乘法表