第020讲课后作业,似乎没有进入while循环
题目是找字符串中的密码a) 每位密码为单个小写字母
b) 每位密码的左右两边均有且只有三个大写字母
以下是我写的代码,注释是思路,不知道错在哪里,运行后没有输出
str1 = '''ABSaDKSbRIHcRHGcdDIF'''
a = len(str1)
c1 = 0
c2 = 0
temp = []
for i in range(a):
#找开始的3个大写字母
if str1.isupper() == 1:
#找到第一个大写字母时,进入while循环计数
while str1.isupper == 1:
c1 +=1
i += 1
else:
break
#如果大写字母刚好有3个,就判断下一个字符是不是小写字母
if c1 == 3:
i = i+1
#如果是小写字母,就将小写字母写入一个列表temp
if str1.islower() == 1:
while str1.islower() == 1:
temp.append(str1)
i +=1
#当不是小写字母时,跳出循环
else:
break
#当temp不为空时,判断下一个字符是不是大写字母
if len(temp) > 0:
i = i+1
#下一个字符是大写字母时,判断是不是刚好3个大写字母
if str1.isupper() == 1:
while str1.isupper == 1:
c2 +=1
i +=1
#如果刚好是三个大写字母,就输出temp;否则就清空temp
if c2 == 3:
print(str(temp))
else:
temp =[]
如果能指出我思路上的问题也非常感谢!!! for i in range(10):
#print (i)
i +=2
print(i)
print('------------')
a = 0
while a != 10:
a += 2
print(a)
以上代码输出内容:
2
3
4
5
6
7
8
9
10
11
------------
2
4
6
8
10
for 语句中你想通过增加 i 来跳过循环次数是实现不了的,只有while语句中才可以通过 i 的增加来跳过X次;
yhhpf 发表于 2020-7-7 10:46
以上代码输出内容:
2
3
你的意思我完全收到了的。所以,我只在开头用for语句,就是不想跳过循环。后面判断才用的while,通过i的增加来跳出。
我就是那种半通不通的状态,麻烦您再给我讲讲呢。
jiong_jiong 发表于 2020-7-7 10:51
你的意思我完全收到了的。所以,我只在开头用for语句,就是不想跳过循环。后面判断才用的while,通过i的 ...
我就是那种半通不通的状态,麻烦您再给我讲讲呢。讲啥呢? 永恒的蓝色梦想 发表于 2020-7-7 10:56
讲啥呢?
版主求解一下我的代码问题! jiong_jiong 发表于 2020-7-7 11:00
版主求解一下我的代码问题!
所以,我只在开头用for语句,就是不想跳过循环那么,14行的i += 1是要干什么呢? 本帖最后由 jiong_jiong 于 2020-7-7 11:21 编辑
永恒的蓝色梦想 发表于 2020-7-7 11:07
那么,14行的是要干什么呢?
我想跳到下一个字符去判断,直到不是大写字母了就跳出while循环。这里是不是错了,是不是多此一举了?
jiong_jiong 发表于 2020-7-7 10:51
你的意思我完全收到了的。所以,我只在开头用for语句,就是不想跳过循环。后面判断才用的while,通过i的 ...
str1 = '''ABSaDKSbRIHcRHGcdDIFzAAA'''
list1 = []
for i in range(len(str1)):
if not str1.isupper() and i > 2 and i < (len(str1)-3) :#如果出现小写,且位置至少在第3位与倒数第3位之间;
x = 0
while x != 4 :#左右各判断3次
x += 1
if not str1.isupper():#判断左边3位是否为小写,是则直接跳出
x = 4
break
if not str1.isupper():#判断右边3位是否为小写,是则直接跳出
x = 4
break
if x == 3 :
list1.append(str1)
print(list1)
你参考下我学习的时候改的代码吧... yhhpf 发表于 2020-7-7 11:11
你参考下我学习的时候改的代码吧...
真心好懂,你的代码!!很棒啊!!!
jiong_jiong 发表于 2020-7-7 11:15
真心好懂,你的代码!!很棒啊!!!
额,关键理解下for 和 while的区别。
顺便给个最佳吧{:9_219:} yhhpf 发表于 2020-7-7 11:21
额,关键理解下for 和 while的区别。
顺便给个最佳吧
我得找到自己的问题才行,哈哈。
我想回到我的办法上去,改正确。
12行 38 行的 isupper 都忘记加括号了
代码中两个
else:
break
你还没 for 循环遍历结束,就直接退出外面的 for 循环了
还有:
if c1 == 3:
i = i+1
这里也应该去掉 i = i + 1 ,因为你判断 大写字母时候 循环结束时候已经 i += 1 表示下一位字母的位置参数了
暂时看到这么多错误
Twilight6 发表于 2020-7-7 11:26
12行 38 行的 isupper 都忘记加括号了
代码中两个
您提到的三个地方确实都是问题,我先改一下,谢谢!!
尤其感谢 循环结束时 i 的位置这部分!! jiong_jiong 发表于 2020-7-7 11:24
我得找到自己的问题才行,哈哈。
我想回到我的办法上去,改正确。
= =你觉得在错误的思路上,能得到正确的结果么...?首先思路要正确,你的思路并没考虑循环到小写时,判断后方3位都为大写; yhhpf 发表于 2020-7-7 11:45
= =你觉得在错误的思路上,能得到正确的结果么...?首先思路要正确,你的思路并没考虑循环到小写时,判断 ...
您说得对,如果思路错了就完蛋。
我有考虑后3位的大写问题,在33行开始的。
我先判断temp是不是为空,不为空时,看下一个字符是不是大写。
如果是大写,又刚好是3位,就输出temp。不是就清空temp。 jiong_jiong 发表于 2020-7-7 11:50
您说得对,如果思路错了就完蛋。
我有考虑后3位的大写问题,在33行开始的。
那我就说你说的这思路问题,首先temp输出是否正确我不说了。
就算正确了,temp输出的应该是列表,那你对着列表有进行循环么?不循环你咋们去判断列表内每个元素的后3位???你循环的还是最外层的i。 yhhpf 发表于 2020-7-7 11:54
那我就说你说的这思路问题,首先temp输出是否正确我不说了。
就算正确了,temp输出的应该是列表,那你对 ...
真的非常感谢你的耐心
我其实能读懂课后答案,我纠结的是,我不知道自己错在哪里。
有对temp列表进行循环,在24~27行,最后输出的时候,格式化为字符串。
我感觉自己是几个循环哪里没有理解对。 jiong_jiong 发表于 2020-7-7 12:32
真的非常感谢你的耐心
我其实能读懂课后答案,我纠结的是,我不知道自己错在哪里。
帮你大致改了下代码,很多多余的地方去掉了,比如 if 判断条件和 while 循环条件相同的,都说多余的
但是问题还是很多,至少不会报错了,建议你还是看看课后答案的思路,然后再重新写一遍你原本的思路比较好:
str1 = '''ABSaDKSbRIHcRHGcdDIF'''
a = len(str1)
c1 = 0
c2 = 0
temp = ''
for i in range(a):
# 找到第一个大写字母时,进入while循环计数
while str1.isupper() == 1:
c1 += 1
i += 1
if i == a:
i -= 1
break
# 如果大写字母刚好有3个,就判断下一个字符是不是小写字母
if c1 == 3:
# 如果是小写字母,就将小写字母写入一个列表temp
if str1.islower() == 1:
temp += str1
i += 1
# 当temp不为空时,判断下一个字符是不是大写字母
if len(temp) > 0:
# 下一个字符是大写字母时,判断是不是刚好3个大写字母
if i < a and str1.isupper() == 1:
while i < a and str1.isupper() == 1:
c2 += 1
i += 1
# 如果刚好是三个大写字母,就输出temp;否则就清空temp
if c2 == 3:
print(temp,end=' ')
temp = ''
c1 = 0
c2 = 0
你代码最后 c1 和 c2 也忘记初始化了,还有我把你的列表换成字符串了,进行拼接,看上去舒服点
jiong_jiong 发表于 2020-7-7 12:32
真的非常感谢你的耐心
我其实能读懂课后答案,我纠结的是,我不知道自己错在哪里。
你24-27循环的是把列表得出来,我上面说了,你列表输出是否正确我们先不看了。
得出列表temp后,按你的思路,咋们temp现在是不是应该记录的是:‘前面是连续3个大写字母后碰到的第一个小写字母’?
那继续的思路不是应该循环这个temp列表,把每个元素在str1所在的位置拿到,再判断该位置后面是否也是刚好连续3位大写?
页:
[1]
2