循环结构-for
import random
# 其他语言中的for循环:
# for (int i = 0; i < 100 ; i ++ ){
#
# }
# range(start, stop, step):产生一个整数范围的序列/一个指定范围的整数序列
# start: 开始值
# stop:结束值
# step:步长
# 左闭右开[start, stop)
range(5) # 只写一个参数时,默认是结束值,开始值默认为0
range(0, 5) # 两种写法是一样的
print(list(range(5))) # [0, 1, 2, 3, 4]
print(list(range(0, 5))) # [0, 1, 2, 3, 4]
print(list(range(3, 6))) # [3, 4, 5]
print(list(range(2, 10, 2))) # [2, 4, 6, 8]
print(list(range(10, 2))) # [] 不写步长的时候没有意义
# print(list(range(7, 2, -1))) # [7, 6, 5, 4, 3]
# print(list(range(10, 2, -1))) # 但是步长为负数的时候 得到倒序的列表 [10, 9, 8, 7, 6, 5, 4, 3]
# print(list(range(7, 2, -2))) # [7, 5, 3]
print(list(range(1, 101))) # 打印 1-100
print(sum(list(range(1, 101)))) # 5050 求和
# for循环
# 1.遍历 range
# 2.循环遍历列表(元组。字符串。字典。集合)
# 需求:使用for循环打印 1-10
for i in range(1, 11): # in 之后必须是可迭代对象,不能是单个数字/单个字符串等等
print('i', i)
# 需求 :使用for循环打印 1-10 之间的每一个奇数
for i2 in range(1, 11, 2):
print('i2', i2)
# 需求 :使用for循环打印 10-1 之间的每一个数
for i3 in range(10, 0, -1):
print('i3', i3)
# 遍历列表 今后使用会非常频繁
# 列表
ages = [10, 20, 30]
# 索引,下标
print(ages[0]) # 10
print(ages[1]) # 20
print(ages[2]) # 30
# print(ages[3]) # 报错 值超出范围
print(ages[-1]) # 倒数第一个数 30
# len() 取列表的长度,即列表的个数
print(len(ages)) # 3
# 遍历列表
nums = [10, 20, 30, 40]
# 得到元素
for n in nums:
print(n) # 得到的是列表中的各个元素
# 得到索引
# for i in range(4): # [0,1,2,3]
# print(i, nums[i])
for i in range(len(nums)): # [0,1,2,3] 使用时用长度的写法更贴合实际
print(i, nums[i])
print('-' * 100)
# 枚举 同时得到 索引、元素
for i, n in enumerate(nums):
print(i, n)
print('-' * 100)
# 练习:for 循环遍历 1-10 ,打印每个数的平方
for i in range(1, 11):
print(i ** 2) # print(i * i)
# 练习:打印以下图形
'''
*****
*****
*****
*****
*****
'''
for i in range(5):
print('*****')
# 练习:打印以下图形
'''
*
**
***
****
*****
'''
for i in range(1, 6):
print('*' * i)
for i in range(5):
print('*' * (i + 1))
''' 基础题 使用for 循环 '''
# 1.求1-100之间可以被7整除的数的个数
c = 0
for i in range(1, 101):
if i % 7 == 0:
c += 1
print(c)
# 参考答案一样
# 2.计算从1到100以内所有奇数的和。
s = 0
for i in range(1, 101):
if i % 2 != 0:
s += i
print(s)
# 参考答案
# s = 0
# for i in range(1, 101, 2):
# s += i
# print(s)
# 3.计算从1到100以内所有能被3或者17整除的数的和。
s = 0
for i in range(1, 101):
if i % 3 == 0 or i % 17 == 0:
s += i
print(s)
# 参考答案一样
# 4.计算1到100以内能被7或者3整除但不能同时被这两者整除的数的个数。
c = 0
for i in range(1, 101):
if (i % 3 == 0 or i % 7 == 0) and i % 21 != 0:
c += 1
print(c)
# 参考答案一样
# 5.计算1到500以内能被7整除但不是偶数的数的个数。
c = 0
for i in range(1, 501):
if i % 7 == 0 and i % 2 != 0:
c += 1
print(c)
# 参考答案一样
# 参考答案2
c = 0
for i in range(1, 501, 2):
if i % 7 == 0:
c += 1
print(c)
# 6.计算8的阶乘,要求用for循环
# 8的阶乘: 1*2*3*4*5*6*7*8
s = 1
for i in range(1, 9):
s *= i
print(s)
# 参考答案一样
# 7.有一个寺庙,寺庙中有一个老和尚和一个小和尚,老和尚让小和尚去下山挑水,一次只能挑5L水
# 寺庙中的水缸是50L的,问小和尚要挑几次才可以装满水缸,要求用for循环计算
c = 0
for i in range(0, 50, 5):
c += 1
print(c)
# 参考答案一样
''' 进阶题 for 循环 '''
# 1.从键盘输入一个数n,判断是不是一个质数(质数是只能被1和它自身整除的数)
n = int(input('请输入n:'))
c = 0
for i in range(2, n):
if n % i == 0:
c += 1
if c > 0:
print(n, '不是质数')
else:
print(n, '是质数')
# 2.求1000以内的水仙花数(100-999):水仙花数:一个三位数各个位上的立方之和,等于本身。
for i in range(100, 1000):
if (i // 100) ** 3 + (i // 10 % 10) ** 3 + (i % 10) ** 3 == i:
print(i)
# 3.求2~100之内的所有素数。【素数:只能被1或本身整除的数】
for i in range(2, 101):
c = 0
for j in range(2, i):
if i % j == 0:
c += 1
if c == 0:
print(i)
# 4.优化猜数字游戏
# 计算机出一个1~100之间的随机数由人来猜 random.randint(1, 100)
# 计算机根据人猜的(输入)数字分别给出提示: 大一点 / 小一点 / 猜对了,
# 这个过程可以循环进行,当进行5次以上还猜不对的话,则打印:智商余额不足,并退出
# 如果猜对了,则也退出
n = random.randint(1, 100)
for i in range(5):
m = int(input('请输入数字m:'))
if n > m:
print('大一点')
elif n < m:
print('小一点')
else:
print('猜对了')
break
print('智商余额不足')
'''
注意:
for循环:一般用于已知循环次数
while循环:一般用于未知循环次数,或 死循环
如果要写死循环不要用for循环,for 的右边要写东西,要么写range() 要么列表 要么元素等,这些都是有范围的
假设一张纸的厚度是 0.01mm(毫米),对折多少次达到珠穆朗玛峰的高度 8848米,即求循环次数
这个题目不是等差的,是等比,不知道步长,未知循环次数,只能用while
'''
# 参考答案
# 未知循环次数
c = 0
i = 0.01
while i < 8848 * 1000:
c += 1
i *= 2
# print('i', i) # 呈指数级增长
print(c)