鱼C论坛

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

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

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

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

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

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

初学python,请问for循环这块代码,为什么不加
else:
    temp = True
第一次接收用户输入不在str1,之后不论输入什么都会执行
if temp == False:
print('请输入评分等级:', end='')
temp = True
str1 = 'ABCDF '

while True:

    grade = input()
    length1 = len(grade)

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

    else:
        
        for each in grade:
            if each not in str1:
                temp = False
            
       if temp == False:
            print('您的输入有误,请重新输入:', end='')

        else:
            
            space = grade.replace(' ','')
            length2 = len(space)
            str2 = ' '.join(space)

            if grade == str2:
                
                num = grade.count('A')
                score = num / length2
                result = round(score,2)
                
                print(result)
                break
            
            else:
                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()函数接受用户输入的信息
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-13 21:05:09 | 显示全部楼层
题目是啥
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

while True:        #构建死循环

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

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

    else:           #否则执行下面的语句
        
        for each in grade:         #每次循环,依次从grade序列(这里就是用户输入的字符串)取出1个元素,赋值给each,并执行循环语句代码
            if each not in str1:   #如果单个字符,没在'ABCDF '中
                temp = False      #则把False赋值给temp         #此处不需要加else,不需要否则的语句(一般for in循环用else语句的情况是,循环执行时有跳出循环语句,如果跳出循环语句并未满足条件,循环完了,再进入else语句,跳出了循环则不进入else语句),因为执行完循环,就自动执行后面的语句了
            
       if temp == False:      #这里不需要解释了吧?只要有1个字符没在你定义的str1内,通过上面的for in 循环temp就为False了,就进入了这个语句
            print('您的输入有误,请重新输入:', end='')
 
        else:      #经过检查,用户输入的字符串都包含在str1的成员内,就运行下面
            
            space = grade.replace(' ','')   #字符串替换的方法,把空格给替换成空
            length2 = len(space)      #获取字符串长度
            str2 = ' '.join(space)    #字符串join方法,自己去查资料吧,实在是懒得写注释了

            if grade == str2:
                
                num = grade.count('A')
                score = num / length2
                result = round(score,2)
                
                print(result)
                break         #这个break其实无意义,if语句如果符合条件,运行完print(result)自然就跳过了else
            
            else:
                print('您的输入格式有误,请重新输入:', end='')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-11-13 21:24:40 | 显示全部楼层
if...else 循环不是你这样用的吧,你自己再仔细检查下!
想知道小甲鱼最近在做啥?请访问 -> 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()函数接受用户输入的信息
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

break那里是跳出while循环
想知道小甲鱼最近在做啥?请访问 -> 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:
str1 = 'ABCDF '
grade = input('请输入评分等级:')

if all (each in str1 for each in grade):
      temp = True
else:
      temp = False
if all (each in str1 for each in grade):
再问一下,这行代码应该如何展开呢?
想知道小甲鱼最近在做啥?请访问 -> 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。(可自行百度)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-17 21:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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