先上代码

n,m = map(int,input("").split())           #n获取外部遍历的长度,m获取内部循环的长度
d = 0                                      #d定义外部遍历的初值
while n > 0:
    for k,i in zip(range(d,d+m),range(m)):
        if n < 1 :                         #外部遍历结束后跳出
            break
        print(k,i)
        n -= 1

    d = k + 1

效果如下

 可能不够直观,可以略微修改一下代码,使遍历和循环的初值为1

n,m = map(int,input("").split())           #n获取外部遍历的长度,m获取内部循环的长度
d = 1                                      #d定义外部遍历的初值
while n > 0:
    for k,i in zip(range(d,d+m),range(1,m+1)):
        if n < 1 :                         #外部遍历结束后跳出
            break
        print(k,i)
        n -= 1

    d = k + 1

效果如下

 

关于for循环内部的break语句

已知在for循环中,语句会一直遍历到最后一个参数,在这段代码中,当记录外部遍历长度的n < 0即外部遍历结束时,若n不为m的倍数也就说,在n<0时for循环还在运行中,n不会第一时间和外部的while条件进行对比,结束,具体代码和示例如下

n,m = map(int,input("").split())           #n获取外部遍历的长度,m获取内部循环的长度
d = 1                                      #d定义外部遍历的初值
while n > 0:
    for k,i in zip(range(d,d+m),range(1,m+1)):
        #if n < 1 :                         
            #break

        print(k,i)
        n -= 1
        
    d = k + 1


可见k到了17没有结束,一直运行到了20.

 代码思路

通过while语句使for语句循环运行,调整for语句的参数,使循环时for语句的遍历范围不同.