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

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

作者: 小海怪的互联网 | 来源:发表于2019-06-10 12:14 被阅读0次

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

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

    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循环实现

    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和它本身整除
    代码:

    # 让用户输入一个任意数字
    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:正序输出:

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

    代码2:反序输出:

    # 让用户输入一个数字,用来控制显示的行数
    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循环

    i=0
    while i< 9:
        i += 1
        j=0
        while j < i:
            j+=1
            print('{}*{}={} '.format(j,i,i*j),end='')
        print()
    
    
    

    代码2:for循环

    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:

    # 定义一个要猜的数字:
    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次机会
    思路:可以先拿到用户猜过的数字,我可以随机一个数字,去和用户猜过的数字作比对。如果这个循环的数字没有在用户猜过的数字当中。那么这个数字就是我们需要的答案
    代码:

    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以内的质数
    代码:

    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个时间差

    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的方法跳出不需要再次循环的数字
    代码如下:

    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第二次优化

    通过
    代码:

    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倍左右

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/podaxctx.html