python零基础 第020讲:函数:内嵌函数和闭包 动动手 1.
请问各位,我写的这个函数和题目要求有什么逻辑漏洞吗?为什么得到的答案不对呢?def pwfinder(txt):
pw = []
length = len(txt)
for i in range(3, length - 3):
if txt.islower():
if txt[(i-3):i].isupper() and txt[(i+1):(i+4)].isupper():
if txt.islower() and txt.islower():
pw.append(txt)
for each in pw:
print(each, end = '')
得到的结果是
uilovefisdhc https://fishc.com.cn/forum.php?mod=viewthread&tid=42685&extra=page%3D1%26filter%3Dtypeid%26typeid%3D398 本帖最后由 jackz007 于 2020-12-10 23:14 编辑
请楼主测试一下这个代码
s , p = 'a' + '' . join(str1 . split('\n')) + 'a' , ''
for k in range(4 , len(s) - 4):
if s . islower() and s . isupper() and s . islower() and s . isupper() and s . islower():
p += s
print(p)
藏有密码的字符串保存在 str1 中 jackz007 发表于 2020-12-10 23:12
请楼主测试一下这个代码
藏有密码的字符串保存在 str1 中
你这个里面好多我看不懂的代码,我测试了一下
结果是:ilovefishc
是对的 jackz007 发表于 2020-12-10 23:12
请楼主测试一下这个代码
藏有密码的字符串保存在 str1 中
仔细研究了一下,你这个大概思路应该和我是一样的,难道是因为你把'\n'去掉了就能得到正确答案? 我尝试修改成我的代码:
def pwfinder(txt):
pw = []
length = len(txt)
for i in range(3, length - 3):
if txt == '\n':
continue
elif txt.islower() and txt[(i-3):i].isupper() and txt[(i+1):(i+4)].isupper() and txt.islower() and txt.islower():
pw.append(txt)
for each in pw:
print(each, end = '')
结果还是:
uilovefisdhc
我意识到问题了,应该就是'\n'的锅,但是我还不会使用:
s , p = 'a' + '' . join(str1 . split('\n')) + 'a' , ''
嗯,那就先这样吧,接着往下学了。 本帖最后由 jackz007 于 2020-12-11 15:51 编辑
Tigerbear 发表于 2020-12-11 13:19
我尝试修改成我的代码:
def pwfinder(txt):
pw = []
语句
str1 . split('\n')
根据换行符 '\n' 对字符串 str1 进行切片,这样,会得到一系列不含换行符的字符串片段
'' . join(str1 . split('\n'))
利用字符串的 join() 方法,把所有的字符串片段拼接成一个完整的字符串,这个字符串当然不含换行符 '\n'。
'a' + '' . join(str1 . split('\n')) + 'a'
在字符串首尾添加小写字符 'a',依据是,每个密码字符的两侧有且仅有 3 个大写字母,这就意味着第 4 个字符一定是小写,这也是你我代码重要的不同,我的代码比较密码字符两侧各 4 个字符,而你,是比较各 3 个字符,为了弥补字符串首尾第 4 个字符的缺失,所以,才增加了两个 'a',以便判断规则对整个字符串通用,从而免去对字符串首尾的单独处理。 jackz007 发表于 2020-12-11 15:50
语句
根据换行符 '\n' 对字符串 str1 进行切片,这样,会得到一系列不含换行符的字符 ...
{:5_90:}这种巧妙地构思和严谨的方法对于初学者来说受益匪浅
页:
[1]