求助关于python 的for循环
本帖最后由 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='') 题目是啥 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='') if...else 循环不是你这样用的吧,你自己再仔细检查下! ======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()函数接受用户输入的信息
笨鸟学飞 发表于 2020-11-13 21:22
break那里是跳出while循环 笨鸟学飞 发表于 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):
再问一下,这行代码应该如何展开呢? 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。(可自行百度)
页:
[1]