鱼C论坛

 找回密码
 立即注册
查看: 2203|回复: 7

[已解决]求助关于python 的for循环

[复制链接]
发表于 2020-11-13 20:39:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Darker.R 于 2020-11-13 21:02 编辑

初学python,请问for循环这块代码,为什么不加
  1. else:
  2.     temp = True
复制代码
第一次接收用户输入不在str1,之后不论输入什么都会执行
  1. if temp == False:
复制代码

  1. print('请输入评分等级:', end='')
  2. temp = True
  3. str1 = 'ABCDF '

  4. while True:

  5.     grade = input()
  6.     length1 = len(grade)

  7.     if grade.isspace() or length1 == 0:
  8.         print('您的输入为空(或空格),请重新输入:', end='')

  9.     else:
  10.         
  11.         for each in grade:
  12.             if each not in str1:
  13.                 temp = False
  14.             
  15.        if temp == False:
  16.             print('您的输入有误,请重新输入:', end='')

  17.         else:
  18.             
  19.             space = grade.replace(' ','')
  20.             length2 = len(space)
  21.             str2 = ' '.join(space)

  22.             if grade == str2:
  23.                
  24.                 num = grade.count('A')
  25.                 score = num / length2
  26.                 result = round(score,2)
  27.                
  28.                 print(result)
  29.                 break
  30.             
  31.             else:
  32.                 print('您的输入格式有误,请重新输入:', end='')
复制代码
最佳答案
2020-11-13 21:41:38
======for in 循环加else的用法,可以看下面例子===========
for i in (0,1,2,3,4,5):
        if i >10:
                break
        else:
                pass
else:
        print('--->else')

执行结果:--->else         #没跳出循环,所以执行for in 缩进对齐的else
=======例子2=============
for i in (0,1,2,3,4,5):
        if i >1:
                break
        else:
                pass
else:
        print('--->else')
执行结果:啥也没有    #跳出了for in循环,所以不执行for in 缩进对齐的else

=============你说的第一次接收用户输入不在str1,之后不论输入什么都会执行======
原因很简单啊,你后面并没有input()函数接受用户输入的信息
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-11-13 21:05:09 | 显示全部楼层
题目是啥
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-13 21:22:51 | 显示全部楼层
  1. print('请输入评分等级:', end='')
  2. temp = True     #temp变量为布尔型,也有的编程语言称逻辑型,只有真(True)和假(False)两个值
  3. str1 = 'ABCDF '

  4. while True:        #构建死循环

  5.     grade = input()     #获取用户输入的字符串,并赋值给grade
  6.     length1 = len(grade)  #获取grade变量的长度,也就是用户输入的字符串有几个字符,并赋值给length1

  7.     if grade.isspace() or length1 == 0:         #如果用户输入的字符串里都是空格,或者字符串长度为0
  8.         print('您的输入为空(或空格),请重新输入:', end='')   

  9.     else:           #否则执行下面的语句
  10.         
  11.         for each in grade:         #每次循环,依次从grade序列(这里就是用户输入的字符串)取出1个元素,赋值给each,并执行循环语句代码
  12.             if each not in str1:   #如果单个字符,没在'ABCDF '中
  13.                 temp = False      #则把False赋值给temp         #此处不需要加else,不需要否则的语句(一般for in循环用else语句的情况是,循环执行时有跳出循环语句,如果跳出循环语句并未满足条件,循环完了,再进入else语句,跳出了循环则不进入else语句),因为执行完循环,就自动执行后面的语句了
  14.             
  15.        if temp == False:      #这里不需要解释了吧?只要有1个字符没在你定义的str1内,通过上面的for in 循环temp就为False了,就进入了这个语句
  16.             print('您的输入有误,请重新输入:', end='')

  17.         else:      #经过检查,用户输入的字符串都包含在str1的成员内,就运行下面
  18.             
  19.             space = grade.replace(' ','')   #字符串替换的方法,把空格给替换成空
  20.             length2 = len(space)      #获取字符串长度
  21.             str2 = ' '.join(space)    #字符串join方法,自己去查资料吧,实在是懒得写注释了

  22.             if grade == str2:
  23.                
  24.                 num = grade.count('A')
  25.                 score = num / length2
  26.                 result = round(score,2)
  27.                
  28.                 print(result)
  29.                 break         #这个break其实无意义,if语句如果符合条件,运行完print(result)自然就跳过了else
  30.             
  31.             else:
  32.                 print('您的输入格式有误,请重新输入:', end='')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-11-13 21:24:40 | 显示全部楼层
if...else 循环不是你这样用的吧,你自己再仔细检查下!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-13 21:41:38 | 显示全部楼层    本楼为最佳答案   
======for in 循环加else的用法,可以看下面例子===========
for i in (0,1,2,3,4,5):
        if i >10:
                break
        else:
                pass
else:
        print('--->else')

执行结果:--->else         #没跳出循环,所以执行for in 缩进对齐的else
=======例子2=============
for i in (0,1,2,3,4,5):
        if i >1:
                break
        else:
                pass
else:
        print('--->else')
执行结果:啥也没有    #跳出了for in循环,所以不执行for in 缩进对齐的else

=============你说的第一次接收用户输入不在str1,之后不论输入什么都会执行======
原因很简单啊,你后面并没有input()函数接受用户输入的信息
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-14 10:33:40 | 显示全部楼层

break那里是跳出while循环
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-14 12:05:12 | 显示全部楼层
笨鸟学飞 发表于 2020-11-13 21:41
======for in 循环加else的用法,可以看下面例子===========
for i in (0,1,2,3,4,5):
        if i >10:
  1. str1 = 'ABCDF '
  2. grade = input('请输入评分等级:')

  3. if all (each in str1 for each in grade):
  4.       temp = True
  5. else:
  6.       temp = False
复制代码
  1. if all (each in str1 for each in grade):
复制代码

再问一下,这行代码应该如何展开呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-14 22:07:37 | 显示全部楼层
Darker.R 发表于 2020-11-14 12:05
再问一下,这行代码应该如何展开呢?

这是列表推导式啊
====(each in str1 for each in grade)====等价于
temp = []
for each in grade:
        if each in str1:
                temp.append(True)
        else:
                temp.append(False)
====all(each in str1 for each in grade)====等价于
all(temp)  #all() 函数用于判断给定的可迭代参数 iterable 中的所有元素是否都为 TRUE,如果是返回 True,否则返回 False。(可自行百度)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-29 13:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表