Python基础05循环

本文详细介绍了Python中的for循环、range函数的用法,探讨了while循环、循环嵌套以及如何利用break和continue控制循环。还强调了循环效率的优化,如剪枝技巧和寻找质数的方法。
摘要由CSDN通过智能技术生成
#### Chapter 5 循环 Loop###############

#for 循环和循环范围 基于提供的范围,重复执行特定次数的操作

def sumFromMToN(m, n):

    total = 0

    # 注意: range(x, y) 是左闭右开区间,包含 x,不包含 y

    for x in range(m, n+1):

        total += x

    return total



print(sumFromMToN(5, 10))#5到10的和



def sumFromMToN(m, n):

    return sum(range(m, n+1))

print(sumFromMToN(5, 10))



##range()生成数列



def sumToN(n):

    total = 0

    # range 省略第一个参数,起始范围默认为 0

    for x in range(n+1):

        total += x

    return total



print(sumToN(5))




#添加第三个参数,第三个参数为 “步长” step

def sumEveryKthFromMToN(m, n, k):

    total = 0

    for x in range(m, n+1, k):

        total += x

    return total



print(sumEveryKthFromMToN(5, 20, 7))

#可以求等差数列的和



#只对从 m 到 n 的 奇数求和

# 通过修改循环内部的代码来改变步长

def sumOfOddsFromMToN(m, n):

    total = 0

    for x in range(m, n+1):

        if x % 2 == 1:

            total += x

    return total

print(sumOfOddsFromMToN(4, 10))



#生成一个反向数字序列,不建议操作

def sumOfOddsFromMToN(m, n):

    total = 0

    for x in range(n, m-1, -1):

        if x % 2 == 1:

            total += x

    return total



####for 循环嵌套

#运行较慢

# 下面的代码将输出二维坐标

def printCoordinates(xMax, yMax):

    for x in range(1, xMax+1):

        for y in range(1, yMax+1):

            print(f"( {x} , {y} )  ", end="")

        print()

print(printCoordinates(5, 5))




def Stars(n, m):

    # 输出一个 n*m 的星型矩阵图

    for row in range(n):

        for col in range(m):

            print("*", end="")

        print()

print(Stars(5, 5))



def printMysteryStarShape(n):

    for row in range(n):

        print(row, end=" ")

        for col in range(row):

            print("*", end=" ")

        print()

print(printMysteryStarShape(5))




##### while 循环

#不知道循环什么时候停下来的时候使用

#找出一个数最左边的那一位的数值(12345 的 1 )

def leftmostDigit(n):

    n = abs(n)

    while n >= 10:

        n = n//10

    return n

print(leftmostDigit(46535248))



#依次找出 n 个 4 或者 7 的整数倍非负整数

def isMultipleOf4or7(x):

    return ((x % 4) == 0) or ((x % 7) == 0)



def nthMultipleOf4or7(n):

    found = 0

    guess = -1

    while found <= n:

        guess += 1

        if isMultipleOf4or7(guess):

            found += 1

    return guess



print("4 或 7 的倍数: ", end="")

for n in range(15):

    print(nthMultipleOf4or7(n), end=" ")



print(end="\n")



####break 与 continue 语句

for n in range(5):

    for n in range(200):

        if n % 3 == 0:

            continue # 跳过这次循环

            print("hello")#不被执行

        elif n == 8:

            break # 跳出当前整个循环

        else:

            pass # 什么都不做,占位符(不会被运行)

        print(n, end=" ")

    print("xx")



#假·死循环

#与环境交互后,在特定条件下终止的循环

def readUntilDone():

    linesEntered = 0

    while True:

        response = input("输入一个字符串(输入 done 则退出): ")

        if response == "done":

            break

        print("你输入了: ", response)

        linesEntered += 1

    print("Bye!")

    return linesEntered



linesEntered = readUntilDone()

print("你输入了", linesEntered, "行 (不包括 'done').")



#判断一个数是不是质数

def isPrime(n):

    if n < 2:

        return False

    for factor in range(2,n):

        if n % factor == 0:

            return False

    return True



print("0-100有哪些质数:")

for n in range(100):

    if isPrime(n):

        print(n, end=" ")



#faster IsPrime:

#剪枝 加快循环

def fasterIsPrime(n):

    if n < 2:

        return False

    if n == 2:

        return True

    if n % 2 == 0:

        return False

    maxFactor = round(n**0.5)

    for factor in range(3, maxFactor+1, 2):

        if n % factor == 0:

            return False

    return True



print("\n")

for n in range(100):

    if fasterIsPrime(n):

        print(n, end=" ")



#两种解法的结果一致

import time#导入库



bigPrime = 102030407

print("Timing isPrime(",bigPrime,")", end=" ")



# isPrime

time0 = time.time()

print(", returns ", isPrime(bigPrime), end=" ")



time1 = time.time()

print(", time = ",(time1-time0)*1000,"ms\n")

#time =  6337.381601333618 ms



# fasterIsPrime

print("Timing fasterIsPrime(",bigPrime,")", end=" ")

time0 = time.time()



print(", returns ", fasterIsPrime(bigPrime), end=" ")

time1 = time.time()



# result

print(", time = ",(time1-time0)*1000,"ms")

#time =  0.0 ms




#####依次找出第 n 位质数

def nthPrime(n):

    found = 0

    guess = 0

    while found <= n:

        guess += 1

        if fasterIsPrime(guess):

            found += 1

    return guess



for n in range(10):

    print(n, nthPrime(n))

print("Done!")




#生成随机矩阵

from random import random

def Mat(n,m):

    for row in range (n):

        for col in range(m):

            print(random(),end="\t")

        print()



print(Mat(5,5))

#总结

#For 循环用于指定范围的重复操作。

#range() 可以生成一个数字范围。

#在不知道循环什么时间停止的时候,应该试试 While 循环。

#循环同样也是可以嵌套的。

#巧妙地使用 break 和 continue 语句。

#合理的剪枝,缩小搜索范围/循环范围,可以大幅提高程序运行效率



  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值