Python中range数列与循环

一、range

  • range为数列
  • start 起点  默认值是0   包含
  • stop  终点  必填项      不包含
  • step  步长  默认值是1
datas = range(10)
print(datas)      # range(0, 10)
# range变为list类型,即可打印
print(list(datas))# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 倒着数
datas = range(16, 8, -1)
print(list(datas))
# 定义其他步长
datas = range(3, 9, 2)
print(list(datas))

二、for循环

1、运用规则

  • 循环结构:重复,多次执行
  • 可遍历数组、字符串、range
  • for 后是变量名 in 后是范围
# in成员运算符
print(5 in range(10),list(range(10)))
# 结果:True [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

for i in range(10): # 将range中的内容这个赋予变量i
    pass
    print("循环执行range遍", i)
# 到i不包含在range里面时退出

for c in "ABCDEFG": # char指的是字符
    print(c)
# 结果:字符串逐个输出


for e in ["第一个", bool, False, None, 100, "3", "a", "class"]: #列表
    print(e)
# 结果:第一个、、False、None、100、3、a、class

for a in range(3, 67, 15):
    print(a)
# 结果:  3、18、33、48、63  
num1 = [1, 5, 8, 14]
for num in num1:
    print(num)
# 结果:1、5、8、14

2、实战 

 (1)计算1+2+3+4+...+100
# 计算1+2+3+4+...+100
# sum是函数,为求和计算print(sum(range(1, 101)))
# 变量名尽量避开sum
total = 0
for i in range(101):
    total += i
print(total)
 (2)计算【500,1000】之间3的倍数的平均数
#计算【500,1000】之间3的倍数的平均数
total = 0 # 总数
j = 0     # 个数(count)
for i in range(500, 1001):
    if i % 3 == 0:
        j += 1
        total += i
print(total / j)  
 (3)计算从500开始前10个5的倍数的平均数
# 计算从500开始前10个5的倍数的平均数

# 方法1
# total = 0
# for i in range(500, 500+5*10, 5):
# total += i
# print(total / 10)

# 方法2
start = 500
total = 0
ifor i in range(10):
total += start
start += 5
print(total / 10)

# 方法3
total = 0
count = 0
for i in range(500, 600, 1): 
    if i % 5 == 0:
        total += i
        count += 1
    elif  count == 10:
        break
print(total / 10)

三、break与continue

1、使用规则

  • break 可以终止循环,循环退出
  • continue可以结束当前这一轮,进入下一轮循环

2、实战

(1)计算从500开始前10个13的倍数的平均数
total = 0
count = 0
for i in range(500, 1000):
    if i % 13 == 0:
        count += 1
        total += i
        if count == 10:
            break
print(total / count)  

四、循环嵌套

1、规则:

        外层循环变化一次内层循环变化一轮

2、实战

⑴、打印9*9乘法表
# 打印9*9乘法表
for i in range(1, 10):                          # 控制外层循环
    for j in range(1, i+1):                     # 控制内层循环,从1乘到i
        print(f"{j}*{i}={j * i}", end="\t")     # "\t"表示制表符,使每行对齐
    print()                                     # print()输出空行,每次内层循环结束后空行
#                                               # 即i控制列数,j控制行数
⑵、输入一个数,求出它的阶乘
num = int(input("请输入一个数:"))
total = 1
for i in range(1, num+1):
    total *= i
print(f"{num}的阶乘是{total}")

# 请输入一个数:5
# 5的阶乘是120
进阶:请输入一个数求出它的阶乘和
num = int(input("请输入一个数:"))
total = 0
for i in range(1, num + 1):
    count = 1
    for j in range(1, i+1):
        count *= j
    total += count
print(total)
# 请输入一个数:5
# 153
⑶、9行9列的图形,控制各种显示各种位置三角形

①9 * 9 的正方形

# 9 * 9 的正方形
for i in range(9):
    for j in range(9):
        print(" * ", end="")        # end负责取消空行(默认为end="\n"),即每次输出完j不换行,即控制行数
    print()                         # print负者每行输出完之后换行,即i控制行数
# 结果
# *  *  *  *  *  *  *  *  * 
# *  *  *  *  *  *  *  *  * 
# *  *  *  *  *  *  *  *  * 
# *  *  *  *  *  *  *  *  * 
# *  *  *  *  *  *  *  *  * 
# *  *  *  *  *  *  *  *  * 
# *  *  *  *  *  *  *  *  * 
# *  *  *  *  *  *  *  *  * 
# *  *  *  *  *  *  *  *  * 

②上三角线

# 上三角线
for i in range(9):
    for j in range(9):
        if i == j:
            print(" * ", end="")
        else:
            print("   ", end="")
    print()
# 结果
# *                         
#    *                      
#       *                   
#          *                
#             *             
#                *          
#                   *       
#                      *    
#                         * 

③下三角形线

# 下三角线
for i in range(9):
    for j in range(9):
        if i + j == 8:
            print(" * ", end="")
        else:
            print("   ", end="")
    print()

# 结果
#                          * 
#                       *    
#                    *       
#                 *          
#              *             
#           *                
#        *                   
#     *                      
#  *                         

④右上三角形

# 右上三角
for i in range(9):
    for j in range(9):
        if i <= j:
            print(" * ", end="")
        else:
            print("   ", end="")
    print()
# 结果
#  *  *  *  *  *  *  *  *  * 
#     *  *  *  *  *  *  *  * 
#        *  *  *  *  *  *  * 
#           *  *  *  *  *  * 
#              *  *  *  *  * 
#                 *  *  *  * 
#                    *  *  * 
#                       *  * 
#                          * 

⑤左下三角形

# 左下三角形
for i in range(9):
    for j in range(9):
        if i >= j:
            print(" * ", end="")
        else:
            print("   ", end="")
    print()
# 结果
#  *                         
#  *  *                      
#  *  *  *                   
#  *  *  *  *                
#  *  *  *  *  *             
#  *  *  *  *  *  *          
#  *  *  *  *  *  *  *       
#  *  *  *  *  *  *  *  *    
#  *  *  *  *  *  *  *  *  * 

 ⑥右下三角形

# # 右下三角形
for i in range(9):
    for j in range(9):
        if i + j >= 8:
            print(" * ", end="")
        else:
            print("   ", end="")

    print()
# 结果
#                          * 
#                       *  * 
#                    *  *  * 
#                 *  *  *  * 
#              *  *  *  *  * 
#           *  *  *  *  *  * 
#        *  *  *  *  *  *  * 
#     *  *  *  *  *  *  *  * 
#  *  *  *  *  *  *  *  *  * 

⑦左上三角形


# # 左上三角形
for i in range(9):
    for j in range(9):
        if i + j <= 8:
            print(" * ", end="")
        else:
            print("   ", end="")
    print()
# 结果
#  *  *  *  *  *  *  *  *  * 
#  *  *  *  *  *  *  *  *    
#  *  *  *  *  *  *  *       
#  *  *  *  *  *  *          
#  *  *  *  *  *             
#  *  *  *  *                
#  *  *  *                   
#  *  *                      
#  *  

⑧沙漏形状

# 时间沙漏
for i in range(9):
    for j in range(9):
        if i <= j and i + j <=8 or i >= j and i + j >=8:
            print(" * ", end="")
        else:
            print("   ", end="")
    print()
# 结果
#  *  *  *  *  *  *  *  *  *
#     *  *  *  *  *  *  *
#        *  *  *  *  *
#           *  *  *
#              *
#           *  *  *
#        *  *  *  *  *
#     *  *  *  *  *  *  *
#  *  *  *  *  *  *  *  *  *
⑷、输入3打印
*
***
*****
# 方法一
num = int(input("请输入一个数字:"))
for i in range(1, num):
    for j in range(1, 2*i):
        print("*", end="")
    print()
# 方法二
num = int(input("请输入一个数字:"))
for i in range(1, num+1):
    print("*"*(2*i-1))      # 一个字符串乘以多少,相当于字符串重复几遍
    print()
⑸、输入一个数,倒着输出*

*****
***
*

num = int(input("请输入一个数字:"))
for i in range(num, 0, -1):
    for j in range(1, 2*i):    
        print("*", end="")
    print()
⑹、已知两个三位数abc和cba之和为1333(即abc+cba=1333)求 a、b、c。 
for i in range(100,1000):
    a1 = i // 100
    a2 = i // 10 % 10
    a3 = i % 10
    for j in range(100, 1000):
        b1 = j // 100
        b2 = j // 10 % 10
        b3 = j % 10
        if a1 == b3 and a2 == b2 and a3 == b1 and i + j == 1333:
            print(f"a={a1},b={a2},c={a3}")
# 结果
# a=4,b=1,c=9
# a=5,b=1,c=8
# a=6,b=1,c=7
# a=7,b=1,c=6
# a=8,b=1,c=5
# a=9,b=1,c=4
⑺、编程求出满足以下条件的三位数:它除以11所得的商等于它各位数字之和。
for i in range(100, 1000):
    num = i / 11
    first = i // 100
    second = i // 10 % 10
    third = i % 10
    if num == first + second + third:
        print(i)
# 结果:198
⑻、求1000以内最大的5个能同时被3和6整除的数。
count = 0
for i in range(1000, 0, -1):
    if i % 3 == 0 and i % 6 == 0:
        count += 1
        print(i)
        if count == 5:
            break

# 结果
# 996
# 990
# 984
# 978
# 972
⑼、输入一个数字,如果这个数字是质数则打印该数字,否则则打印该数字最大的因数。
num = int(input("请输入一个数字:"))
# 默认值是质数
flag = True
for i in range(num-1, 1, -1):   # 除的数应该排除本身和1
    if num % i == 0:
        flag = False
        print(f"{num}的最大公因子为{i}")
        break
if flag:
    print(f"{num}是质数")
⑽、求1000以内所有质数的平均数。
count = 0
total = 0
for i in range(2, 1001):
    flag = True
    for j in range(2, i):
        if i % j == 0:
            flag = False
            break
    if flag:
        total += i
        count += 1
print(total / count)
# 结果
# 453.13690476190476
⑾、找到1000以内10个最大的质数。
count = 0
for i in range(1000, 1, -1):
    flag = True                 # 注意每个数都要重新判断是否是质数
    for j in range(2, i):       # 一千个数有一千个Flag,即每个数都使用自己的flag
        if i % j == 0:
            flag = False
            break
    if flag:
        print(i)
        count += 1
        if count > 9:
            break
# 结果
# 997
# 991
# 983
# 977
# 971
# 967
# 953
# 947
# 941
# 937

 五、while循环

1、while循环的规则

  •    核心开门关门概念, 默认条件True才能进入代码块。
  •     随着程序的运行,改变条件,将条件设置为False。
  •     条件为False, 跳出循环。

2、实例

⑴、每次输入一个整数,求输了几次,前面所有整数的和大于100了。

# 方法一
count = 0
value = 0
while True:
    count += 1
    value += value1
    value1 = float(input("请输入一个数:"))
    if value >= 100:
        print(f"需要{count}次")
        break

# 方法二
count = 0
value = 0
while value <= 100:
    num = float(input("请输入一个数:"))
    count += 1
    value += num
print(count)

 ⑵、随机生成一个5-10之间的整数,请问随机多少次,数字的累加和可以大于100。

count = 0
value = 0
while value <= 100:
    num = random.randint(5, 10)
    print(num)
    count += 1
    value += num
print(f"共需要{count}次")

⑶、使用while循环9*9乘法表。

i = 1
while i <= 9:
    j = 1
    while j <= i:
        print(f"{j}*{i}={j*i}", end="\t")
        j += 1
    i += 1
    print()

⑷、漏斗

# 漏斗
i = 0
while i < 9:
    j = 0
    while j < 9:
        if i >= j and i + j >= 8 or i <= j and i + j <= 8:
            print(" * ", end=" ")
        else:
            print("   ", end=" ")
        j += 1
    print()
    i += 1

⑸、用while判断一个数是否是质数。

m = int(input("请输入一个数"))
flag = True
n = 2
while n < m:
    if m % n == 0:
        flag = False
        print(f"{m}不为质数")
        break
    n += 1
if flag:
    print(f"{m}为质数")

六、while循环嵌套

1、实例

⑴、1000以内最大的10个质数 使用while。

count = 0
i = 1000
while i <= 1000:        # 或者 i>1
    j = 2
    while j in range(2, i):     # 或者 while j < i:
        if i % j == 0:
            break
        j += 1
    else:
        count += 1
        print(i)
        if count == 10:
            break
    i -= 1
# 结果
# 997
# 991
# 983
# 977
# 971
# 967
# 953
# 947
# 941
# 937

⑵、用while判断1000以内质数的个数 。

i = 2
count = 0
while i <= 1000:
    flag = True
    n = 2
    while n < i:
        if i % n == 0:
            flag = False
            break
        n += 1
    if flag:
        count += 1
        print(f"{i}为质数")
    i += 1
print(f"1000以内的质数个数为{count}个")

七、for与while都可以使用else

 1、for与while使用else的规则

  • for中执行break,不会执行else
  • for 中有continue,还执行else
  • 即for中执行完才会执行else

 2、实例

⑴、输入一个数判断其是否为质数。
# 方法一
value = int(input("请输入一个数:"))
flag = True
i = 2
while i < value:
    i += 1
    if value % i == 0:
        flag = False
        print(f"{value}不是质数")
        break
if flag:
    print(f"{value}是质数")

# 方法二
value = int(input("请输入一个数:"))
i = 2
while i < value:
    if value % i == 0:
        print(f"{value}不是质数")
        break
    i += 1
else:
    print(f"{value}是质数")

# 方法三
value = int(input("请输入一个数:"))
for i in range(2, value):
    if value % i == 0:
        print(f"{value}不是质数")
        break
else:
    print(f"{value}是质数")
⑵、1000以内最大的10个质数 使用while 。
count = 0
i = 1000
while i <= 1000:        # 或者 i>1
    j = 2
    while j in range(2, i):     # 或者 while j < i:
        if i % j == 0:
            break
        j += 1
    else:
        count += 1
        print(i)
        if count == 10:
            break
    i -= 1
# 结果
# 997
# 991
# 983
# 977
# 971
# 967
# 953
# 947
# 941
# 937
⑶、1000以内从小到大的是个质数。
count = 0
for i in range(2, 1001):
    for j in range(2, i):
        if i % j == 0:
            break
    else:
        print(i)
        count += 1
        if count == 10:
            break

 

你可能感兴趣的:(python,开发语言)