关于python课后作业20讲动动手第1题的疑问
本帖最后由 白本羽 于 2021-4-11 10:11 编辑请用已经学过的只是编写程序,找出小甲鱼藏在下边这个长字符串中的密码,密码的埋藏点符合以下规律:
a)每位密码为单个小写字母
b)没为密码的左右两边均有且只有三个大写字母
passwd=''
for each in str1:
if each.islower(): #判断取出的是否为小写字母
position=str1.index(each)
front=position-3
rear=position+3
if str1.isupper() and str1.isupper(): #判断前三位和后三位是否都为大写字母
if str1.isupper() == False and str1.isupper() == False: #判断前第4位和后第4位是否都不为大写字母
passwd += each
print(passwd)
str1是小甲鱼给的字符,已经定义过了,以上是我的代码,运行没有报错,但是输出为空,不知道为什么,求解答{:5_111:} {:5_99:} 题目都知道补充完了,str1是啥我还是不知道 应该是没有找到符合条件的字符所以输出了空。
代码有点问题,比如开头没有一句去掉分段符的问题,也就是\n\r置换成空字符,
str1 = str1.replace('\n','').replace('\r','')
str1 是怎样的?
如果只是一长串字符串,那你 for each in str1:这意味着什么,清楚? 逃兵 发表于 2021-4-11 10:33
题目都知道补充完了,str1是啥我还是不知道
一大串大小写混杂的英文字母,打上来就。。。 阿奇_o 发表于 2021-4-11 10:35
str1 是怎样的?
如果只是一长串字符串,那你 for each in str1:这意味着什么,清楚?
str1是一串很长的大小写英文字母混杂的字符串。
???不是把每一个字符都比较一下嘛,,, 接着上面的说,position=str1.index(each)这句也有问题,因为一个小写字母如果前面出现过了。这个position就会一直定位到前面出现的位置,所以要么重复前面的匹配不成功,要么一直匹配前面的字符。 Hoiste 发表于 2021-4-11 10:35
应该是没有找到符合条件的字符所以输出了空。
代码有点问题,比如开头没有一句去掉分段符的问题,也就是\n ...
感谢你的指导!
我试了一下,返回了161个小写o,但是我根据条件目测了一下,至少应该含有一个小写g,好像还是有问题。。。 我理解应该是这样子,我就直接用正则表达式了,很方便:
In : s = 'abd#@%32309ABCpasswordXYZjk69EDFpasswwwordOPQ3-63'
In : s
Out: 'abd#@%32309ABCpasswordXYZjk69EDFpasswwwordOPQ3-63'
In : import re
In : re.findall(r'{3}(+){3}', s)
Out: ['password', 'passwwword']
str1 = str1.replace('\n','')
passwd=''
for each in range(len(str1)):
if str1.islower(): #判断取出的是否为小写字母
position=each
front=position-3
rear=position+3
if str1.isupper() and str1.isupper(): #判断前三位和后三位是否都为大写字母
if str1.isupper() == False and str1.isupper() == False: #判断前第4位和后第4位是否都不为大写字母
passwd += str1
print(passwd) 阿奇_o 发表于 2021-4-11 11:03
我理解应该是这样子,我就直接用正则表达式了,很方便:
{:5_106:}我先存起来,等之后学到了再看,再次感谢! 逃兵 发表于 2021-4-11 11:04
感谢回答!{:5_106:}
string = string.replace('\n','').replace('\r','')
i = 3
for each in string:
if each.islower() and string.isupper() and string.isupper():
if string.islower() and string.islower():
print(each,end = '')
i += 1
我翻了下以前的代码,你参考一下有什么不同吧。 逃兵 发表于 2021-4-11 11:04
str1 = str1.replace('\n','').replace('\r','')
passwd=''
i=0
for each in str1:
i += 1
if each.islower():
position=str1.index(each,i-1)
front=position-3
rear=position+3
if str1.isupper() and str1.isupper():
if str1.isupper() == False and str1.isupper() == False:
passwd += each
print(passwd)
请问为什么不能直接取出each呢,为了避免重复在index里限定了起始值为i-1,用来把范围缩小,但是最终输出结果不是ilovefishc,而是aqorjisoalbkcthzoivhqemmfbtenifdwizodtzvhyasoxrazvhdclchyqurnenccoau 白本羽 发表于 2021-4-11 11:23
str1 = str1.replace('\n','').replace('\r','')
passwd=''
i=0
当然能用了
str1 = str1.replace('\n','').replace('\r','')
passwd=''
i=0
for each in str1:
i += 1
if each.islower():
position=str1.index(each,i-1)
front=position-3
rear=position+3
if str1.isupper() and str1.isupper():
if str1.isupper() == False and str1.isupper() == False:
passwd += each
print(passwd)
你问题出在对str1的切片处理上,你看看我切的是啥,你切的是啥
页:
[1]