python 基础知识第6讲:条件语句控制练习题集合

2019-08-23 14:36:43 浏览数 (1)

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

需求:求1000以内的所有的水仙花数 分析:它的每个位数上的数字的3次幂之和等于它本身 代码1:用if 单次判断

代码语言:javascript复制
num = int(input("请输入一个1000以内的三位数,最小为100:"))
if  100< num <1000:
    #求出对应的百位,十位,个位数字
    #假设 x是百位数,y是十位数,z是个位数
    x=  num //100
    y= (num-x*100) // 10
    z= num % 10
    if x**3 y**3 z**3 == num:
        print(num,'是水仙花数')
    else:
        print(num,'不是水仙花数')
else:
    print('输入的数字有误,请重新输入!')

代码2:用 while循环实现

代码语言:javascript复制
num=100
while num<1000:
   #求出对应的百位,十位,个位数字
   #假设 x是百位数,y是十位数,z是个位数

   x = num // 100
   y= (num-x*100) // 10
   z= num % 10
   if x**3 y**3 z**3 == num:
       print(num,'是水仙花数')
   num  =1

练习2.求质数

需求:获取用户输入的任意数,判断是否是质数 分析:质数就是只能被1和它本身整除 代码:

代码语言:javascript复制
# 让用户输入一个任意数字
num = int(input("请输入一个数字:"))
# 定义一个变量用来作余数的判断
i=2

# 定义一个标签用来标记是否是质数
flag=True
while i<num:
    if  num % i == 0:
        flag=False
    i =1

if flag:
    print('是质数')
else:
    print('不是质数')

练习3.循环嵌套

需求: 循环嵌套--------------------------------------- 在控制台输出图形,第一行输出一个,第二行输出二个,第n行输出n个 分析:通过2个循环嵌套打印输出 代码1:正序输出:

代码语言:javascript复制
# 让用户输入一个数字,用来控制显示的行数
num=int(input('请输入一个数字,用来控制您要显示的行数:'))
# 定义一个变量,用来控制输出星星的个数
i=0
# 控制行数
while i<num:
    j=0
    # 控制每行输出的个数
    while j<i 1:
        print('*',end='')
        j =1
    print()
    i  = 1

代码2:反序输出:

代码语言:javascript复制
# 让用户输入一个数字,用来控制显示的行数
num=int(input('请输入一个数字,用来控制您要显示的行数:'))
# 定义一个变量,用来控制输出星星的个数
i=0
# 控制行数
while i<num:
    j=0
    # 控制每行输出的个数
    while j<num-i:
        print('*',end='')
        j =1
    print()
    i  = 1

练习3.99乘法表

代码1:while循环

代码语言:javascript复制
i=0
while i< 9:
    i  = 1
    j=0
    while j < i:
        j =1
        print('{}*{}={} '.format(j,i,i*j),end='')
    print()

代码2:for循环

代码语言:javascript复制
for i in range(0,10):
    i =1
    for j in range(0,i):
        j =1
        print('{}*{}={} '.format(j,i,i*j),end='')
    print()

练习4. while break continue

需求:猜数字,猜对了结束,猜不对继续 代码1:

代码语言:javascript复制
# 定义一个要猜的数字:
i=7
# 定义一个变量接收用户输入的数字
while True:
    num = int(input("请输入一个10之内的数字:"))

    if num > 10 or num < 1:
        print('输入有误!')
        continue

    elif  num>i:
        print('猜大了!')
        continue
    elif num< i :
        print('猜小了:')
        continue
    elif num==i:
        print('猜对了!')
        break

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

代码语言:javascript复制
import random
# 定义一个列表 目的:用来存储用户猜过的数字
lst = []
i = 0
while i < 9:

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

while True:

    number_x = random.randint(1,10)   #1<= x <=10

    if number_x in lst:
        continue
    else:
        break
print('正确号码是:',number_x)

练习5. 求质数2

需求:求100以内的质数 代码:

代码语言:javascript复制
i=2
while i<=100:
    flag = True
    j=2
    while j<i:
        if i % j == 0:
            flag=False
        j =1
    if flag:
        print(i)
    i  = 1

练习6. 求质数2,性能优化

先通过time模块来查看2个时间差

代码语言:javascript复制
from time import *
start_time= time()
i=2
while i<=10000:
    flag = True
    j=2
    while j<i:
        if i % j == 0:
            flag=False
        j =1

    if flag:
        #
        pass
    i  = 1
end_time = time()
print('花费了{}秒'.format(end_time-start_time))

通过上面代码的运行,发现当基数变大的时候,执行时间变长

6.1第一次优化

通过在内层循环增加break的方法跳出不需要再次循环的数字 代码如下:

代码语言:javascript复制
from time import *
start_time= time()
i=2
while i<=10000:
    flag = True
    j=2
    while j<i:
        if i % j == 0:
            flag=False
            break
        j =1

    if flag:
        #
        pass
    i  = 1
end_time = time()
print('花费了{}秒'.format(end_time-start_time))

通过上面代码的执行发现比原有的快了近10倍

6.1第二次优化

通过 代码:

代码语言:javascript复制
from time import *
start_time= time()
i=2
while i<=100000:
    flag = True
    j=2
    while j<=i**0.5:
        if i % j == 0:
            flag=False
            break
        j =1

    if flag:
        print(i)
        pass
    i  = 1
end_time = time()
print('花费了{}秒'.format(end_time-start_time))

通过最后的时间的观察,和最开始的对比,程序速度快了100倍左右

0 人点赞