4 - Python 中if、while、for

一、if

    

1、格式

# 第一种:
if "判断条件":
    "条件成立, 执行的语句"

# 第二种:
if "判断条件":
    "条件成立, 执行的语句"
else:
    "条件不成立, 需要执行的语句"

# 第三种
if "判断条件":
    print("")
    if "判断条件":
        print("")
    else:
        print("")
elif "判断条件":
    print("")
elif "判断条件":
    print("")
else: “以上条件不成立执行”
    print("以上条件不成立执行这条")

 

示例1:

# 1. 定义年龄变量
age = int(input("请输入你的年龄: "))

# 2.判断是否满18岁
if age >= 18:
    # 条件成立, 条件为True时, 这个块下面的语句会被执行,块必须得是4个空格
    print("可以进入网吧嗨皮...")
else:
    # else 处理条件不满足的情况
    # 也是一个块语句,空4格
    print("你还没长大, 应该回去写作业!")
# 3. if 条不成立, 不会执行if下面的块语句, 但是程序会继续往下执行
print("这句代码会被执行吗? ")

 

示例2:

# 思考流程
# 1. 定义 `holiday_name` 字符串变量记录节日名称
# 2. 如果是 情人节 应该 **买玫瑰**/**看电影**
# 3. 如果是 **平安夜** 应该 **买苹果**/**吃大餐**
# 4. 如果是 **生日** 应该 **买蛋糕**
# 5. 其他的日子,只要有爱,每天都像过节……

# 定义一个变量
holiday_name = input("今天是什么节日? ")
love = "有爱"
if holiday_name == "情人节":
    print("买玫瑰花")
    if love == "有爱":
        print("去KTV唱歌")
    else:
        print("回家!")
elif holiday_name == "平安夜":
    print("买苹果")
    print("吃大餐")
elif holiday_name == "生日":
    print("买蛋糕")
else:
    print("只要有爱,每天都像过节")

print("还会继续往下执行吗?")

 

二、while循环

1、程序的执行顺序

一共有三种流程方式:

  • 顺序 ---  从上向下,顺序执行代码
  • 分支 ---- 根据条件判断,决定执行代码的分支
  • 循环 ---- 让特定代码重复执行

    

2、while循环

示例1:打印 5 遍 Hello Python

# 第一种方法
print("Hello Python" * 5)

# 第二种
# 第一步、定义重复次数计数器
i = 1

# 第二步、使用while判断条件
while i <= 5:
    # 如果条件为真(True), 那么会执行while下面的块语句
    print("Hello Python")
    # 第三步、 一定要修改循环条件,要不然会一直执行下去
    # i = i + 1
    i += 1

print("循环结束后的 i = {}".format(i))

 

示例2:计算0 ~ 100 之间所有数字的累计求和结果

# 第一步,定义计数器
i = 0
result = 0      # 最初的结果

# 第二步、使用while判断条件
while i <= 100:
    # result = i + result
    result += i
    # 第三步、 一定要修改循环条件,要不然会一直执行下去
    i += 1

 

示例3:计算0 ~ 100 之间所有奇数、偶数的累计求和结果

# 思路:# 对 2取余,为0则偶数;if i % 2 != 0  不为0则奇数;
# 根据上面三步

i = 0
result = 0
while i <= 100:
    # if i % 2 == 0:   # 偶数之和
    if i % 2 != 0:      # 奇数之和
        result += i
    i += 1
# 打印结果
print("0 ~ 100 之间偶数求和结构为: {}".format(result))

 

示例4:计算0 ~ 100 之间求和的时候, 遇到3, 则停止计算

  • break  (译:布瑞克)

  一般程序遇到break,会跳出循环,while 循环结束;相当于踩刹车, 车刹踩死之后, 车就停下来了

i = 0           # 第一步,定义计数器
result = 0      # 定义最初的结果

while i <= 100:         # 第二步、使用while判断条件
    print("i = ", i)
    if i == 3:
        # 一般程序遇到break, 会跳出循环
        # 相当于踩刹车, 车刹踩死之后, 车就停下来了
        break
    result += i
    i += 1          # 第三步、 一定要修改循环条件,要不然会一直执行下去
# 打印每次的结果
print("result = ", result)

执行结果:
i =  0
i =  1
i =  2
i =  3
result =  3

 

示例5:计算1-100内,除5以外之和;

  • continue  # (译:抗体牛)

  当程序遇到 continue 的时候,本次循环会停止,代码不会向下进行,while循环会继续进行

# 根据上面三步
i = 0
result = 0
while i <= 100:
    if i == 5:      # 奇数之和
        # 当程序中遇到 continue 的时候,本次循环会停止,while 循环会继续进行
        i += 1
        continue
    result += i
    i += 1
# 打印结果
print("0 ~ 100 之间偶数求和结构为: {}".format(result))
# 执行结果:5045

 

三、for循环

1、基础

定义:for 循环用来遍历对象,从对象的第一个元素到最后一个元素都一次访问一次

数据集合:可以是列表,元祖,字典,字符串,也可以是一个指定的数据范围

  • 任意一个序列类型都支持for循环:列表,元祖,字典
one_list = ["江南", "阿登", "world"]
语法:
for 变量名 in 数据集合:
    print(变量名)

# 第一种,使用索引取值
print(one_list[0])
print(one_list[1])
print(one_list[2])

# 第二种,使用for取值
for item in one_list:
    print(item)

# 执行结果:
江南
阿登
world
江南
阿登
world

 

2、指定print 换行与不换行

sep   :指定换行符

  • print 函数中 sep 默认为空格, 会打印所有数据以一个空格进行分割

end="\t"   :打印在一行,不换行

  • end 参数为每个接下来的 print 函数打印内容的分割形式,默认为\n(每一个print函数打印内容之后,会换行)

示例:

print(100, 200, 300, sep="&")
print("a", "b", end="\t")
print("可优", "lemon")

执行结果:
100&200&300
a b    可优 lemon    # 打印在一行了

 

3、for 遍历字典

  • 使用 for 循环来遍历(迭代)字典类型
  • 遍历(迭代): 不断取值的过程
# 创建字典
one_dict = {"name": "咕咕夜", "age": 18, "sex": "不详"}

# for 循环默认迭代的是所有的key值
for i in one_dict:
    print("值为: {}\t类型为: {}".format(i, type(i)))
print()

# keys:取出字典中的key
for keys in one_dict.keys():
    print("key值为: {}\t类型为: {}".format(keys, type(keys)))
print()

# values:取出字典中的值
for value in one_dict.values():
    print("值为: {}\t类型为: {}".format(value, type(value)))
print()

# items:同时取出key和value
for item in one_dict.items():  # 每次迭代,会返回一个元祖
    print("值为: {}\t类型为: {}".format(item, type(item)))
print()

for key, value in one_dict.items():  # 每次迭代,会将元祖拆包,分别赋值给key、value
    print("key为: ", key, end='\t')
    print("value为: ", value)

执行结果:

值为: name    类型为: <class 'str'>
值为: age    类型为: <class 'str'>
值为: sex    类型为: <class 'str'>

key值为: name    类型为: <class 'str'>
key值为: age    类型为: <class 'str'>
key值为: sex    类型为: <class 'str'>

值为: 咕咕夜    类型为: <class 'str'>
值为: 18    类型为: <class 'int'>
值为: 不详    类型为: <class 'str'>

值为: ('name', '咕咕夜')    类型为: <class 'tuple'>
值为: ('age', 18)    类型为: <class 'tuple'>
值为: ('sex', '不详')    类型为: <class 'tuple'>

key为:  name    value为:  咕咕夜
key为:  age    value为:  18
key为:  sex    value为:  不详

 

4、任何一个序列都支持拆包

  • 等号左侧变量个数,要与右侧待拆包的元祖个数一致
  • 相当于给变量通过一一对应进行赋值
  • 如果左侧变量个数少于右侧待拆包的序列类型中元素个数时,会报错
# 元祖(tople)进行拆包
one_tuple = ("", "七七", None)

one_var, two_var, three_var = one_tuple  # 拆包
print("值为: {}\t类型为: {}".format(one_var, type(one_var)))
print("值为: {}\t类型为: {}".format(two_var, type(two_var)))
print("值为: {}\t类型为: {}".format(three_var, type(three_var)))

# 字符串也可以拆包
var1, var2 = "KY"

print(var1)
print(var2)

执行结果:
值为: 默    类型为: <class 'str'>
值为: 七七    类型为: <class 'str'>
值为: None    类型为: <class 'NoneType'>
K
Y

 

5、range   也序列类型,支持序列类型的所有操作

作用: 

  • 生成数字序列
  • 跟切片的开始、结束索引类似
  • 启始值能取到,但是取不到结束值(只能取到结束值前一位)
  • 步长,,默认为1
# 示例:
one_var = range(10)  # 0~9
print(one_var)

# 将它转化为列表
print(list(one_var))

# 通过数字索引取值
print(one_var[-2])

# 可以使用for循环进行遍历
for i in one_var:
    print(i)

# 支持切片操作
# 步长, 默认为1,不能取到最后一位
print(list(range(50, 88, 3)))

执行结果:
range(0, 10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
8
0
1
2
3
4
5
6
7
8
9
[50, 53, 56, 59, 62, 65, 68, 71, 74, 77, 80, 83, 86]

 

案例1:计算1-10之间的整数

result = 0
for i in range(1, 11):  # 往往可以控制循环执行的次数
    result += i

print(result)

执行结果:
55

 

四、while、for有什么区别

  • 相同:都能进行循环
  • 不同:
    • while循环:往往会在循环次数不确定的情况下使用  
    • for 循环:如果一个循环的次数是确定的,那么就用for  
    • 优先使用 for,性能更优,效率更高   

练习题:

1.求三个整数中的最大值

提示:三个整数使用input提示用户输入

first_num = int(input("请输入第一个整数:"))
second_num = int(input("清输入第二个整数:"))
three_num = int(input("清输入第三个整数:"))
# 方法一:
if first_num >= second_num:
    max_num = first_num
else:
    max_num = second_num
if three_num >= max_num:
    max_num = three_num
print("最大的数字是:{}".format(max_num))

# 方法二:
max_num = first_num
if second_num > max_num:
    max_num = second_num
if three_num > max_num:
    max_num = three_num
print("最大的数字是:{}".format(max_num))

#方法三:
max_num = max(first_num,second_num,three_num)
print("最大的数字是:{}".format(max_num))

#方法四:
if first_num >= second_num and first_num >= three_num:
    print("最大的数字是:{}".format(first_num))
elif second_num >= three_num:
    print("最大的数字是:{}".format(second_num))
else:
    print("最大的数字是:{}".format(three_num))

 

2.break 和 continue的区别

  • break和continue都是在循环中使用
  • break:当程序碰到 break 后直接跳出最近一层循环,结束最近一层的整个循环
  • continue:当程序碰到 continue 时跳过该次循环,继续下一次循环

 

3.判断是否为闰年

提示:

  • 输入一个有效的年份(如:2019),判断是否为闰年
  • 润年的判断规则,请自行“撩度娘”
  • 如果是闰年,则打印“2019年是闰年”;否则打印“2019年不是闰年”
# 方法一:
year = int(input("请输入一个年份(如2020):"))
if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
    print("{}年是闰年".format(year))
else:
    print("{}年不是闰年".format(year))

# 方法二:
year = int(input("请输入一个年份(如2020):"))
if year % 4 == 0 and year % 100 != 0:
    print("{}年是闰年".format(year))
elif year % 400 == 0:
    print("{}年是闰年".format(year))
else:
    print("{}年不是闰年".format(year))

# 方法三:
year = int(input("请输入一个年份(如2020):"))
if (year % 4) == 0:
    if year % 100 != 0:
        print("{}年是闰年".format(year))
    elif year % 400 == 0:
        print("{}年是闰年".format(year))
    else:
        print("{0}年不是闰年".format(year))
else:
   print("{0}年不是闰年".format(year))

方法四:

import calendar


def leap_year():
    year_num = int(input("请输入一个年份的数字(如:2019):"))
    if calendar.isleap(year_num):
        print("您输入的年份为闰年!")
    else:
        print("您输入的年份为平年!")


leap_year()

 

4.编写如下程序

  • a.用户输入1-7的数字,分别代表周一到周日
  • b.如果输入1-5,打印对应的“周一”~“周五”,如果输入的数字是6或7,打印输出“周末”
  • c.如果输入0,退出循环
  • d.输入其他内容,提示“输入有误,请重新输入!”
  • 提示:本题可以使用if和while循环
number_dict = {"1": "周一", "2": "周二", "3": "周三", "4": "周四", "5": "周五"}
while True:
    number = input('请输入一个1-7中的数字(输入0退出):')
    if number.isdigit() and int(number) >= 0 and int(number) <= 7:
        if int(number) == 6 or int(number) == 7:
            weekend = '周末'
            print(weekend)
        elif int(number) >= 1 and int(number) <= 5:
            number_dict.get(number)
            print("今天是:{}".format(number_dict.get(number)))
        elif int(number) == 0:
            print("退出循环")
            break
    else:
        print('输入数字错误请重新输入')

方法二:

weekends_tuple = ("周一", "周二", "周三", "周四", "周五", "周末")


def weekend():
        while True:
            try:
                input_day = int(input("请输入一个1-7的数字:"))
                if input_day in range(1, 8):
                    if input_day in range(6, 8):
                        print(weekends_tuple[-1])
                    else:
                        print(weekends_tuple[input_day-1])
                elif input_day == 0:
                    break
                else:
                    print("输入的数字已超出范围!")
                    break
            except ValueError:
                print("输入有误,请重新输入!")
weekend()

 

5.使用while、for打印九九乘法表

# 方法一:使用while循环
def product():
    i = 1               # 定义计数器
    while i <= 9:       # 外层循环,行号
        j = 1           # 定义计数器
        while j <= i:   # 内层循环,列号
            print("{} * {} = {}\t".format(j, i, i * j), end='')
            j += 1      # 如果i > j 内层循环结束
        print()         # 打印空行
        i += 1          # 下一行打印
product()


# 方法二:使用for循环,乘法表有九行,第一行一列,二行二列。。
def product():
    for i in range(1, 10):  # 乘法表有9行
        for j in range(1, i + 1):  # 取列号
            result = i * j          # 第几列 * 第几行
            print("{} * {} = {}\t".format(j, i, result), end='')
        print()  # 打印空行
product()

 

6、写出将列表翻转的所有方法

  • 将列表[13, 20, 42, 85, 9, 45]翻转之后为[45, 9, 85, 42, 20, 13]
# 源列表:[13, 20, 42, 85, 9, 45]
# 翻转之后为:[45, 9, 85, 42, 20, 13]
src_lis = [13, 20, 42, 85, 9, 45]  # 源列表
print("源列表src_lis为:{}".format(src_lis))
len_src_lis = len(src_lis)  # 求长度6

# 方法一
new_lis = []
for i in range(len_src_lis - 1, -1, -1):
    new_lis.append(src_lis[i])
print("翻转之后的列表new_lis为:{}".format(new_lis))

# 或者
new_lis = []
for i in range(1, len_src_lis):
    new_lis.append(src_lis[-i])     # -1取最后一个
print("翻转之后的列表new_lis为:{}".format(new_lis))

# 方法二
new_lis = src_lis[::-1]
print("翻转之后的列表new_lis为:{}".format(new_lis))

# 方法三
src_lis.reverse()
print("翻转之后的列表new_lis1为:{}".format(src_lis))

# 方法四
loop_count = len_src_lis // 2
for i in range(0, loop_count):
    src_lis[i], src_lis[-i - 1] = src_lis[-i - 1], src_lis[i]
print("翻转之后的列表为:{}".format(src_lis))

 

5.取出列表中最大的值

  • 将列表[13, 20, 42, 85, 9, 45]中最大的值为85
src_lis = [13, 20, 42, 85, 9, 45]
print("源列表src_lis为:{}".format(src_lis))
# 方法一:依次取值作比较取最大值
max_num = 0
for i in src_lis:
    if max_num < i:
        max_num = i
print("最大值为:{}".format(max_num))

# 方法二
print("最大值为:{}".format(max(src_lis)))

 

6.编写打印出1-100之间除了含7和7的倍数之外的所有数字

  • 提示:不符合要求的部分数字为:7、14、17、21、27等等
def is_int_or_float(str_num):
    """
    判断用户输入的是否为浮点型字符串
    """
    if str_num.replace(".", "", 1).isdigit():
        return True
    else:
        return False


def display_bmi_info(bmi):
    """
    显示用户bmi信息
    """
    if bmi > 32:
        print("你的bmi为{},严重肥胖!".format(bmi))
    elif bmi > 28:
        print("你的bmi为{},肥胖!".format(bmi))
    elif bmi > 25:
        print("你的bmi为{},过重!".format(bmi))
    elif bmi > 18.5:
        print("你的bmi为{},正常!".format(bmi))
    else:
        print("你的bmi为{},过轻!".format(bmi))


your_height = input("请输入你的身高(单位m):")
your_weight = input("请输入你的体重(单位kg):")
while True:
    if is_int_or_float(your_height):
        if is_int_or_float(your_weight):
            your_height = float(your_height)
            your_weight = float(your_weight)
            your_bmi = round(your_weight / your_height ** 2, 2)
            display_bmi_info(your_bmi)
            break
        else:
            print("输入的体中有误,请重新输入!:")
            your_weight = input("请输入你的体重(单位kg):")
    else:
        print("输入的体中有误,请重新输入!:")
        your_height = input("请输入你的身高(单位m):")

 

7.列表去重

将列表[10, 1, 2, 20, 10, 3, 2, 1, 15, 20, 44, 56, 3, 2, 1]去除重复元素

src_lis = [10, 1, 2, 20, 10, 3, 2, 1, 15, 20, 44, 56, 3, 2, 1]
print("源列表src_ .lis为: {}".format(src_lis))

# 方法一:
new_lis = list(set(src_lis))
print("去除重复元素后列表new_lis为: {}".format(new_lis))

# 方法二:
new_lis = []
for item in src_lis:
    if item not in new_lis:
        new_lis.append(item)
print("去除重复元素后列表new_lis为: {}".format(new_lis))

 

8.所有的序列类型都支持成员操作:str、list、tuple

序列类型支持哪些操作?

  • 通过数字索引取值
  • 支持切片操作
  • len()
  • 支持重复操作:序列类型 * 数字 "Keyou" * 100
  • 成员运算操作 (in、not in)
  • for循环遍历

总结:

 

 

 

 

*******请大家尊重原创,如要转载,请注明出处:转载自:https://www.cnblogs.com/shouhu/,谢谢!!******* 

posted @ 2019-10-24 18:54  守护往昔  阅读(320)  评论(0编辑  收藏  举报