第六章:条件控制语句练习

1.水仙花数

练习1 求1000以内所有的水仙花数

水仙花数 指的是一个n位数(n >= 3),它的每个位数上的数字的n次幂之和等于它本身

13 + 53 + 3**3 = 153


# 先获取1000以内所有的三位数
i = 100

while i < 1000:
    #假设 i 的百位数是a ,十位数是 b ,个位数是 c

    #求百位数
    a = i // 100
    # 求十位数
    b = i // 10 % 10
    # b = (i - a*100) // 10
    # 求个位数
    c = i % 10
    # print(a)
    # print(i)
    # 判断 i 是否是水仙花数
    if a**3 + b**3 + c**3 == i:
        print(i)
    i += 1
>>>153
370
371
407

2.质数练习1

练习2 获取用户输入的任意数,判断其是否是质数

什么是质数 只能被1和它本身整除的数就是质数 2 3 5 7 11 13 17 19


# 获取用户输入的任意数

num = int(input('输入一个任意大于1的整数:'))

# 定义一个变量
i = 2
flag = True
# 创建一个标记  用来记录num是否是质数  默认是质数
while i < num:
    # print(i)
    #如果这个条件成立,则证明num一定不是质数
    if num % i == 0:
        # 一旦进入这个循环,则证明num不是质数
        flag = False
        # print(num)
    i += 1
if flag:
    print(num,'是质数')
else:
    print(num,'不是质数')

3.循环嵌套

 在控制台输入如下图形
# *****
# *****
# *****
# *****

# print('*****')
# print('*****')
# print('*****')
# print('*****')
# print('*****')
>>>
*****
*****
*****
*****
*****


# 控制图形的高度
# i = 0
#
# while i < 5:
#
#     print('*****')
#     i += 1
>>>
*****
*****
*****
*****
*****

外层循环控制的是高度(列),内层循环控制的是宽度(行)

i = 0
#
# while i < 5:
#     print('*',end='')
#     print('*',end='')
#     print('*',end='')
#     print('*',end='')
#     print('*',end='')
#     print()
#     i += 1
>>>*****
*****
*****
*****
*****
----------------------------------------------------------------------------------------------------------------------------
# 外层循环控制的是高度(列),内层循环控制的是宽度(行)

# 外层循环控制图形的高度
i = 0

while i < 5:
    # 内层循环控制的是图形的宽度
    j = 0
    while j < 5:
        print('*',end='')   # end=' '表示:防止换行
        j += 1

    print()
    i += 1
    >>>
 *****
*****
*****
*****
*****
>>>过程实现原理如下图所示


print('*', end='')
print('*', end='')
print('*', end='')
print('*', end='')
print('*', end='')
print()
print('*', end='')
print('*', end='')
print('*', end='')
print('*', end='')
print('*', end='')
print()
print('*', end='')
print('*', end='')
print('*', end='')
print('*', end='')
print('*', end='')
print()
print('*', end='')
print('*', end='')
print('*', end='')
print('*', end='')
print('*', end='')
print()
print('*', end='')
print('*', end='')
print('*', end='')
print('*', end='')
print('*', end='')
print()
>>>
*****
*****
*****
*****
*****

练习1:打印出如下图形

*
**
***
****
*****

# *       i = 0 j < 1  j < i + 1
# **      i = 1 j < 2  j < i + 1
# ***     i = 2 j < 3  j < i + 1
# ****    i = 3 j < 4  j < i + 1
# *****   i = 4 j < 5  j < i + 1

i = 0
while i < 5:

    j = 0
    while j < i + 1:
        print('*',end='')
        j += 1

    print()
    i += 1
 >>>
*
**
***
****
***** 

练习2:打印出如下图形

*****
****
***
**
*
*****    i = 0  j < 5  j < 5 - i    j < 5 = 5 - i = 5 - 0 
****     i = 1  j < 4  j < 5- i     j < 4 = 5 - i = 5 - 1
***      i = 2  j < 3  j < 5- i     j < 3 = 5 - i = 5 - 2 
**       i = 3  j < 2  j < 5- i     j < 2 = 5 - i = 5 - 3 
*        i = 4  j < 1  j < 5- i     j < 1 = 5 - i = 5 - 4


i = 0
while i < 5:

    j = 0
    while j < 5 - i:
        print('*',end='')
        j += 1

    print()
    i += 1
>>>
*****
****
***
**
*

4. 99乘法表

练习3: 在控制台输出99乘法表

11=1
1
2=2 22=4
1
3=3 23=6 33=9
。。。。。。。 9*9=81
方案一:


# 创建一个外层循环来控制高度
i = 0

while i < 9:
    i += 1
    # 创建一个内层循环来控制宽度
    j = 0
    while j < i:
        j += 1
        print(f'{j}*{i}={j*i}',end='  ')

    print()
》》》
1*1=1  
1*2=2  2*2=4  
1*3=3  2*3=6  3*3=9  
1*4=4  2*4=8  3*4=12  4*4=16  
1*5=5  2*5=10  3*5=15  4*5=20  5*5=25  
1*6=6  2*6=12  3*6=18  4*6=24  5*6=30  6*6=36  
1*7=7  2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49  
1*8=8  2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64  
1*9=9  2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81  

方案二:

i = 0

while i < 9:
    i += 1

    j = 0
    while j < i:
        j += 1
        print(j,'*',i,'=',i*j,end='   ')

    print()
    》》》
1 * 1 = 1   
1 * 2 = 2   2 * 2 = 4   
1 * 3 = 3   2 * 3 = 6   3 * 3 = 9   
1 * 4 = 4   2 * 4 = 8   3 * 4 = 12   4 * 4 = 16   
1 * 5 = 5   2 * 5 = 10   3 * 5 = 15   4 * 5 = 20   5 * 5 = 25   
1 * 6 = 6   2 * 6 = 12   3 * 6 = 18   4 * 6 = 24   5 * 6 = 30   6 * 6 = 36   
1 * 7 = 7   2 * 7 = 14   3 * 7 = 21   4 * 7 = 28   5 * 7 = 35   6 * 7 = 42   7 * 7 = 49   
1 * 8 = 8   2 * 8 = 16   3 * 8 = 24   4 * 8 = 32   5 * 8 = 40   6 * 8 = 48   7 * 8 = 56   8 * 8 = 64   
1 * 9 = 9   2 * 9 = 18   3 * 9 = 27   4 * 9 = 36   5 * 9 = 45   6 * 9 = 54   7 * 9 = 63   8 * 9 = 72   9 * 9 = 81 

5.continue和break

练习4:猜数字游戏 随机1-10个数字,如果猜对正确,如果没有猜对,错误

给用户9次机会,最终结果要求用户一次都猜不对
1 2 3 4 5 6 7 8 9 10 猜9次,有9次机会
思路:可以先拿到用户猜过的数字,我可以随机拿一个数字,去和用户猜过的数字做比对,如果这个循环的数字没有在用户猜过的数字当中。那么这个数字就是我们需要的答案

# continue break
# continue 可以用来跳过当次循环
i = 0
while i < 6:
    i += 1

    if i == 2:
        continue
    print(i)
else:
    print('hello')
    》》》
    1
    3
    4
    5
    6
    hello
# break 可以立即退出循环语句,包括else语句
i = 0
while i < 6:
    i += 1

    if i == 2:
        break
    print(i)
else:
    print('hello')
    》》》
    1
import random
# 定义一个列表 目的:用来存储用户猜过的数字
list = []
i = 0
while i < 9:

    number = int(input('请输入任意一个1-10之间的数字:'))
    # 把用户猜过的数字追加到列表当中
    list.append(number)
    print('对不起,你没有猜对')

    i += 1

while True:

    number_x = random.randint(1,10)    # 1 <= X <= 10
    if number_x in list:
        continue
    else:
        break
print('正确号码是:',number_x)
》》》
请输入任意一个1-10之间的数字:1
对不起,你没有猜对
请输入任意一个1-10之间的数字:2
对不起,你没有猜对
请输入任意一个1-10之间的数字:3
对不起,你没有猜对
请输入任意一个1-10之间的数字:4
对不起,你没有猜对
请输入任意一个1-10之间的数字:5
对不起,你没有猜对
请输入任意一个1-10之间的数字:6
对不起,你没有猜对
请输入任意一个1-10之间的数字:7
对不起,你没有猜对
请输入任意一个1-10之间的数字:8
对不起,你没有猜对
请输入任意一个1-10之间的数字:10
对不起,你没有猜对
正确号码是: 9

6.质数练习2:

练习5 求100以内所有质数 2和可以被1和它本身整除的数


i = 2
while i <= 100:
    flag = True

    # 判断 i 是否是质数
    # 获取所有可能成为i的因数
    j = 2
    while j < i:
        # 判断 i 是否能被 就整除 ,i不是质数
        if i % j == 0:
            flag = False
        j += 1

    if flag:
        print(i)
    i += 1
    》》》
    2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97

7 质数练习2

优化前:

10000个数 8.70秒

100000个数 没结果了···

from time import *
# 获取程序开始的时间    经验 性能
start = time()
i= 2
while i <= 10000:
    flag = True
    j = 2
    while j <= i  :
        if i % j == 0:
            flag = False
            # 一旦判断证明i根本不是质数,所以内层循环根本就没必要继续执行
           
        j += 1
    if flag:
        print(i)
        pass
    i += 1

# 获取程序结束时间
end = time()
# 计算程序执行的时间
print('程序花费了:',end - start,'秒')

第一次优化:(加个break)

10000个数 1.00秒

100000个数 84.6秒

在这里插入代码片from time import *
# 获取程序开始的时间    经验 性能
start = time()
i= 2
while i <= 10000:
    flag = True
    j = 2
    while j <= i  :
        if i % j == 0:
            flag = False
            # 一旦判断证明i根本不是质数,所以内层循环根本就没必要继续执行
            break
        j += 1
    if flag:
        print(i)
        pass
    i += 1

# 获取程序结束时间
end = time()
# 计算程序执行的时间
print('程序花费了:',end - start,'秒')

第二次优化:再加个 ( **0.5 )

10000个数: 0.05秒

100000个数: 1.24秒

from time import *
# 获取程序开始的时间    经验 性能
start = time()
i= 2
while i <= 10000:
    flag = True
    j = 2
    while j <= i ** 0.5 :
        if i % j == 0:
            flag = False
            # 一旦判断证明i根本不是质数,所以内层循环根本就没必要继续执行
            break
        j += 1
    if flag:
        print(i)
        pass
    i += 1

# 获取程序结束时间
end = time()
# 计算程序执行的时间
print('程序花费了:',end - start,'秒')

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值