2022.3.31
range函数
range的用法 注意:3.x之后前面得加一个list(range())要不无法输出
range(stop): 0~stop-1
range(start,stop): start~stop-1
range(start,stop,step): start~stop step(步长)

for 循环
for 循环使用的语法:(for循环可以加else语句,else语句后跟循环结束需要执行的代码,)
break 语句可以用于跳出循环,可以用在 for 循环、while 循环、switch 循环中。当我们在一个循环中使用了break 语句,则会中断循环,但是仍会继续执行循环之后的代码。
if 条件判断也能用break
for 变量 in range(10):
循环需要执行的代码
else:
循环结束时,需要执行的代码

练习:
例子1.分别求1~100内偶数之和

#利用for循环求1~100内偶数之和
sum = 0
for i in range(0,101,2):#取偶数操作由步长为2的数列操作完成sum = sum+iprint(sum)#for循环内输出会将每个结果都打印出来
print(sum)#for循环之外输入只输出最终结果
一定仔细思考print在不同位置时的输出
0
2
6
12
20
30
42
...
2256
2352
2450
25502550

例子2:求阶乘即n!
(本例亦可使用递归函数完成)

def jiecheng(s):s = int(s)if s == 1 or s == 0:return 1else:return (s*jiecheng(s-1))

for循环的嵌套
例子3. 有1,2,3,4四个数字,求这四个数字能生成多少个互不相同且无重复数字的三位数

sum = 0
for i in (1,2,3,4):for j in (1,2,3,4):for k in (1,2,3,4):if i != j and j!= k and i != k: sum += 1
print('共有%d种组合' %sum)

例子4. 有1,2,3,4四个数字,求这四个数字能生成多少个互不相同且无重复数字的三位数,并展示出来

for x in range(1,5):for y in range(1,5):for z in range(1,5):if (x!=y) and (y!=z) and (z!=x):print("%d%d%d" % (x, y, z))

实现命令行提示符
break:跳出整个循环,不会再执行循环后续的内容
continue:跳出本次循环,continue后面的代码不再执行,但是还是会继续循环
exit():结束程序的运行
例子5. 打印99乘法表

for i in range(1,10):for j in range(1,i+1):print('%d * %d = %d\t' %(i,j,i*j),end='')#\t制表符,自动对齐后面的东西 end=‘’表示将输出 如果end='\n'则表示换行print()#表示执行完之前的print后换行

print函数的用法

注意理解此代码中while的嵌套 嵌套时代码的退格操作
temp = input('请输入一个整数:')
number = int(temp)
while number:i = number - 1while i:print('+', end='')i = i - 1j = numberwhile j:print('*', end='')j = j - 1#print()#不加print()函数,则所有输出为一行number = number - 1不加print()时的输出 ++***+***加print()的输出 ++***+***

例子6:用户登录管理系统,如下三点要求
1.输入用户名和密码;
2.判断用户名和密码是否正确(name=‘root’,passwd=‘westos’)
3.登录仅有三次机会,超过3次会报错

注意理解此代码中for循环与else语句的使用
for i in range(1,4):#先用for循环限定登录次数user = input('请输入用户名:')password = input('请输入密码:')if user == 'root' or password == 'huahua':print('%s登录成功!'%user)breakelse:#循环内的if else语句需要对齐print('用户名或密码输入错误,请重新输入!',end='')#使两条print的语句输出为一行print('您还有%d次机会'%(3-i))
else:#当循环内的所有代码(包括所有的if else语句)执行完之后,输出print之后的语句print('错误次数已超过三次,登录失败')#else的空格与for对齐

例子7:求最大公约数和最小公倍数,如下三点要求
输入两个数值:
求两个数的最大公约数和最小公倍数
最小公倍数=(num1 * num2) / 最大公约数

# 输入两个数字
num1=int(input('Num1:'))
num2=int(input('Num2:'))
# 找出两个数中的较小者
min_num = min(num1,num2)
# 确定最大公约数
# 思考该函数怎么能找出最大公约数
for i in range(1,min_num+1):    if num1 % i ==0 and num2 % i ==0:        max_commer = i
# 求最小公倍数
min_commer =int(num1 * num2)/max_commer
print('%s 和 %s 的最大公约数为%s' %(num1,num2,max_commer))
print('%s 和 %s 的最小公倍数为%s' %(num1,num2,min_commer))

例子7的发散:
求两个数的所有公约数,并输出最大、最小公约数

#求两个数的所有公约数,输出所有公约数并单独输入最大公约数
num1 = int(input('请输入一个整数:'))
num2 = int(input('请输入一个整数:'))
min_num = min(num1,num2)
L = []
for i in range(1,min_num+1):#L = []#L定义在循环内时,每次循环会对列表进行重新赋值,导致输出只输出一个数if num1 % i == 0 and num2 % i ==0:#L = []L.append(i)#print(i)#L.append(i)#print(L)#print(id(L))#print(L)#在此加print函数会导致每次循环结束后都进行输出,
else:#与for循环相同的位格上写else函数,执行for循环结束后的结果print(L)L.sort()print(L[0],L[-1])
#这两种代码输出结果是一样的
print(L)
L.sort()
#L = L.sort()#对列表排序直接使用L.sort()即可,不能使用诸如L = L.sort的语句
print(L[0],L[-1])

二、while循环
循环的作用就是让指定的代码重复的执行,while 循环最常用的应用场景就是让执行的代码按照指定的次数重复执行

while 条件():    条件满足时,做的事情1    条件满足时,做的事情2......

1、基本用法
注意:一定要注意循环内的退格用法

# 定义一个整数变量,记录循环的次数
i=1
# 开始循环
while i <= 3:
# 希望循环内执行的代码    print('hello python')    # 处理计数器i+=1

死循环的例子:

while True:print('hello python')#会一直循环输出

例子1:3、求1~100之间数字的和

#求1~100之间数字的和
i = 1
sum = 0
while i <= 100:sum = sum+ii = i+1#print(sum)#注意print的位置
print(sum)

例子1发散:求100内所有偶数的和

#发散 while循环求1-100内所有偶数的和
i = 1
sum = 0
while i <= 100:if i % 2 == 0:sum = sum + ii = i+1#注意i = i+1这个式子是与if语句同位格的
print(sum)

例子2:用户登录管理

i = 0
while i <= 3:user = input('请输入用户名:')password = input('请输入密码:')if user == 'root' and password == 'huahua':print('%s登录成功!' %user)breakelse:print('用户名或密码输入错误,请重新输入!',end='')print('您还有%d次机会' %(3-i))i = i+1

while 循环嵌套
while 里面还有 while
例子1:如下要求
1.在控制台连续输出五行*,每一行星号的数量依次递增
2.完成 5 行内容的简单输出 分析每行内部的*应该如何处理
输出
*
**




解决方法1:for循环

# 1.控制行for i in range(6):# 2.控制*的数量for j in range(6):if i > j :print("*",end='')print(" ")

解决方法2:for循环

for i in range(1,6):for j in range(1,i+1):print('*',end='')print()

解决方法3:while循环

#样式三:
row = 1
while row <= 5:      ##行循环5次,即外层的总循环次数col = 1a = 1            ###控制空格的输出次数while a <= 5-row:   ###空格的输出条件print(' ',end='')    ##输出空格a += 1while col <= row:    ###*的输出条件print('*',end='')col += 1print('')         ###行每循环一次使下一次的循环输出换行显示row += 1

解决方法4:while循环

i = 1
while i <= 5:j = 1while j <= i:print('*',end='')#print('*')j = j+1#print()print('')#输出空,将每一行隔开#在i=1,j=1(即在每一个i输出完之后,均添加空行)时,输出完所有*之后,再输出空,隔开行。i = i + 1

例子1发散:如果想要星星倒过来呢
解决方法1:for循环

# 1.控制行
for i in range(6):# 2.控制*的数量for j in range(6):if i < j :print("*",end='')print(" ")

解决方法2:while循环

i = 1
while i <= 5:j = 1while j < i:print(" ",end='')j += 1while j >= i and j <= 5:print("*",end='')j += 1print()i += 1

解决方法3:while循环

i = 1
while i <= 5:j = 5while j >= i:print('*',end='')j = j-1print('')i = i+1

例子2: 输出倒三角

i = 1
while i <= 9:while i <= 5:j = 1while j <= i:print('*',end='')j = j+1print('')i = i +1while 5 < i <= 9:j = 10while j > i:print('*', end='')j = j-1print('')i = i + 1

例子2推广:用*输出一个棱形

row = 1
while row <= 9:col = 1star = 1# 先计算前五行的if row <= 5:while col <= (5 - row):print(" ", end="")col += 1while star <= row * 2 - 1:print("*", end="")star += 1# 计算的后四行的else:while col <= (row - 5):print(" ", end="")col += 1while star <= 19 - row * 2:print("*", end="")star += 1print("")row += 1

例子3:猜数字游戏
猜数字游戏:
1.系统随机生成一个1~100的数字;
2.用户共有5次机会猜;
3.如果用户猜测数字大于系统给出的数字,打印"too big"
4.如果用户猜测数字小于系统给出的数字,打印"too small"
5.如果用户猜测的数字等于系统给出的数字,打印"恭喜中奖",并退出循环

import randomnum = random.randint(1,100)
print(num)i = 1
while i <= 5:ans = int(input("请猜数:"))if ans > num:print("too big,还剩%d次机会"%(5-i))elif ans < num:print("too small,还剩%d次机会"%(5-i))else:print("恭喜中奖!!!")breaki += 1

while和for的进阶案例 while for嵌套使用
例子1、 求 1+2!+3!+…+20! 的和。
解决方法1:while循环嵌套

i = 1
sum = 0
while i <= 20:sum1 = 1j = 1while j <= i:sum1 = sum1*jj = j+1i = i+1sum = sum+sum1#print(sum) 这里会把每一步的输出都给输出出来
print(sum)

解决方法2 :for循环嵌套

for x in range(1, 21):sum1 = 1for j in range(1, x + 1):sum1 = sum1 * jj = j + 1sum = sum + sum1
# i = i+1
print(sum)

例子2:本金10000元存入银行,年利率是千分之三。每过1年,将本金和利息相加作为新的本金。计算5年后,获得的本金是多少?

#while循环
i = 1
t = 10000
x = 0.003
while i <= 5:t = t*x+ti = i+1
print(t)
#for循环
t = 10000
x = 0.003
for i in range(1,6):t = t+t*x#注意此时for循环只用来判定次数用
print(t)
#递归函数

例子3、题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各个位上数字的立方和等于该数本身。例如:153是一个”水仙花数",因为153=1的三次方+5的三次方+3的三次方。
解决方法1:for循环

for s in range(100,1000):s = str(s)s1 = int(s[0])s2 = int(s[1])s3 = int(s[2])x = str(s1**3+s2**3+s3**3)if x == s:print(x)for s in range(100,1000):if ((s//100)**3)+(((s%100)//10)**3)+((s%10)**3) == s:print(s)

解决方法2:while循环

s = 100
while s < 1000:if ((s//100)**3)+(((s%100)//10)**3)+((s%10)**3) == s:print(s)s = s+1

例子4:设计“过7游戏”的程序, 打印出1-100之间除了含7和7的倍数之外的所有数字
解决方法1:while循环

m = 1
while m <= 100:if m%7 != 0:if m//10 != 7:if m%10 != 7:print(m)m = m + 1

解决方法2 :while循环

 i = 0while i <= 99:i += 1if i % 7 == 0 or i % 10 == 7 or i // 10 == 7:continue#while中continue语句的运用else:print(i)

解决方法3:for循环

for i in range(1, 101):if i % 7 == 0 or i % 10 == 7 or i // 10 == 7:continueprint(i)

例子5:使用while、if来完成剪刀石头布程序,要求,当玩家第3次获胜时才退出游戏,否则继续玩。
解决方法1:while循环(用while来限定循环次数)

import random
i = 1#用while循环记录赢的次数
while i <= 3:player = int(input('请出招(石头0,剪刀1,布2):'))computer = random.randint(0, 2)if (player == 2 and computer == 0) or (player == 0 and computer == 1) or (player == 1 or computer == 2):i = i+1print('你赢啦,再来!')#print(i)#可以打印出i来观察每次赢之后i值有没有增加#i = i+1#如果将此式子写在此处,代表着判定条件的结束,无法进行下面的判定,注意体会elif player == computer:print('平局啦,再来!')else:print('你输啦,再来!')
print('你赢了三次啦,结束!')

解决方法2:while循环(用if语句来判定赢的次数是否到达3次)

win_times = 0
while True:player = int(input("请输入:剪刀(0) 石头(1) 布(2)"))computer = random.randint(0, 2)if (player == 0 and computer == 2) or (player == 1 and computer == 0) or (player == 2 and computer == 1):win_times += 1if win_times == 3:print("你赢了三次了")breakelse:print("你赢了这局游戏")elif player == computer:print("平局,再来一次")else:print("你输了,不要走,决战到天亮")

例子6:7、幸运猜猜猜:游戏随机给出一个0~99(包括0和99)的数字,然后让你猜是什么数字。
你可以随便猜一个数字,游戏会提示太大还是太小,从而缩小结果范围。
经过几次猜测与提示后,最终推出答案。在游戏过程中,记录你最终猜对时所需要的次数,
游戏结束后公布结果。
说明:
1~2次猜中,打印你太TM有才了!
3~6次猜中,打印这么快就猜出来了,很聪明嘛!
大于7次猜中,打印猜了半天才猜出来,小同志,尚需努力啊!
猜测次数最多20次。
解决方法:while循环(自己写的)

import random
i = 0
computer = random.randint(0, 99)
while True:player = int(input('请输入你猜的数字:'))#computer = random.randint(0, 99)#随机生成一定要在循环外,否则每次都会随机生成if i <= 20:if player == computer:if i <= 2:print('你真厉害')breakelif 3 <= i <= 6:print('你真聪明')breakelif 7 <= i <= 20:print('再努努力吧')breakelif player > computer:i = i + 1print('太大,再猜')else:i = i + 1print('太小,再猜')else:print('最多只能猜20次哦')break
#else:
print('你一共猜了%d次'%i,end='')
print(',正确数字是%s'%(computer))

解决方法2:while循环

import randomnum = random.randint(0, 99)
print(num)
times = 0while times <= 20:ges = int(input("请输入你猜的数字: "))if ges > num:print("你猜的数太大了")times += 1if times == 20:print("你都猜了20次了,还没猜中")breakcontinueelif ges < num:print("你猜的数字太小了")times += 1if times == 20:print("你都猜了20次了,还没猜中")breakcontinueelse:if 1 <= times <= 2:print("有才")elif 3 <= times <= 6:print("还可以")else:print("需要努力")print(num)

for while循环练习相关推荐

  1. 中兴面试总结,华为。技术,市场

    1,软件测试,如何把这个测试做的更好. 进到一个新项目,作为测试人员应该都是想把测试做好,项目在符合客户质量要求的情况下按时交付的吧.但往往都事与愿违,造成这个结果的原因有很多很多.通过这段时间做自动 ...

  2. Linux shell 学习笔记(9)— 循环语句(for、while)以及更改字段分隔符

    1. for 语句 bash shell 中 for 命令的基本格式如以下,$var 变量包含着这次迭代对应的当前列表项中的值. for var in list docommands done 也可以 ...

  3. 【机器学习】RNN循环神经网络

    循环神经网络归属: 领域:机器学习 方向:自然语言处理 贡献:自动文本生成 循环神经网络实际应用: 生活中因为原始数据都是序列化的,比如自然语言,语音处理,时间序列问题(股票价格)等问题, 这个时候需 ...

  4. MindSpore循环神经网络

    MindSpore循环神经网络 一. 神经网络的组成 神经元模型:首先简单的了解以下构成神经网络的最基础单元:神经元.每个神经元与其它神经元相连,处于激活状态时,就会向相连的神经元发送相应信号.从而改 ...

  5. 循环IRNNv2Layer实现

    循环IRNNv2Layer实现 IRNNv2Layer实现循环层,例如循环神经网络(RNN),门控循环单元(GRU)和长期短期记忆(LSTM).支持的类型为RNN,GRU和LSTM.它执行循环操作,该 ...

  6. CodeGen按钮循环

    CodeGen按钮循环 按钮循环是一个模板文件构造,它允许您迭代CodeGen拥有的按钮信息集合. 在按钮循环中处理的按钮的定义可以来自两个位置之一. 如果基于UI工具箱输入窗口定义进行处理,则默认情 ...

  7. CodeGen标记循环

    CodeGen标记循环 标记循环是一个模板文件构造,它允许您迭代CodeGen拥有的标记信息的集合.为了使用标记循环,必须基于至少定义了一个字段标记的存储库结构生成代码. 标记循环由一对匹配的< ...

  8. CodeGen结构循环回路

    CodeGen结构循环回路 structure循环是一个模板文件构造,它允许您迭代CodeGen拥有的有关结构的集合.为了使用结构循环,必须同时基于多个存储库结构生成代码. CodeGen可以通过以下 ...

  9. CodeGen融合核心关系循环扩展

    CodeGen融合核心关系循环扩展 Expansion Tokens <HARMONYCORE_RELATION_NAME> 插入当前关系的名称.关系名称将自动生成,但可以由Harmony ...

  10. CodeGen字段循环Field Loop

    CodeGen字段循环Field Loop 字段循环是一个模板文件构造,它允许迭代CodeGen拥有的有关字段的集合.这些字段定义可以来自以下两个位置之一: •如果基于从存储库结构中获取的信息生成代码 ...

最新文章

  1. 云安全能否给企业带来真正的安全?
  2. 敏捷 - #9 原则:持续关注卓越的技术和良好的设计 ( #9 Agile - Principle)
  3. 三十四、深入Vue.js语法(中篇)
  4. MRC522(1):卡片ID号的读写
  5. 大龄程序员怎样渡过中年危机?很多思考,挺有意思的。
  6. flexsim怎么设置传送带方向_Flexsim仿真教程学习(六)-分拣系统
  7. 2005年linux手机系统,2005年智能手机点评之其他操作系统篇
  8. Oracle数据库基础练习(一):Oracle数据库查询操作练习81题
  9. android icon换不掉图标文件夹,看烦了 Windows 原生文件夹图标?收下这套最全的更换图标教程...
  10. CSS常用背景属性(背景颜色、背景图片、背景平铺、背景位置、背景附着、背景色半透明、背景属性复合写法)
  11. Linux指令--let
  12. 转载:深入学习java源码之Callable.call()与Future.get()
  13. ‘kaggle视频游戏销售数据的可视化和分析‘项目实现
  14. lin卡pci linux驱动下载,万能PCI串口卡驱动
  15. Android-高质量开发之崩溃优化,赶紧学起来
  16. java计算机毕业设计中学后勤设备保修维护管理系统源码+mysql数据库+系统+部署+lw文档
  17. RHEL7软件包的管理
  18. 2022/6/28学习日志
  19. linux kernel iio 架构
  20. 怎么写 literature review(文献综述)?

热门文章

  1. 概率论大作业C语言验证正态分布的数学期望和方差
  2. eslint 如何关闭检查变量名规范或者大小写检查
  3. cpp调用c头文件引用方法
  4. 金山毒霸11,更新内容,问题修复了什么?
  5. javascript的apply理解
  6. AutoPatch java_Java Beta.canAutoPatch方法代码示例
  7. SpringBoot简单实现上传图片到七牛云
  8. java开源图像处理ku_我是这么设计高性能海量数(ku)据(zi)查询系统的(一)
  9. java泛型中T和?和有什么区别
  10. 08. Web大前端时代之:HTML5+CSS3入门系列 ~ QQ空间时间轴