鱼C论坛

 找回密码
 立即注册
查看: 2069|回复: 11

[已解决]第020讲课后作业求解

[复制链接]
发表于 2017-8-16 08:26:30 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 shizhou 于 2017-8-16 08:41 编辑

《零基础入门学习Python》第020讲课后作业 动动手第2个问题(找密码):
  1. str = '''string2的长字符串'''
  2. l = len(str)
  3. for x in range(0,l):
  4.         if str[x].islower() and str[x-3:x].isupper() and str[x+1:x+4].isupper():
  5.             if not str[x-4].isupper() and not str[x+4].isupper():
  6.                 print(str[x],end='')
复制代码

我程序得出的答案和小甲鱼老师的答案不一致,请问原因出在哪里??
最佳答案
2017-8-16 11:20:01
先看看你程序的问题:
1.isupper方法的定义:
如果字符串中至少包含一个区分大小写的字符,并且这些字符都是大写,则返回 True,否则返回 False。
也就是说‘2A9'这样的字符串也会返回True。
2.循环是从0到len(str),那么x-4,x+3都有可能越界。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-8-16 09:16:33 | 显示全部楼层
str[x].islower() 小写的字符怎么可能1个呢?
要是有这么简单就好了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-16 09:43:20 | 显示全部楼层
ba21 发表于 2017-8-16 09:16
str[x].islower() 小写的字符怎么可能1个呢?
要是有这么简单就好了

遍历长字符串,str[x].islower() 判断每个字符是否为小写,这有什么问题吗? 你说的 1个是表示什么意思呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-16 09:52:03 | 显示全部楼层
本帖最后由 ba21 于 2017-8-16 09:54 编辑
shizhou 发表于 2017-8-16 09:43
遍历长字符串,str[x].islower() 判断每个字符是否为小写,这有什么问题吗? 你说的 1个是表示什么意思呢 ...


str[x].islower() 判断每个字符 不是1个字符;还是一串字符???
's' 1个.
'sssssss' 一串

str[x].islower() and str[x-3:x].isupper() and str[x+1:x+4].isupper(): 你这句话 难道不是  这样  'ASDsASD'
                                                                                                                                       实际上是要实现这样吧 'ASDdafasdfASD' 和  'ASDsASD'
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-16 10:08:09 | 显示全部楼层
本帖最后由 shizhou 于 2017-8-16 10:14 编辑
ba21 发表于 2017-8-16 09:52
str[x].islower() 判断每个字符 不是1个字符;还是一串字符???
's' 1个.
'sssssss' 一串


str[x].islower() and str[x-3:x].isupper() and str[x+1:x+4].isupper(): 这句还不真能实现'ASDdafasdfASD',
只能是这个  'ASDsASD'
  1. str = 'ASDdafasdfASDASDsASD'
  2. l = len(str)
  3. for x in range(0,l):
  4.         if str[x].islower() and str[x-3:x].isupper() and str[x+1:x+4].isupper():
  5.                 print(str[x],end='')
复制代码

只会打印后一个s

题目要求不是要求实现这样吗? 'ASDsASD'

01.PNG
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-16 10:25:46 | 显示全部楼层
shizhou 发表于 2017-8-16 10:08
str[x].islower() and str[x-3:x].isupper() and str[x+1:x+4].isupper(): 这句还不真能实现'ASDdafasd ...

打印一个s对了啊。
哪里还不对吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-16 10:44:36 | 显示全部楼层
ba21 发表于 2017-8-16 10:25
打印一个s对了啊。
哪里还不对吗?

是对了呀!我想问的是:既然我的程序符合小甲鱼的题目要求,为什么找出的密码和小甲鱼的不一样呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-16 11:13:43 | 显示全部楼层
我也出问题了 正在研究中 研究出来说下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-16 11:20:01 | 显示全部楼层    本楼为最佳答案   
先看看你程序的问题:
1.isupper方法的定义:
如果字符串中至少包含一个区分大小写的字符,并且这些字符都是大写,则返回 True,否则返回 False。
也就是说‘2A9'这样的字符串也会返回True。
2.循环是从0到len(str),那么x-4,x+3都有可能越界。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-16 11:34:18 | 显示全部楼层
我找到问题所在了
应为这是一个长字符串 其中有换行  
而换行部分的代码没有写 就导致答案不一样了
你可以把换行写上 应该就行了  
我自己写的代码问题就在着
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-16 12:50:05 | 显示全部楼层
冬雪雪冬 发表于 2017-8-16 11:20
先看看你程序的问题:
1.isupper方法的定义:
如果字符串中至少包含一个区分大小写的字符,并且这些字符 ...

一语中的!大神厉害
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-16 12:52:20 | 显示全部楼层
丢丢yhj 发表于 2017-8-16 11:34
我找到问题所在了
应为这是一个长字符串 其中有换行  
而换行部分的代码没有写 就导致答案不一样了

对的呀!确实是换行符在捣鬼!可否放你的代码上来研究研究!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-1 14:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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