鱼C论坛

 找回密码
 立即注册
查看: 1853|回复: 3

[已解决]零基础学python旧版课后作业020讲动动手第一题

[复制链接]
发表于 2020-2-6 11:17:30 | 显示全部楼层 |阅读模式

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

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

x
如题

看了答案虽然能看懂,但是我自认想不到这种方法。
我的想法是先找到只由三个大写字母组成的字符串,然后去判断这些字符串之间是否只存在一个小写字母
具体代码如下
  1. def FindPasswd(str1):
  2.     str2 = ''  # 定义一个空字符串储存密码
  3.     temp = []  # 定义一个空列表储存索引值

  4.     length = len(str1)
  5.     for i in range(length-4):  # 找到字母为小大大大小组成的字符串
  6.         if str1[i+1:i+3].isupper():
  7.             if (not str1[i].isupper()) and (not str1[i+4].isupper()):
  8.                 temp.append(i+1)

  9.     length2 = len(temp)
  10.     for j in range(length2-1):  # 判断上面找到的字符串是否只被一个小写字母隔开
  11.         if temp[j+1] - temp[j] == 4:
  12.             if str1[temp[j]+3].islower():
  13.                 str2 += str1[temp[j]+3]

  14.     return print(str2)

  15. f = open("E:\Data_storage\PyCharm\learn\string2.txt", 'r')
  16. str1 = f.read()
  17. f.close()
  18. FindPasswd(str1)
复制代码


但是运行结果多了很多不符合的字母(就是和答案对不上)

自己找不到有问题的地方
求解答
最佳答案
2020-2-6 13:02:56
March2615 发表于 2020-2-6 12:20
我把i+3改成了i+4,这次就比答案多了几个字母。。。

我看了一下,错误应该出在了 upper方法 上
isupper() 如果字符串中至少包含一个区分大小写的字符,并且这些字符都是大写,则返回 True,否则返回 False。


我是这样找到问题的:
首先根据输出发现结果比答案多了第一个u ,先找到u在原输入代码的位置
通过加入下图绿框代码找到u的位置是447
2020-02-06_125047.png 2020-02-06_125231.png

在通过红框中的代码输出找到447附近的两个大写字母串
2020-02-06_125132.png
发现 红圈中IY不太正常 ,打开输入文件找到这里,发现 IY 后面是一个换行
2020-02-06_125927.png

再回去看一下upper的用法,我理解是回车换行符不属于能区分大小写的字符所以被他忽略了。。
检测了一下是这样的
2020-02-06_130107.png
上图\r\n是Windows系统里的回车 换行 就是在输入文件截图里显示的黑色CR LF


至于怎么改。。。你自己考虑吧

微信图片_20200206111554.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-6 11:55:54 | 显示全部楼层
本帖最后由 SHRS23 于 2020-2-6 12:00 编辑

str1[i+1:i+3]  这个得到的字符串长度是2

2020-02-06_115431.png

排除错误的思路:
开始我也没注意到,就想着看一下中间结果,第一个print(i+1)输出的是16 ,
一对照输入文件发现16位置不符合你设定的小大大大小的规则,
再一仔细看代码才发现你的错误

2020-02-06_115715.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-6 12:20:09 | 显示全部楼层
SHRS23 发表于 2020-2-6 11:55
str1  这个得到的字符串长度是2


我把i+3改成了i+4,这次就比答案多了几个字母。。。
微信图片_20200206121934.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-6 13:02:56 | 显示全部楼层    本楼为最佳答案   
March2615 发表于 2020-2-6 12:20
我把i+3改成了i+4,这次就比答案多了几个字母。。。

我看了一下,错误应该出在了 upper方法 上
isupper() 如果字符串中至少包含一个区分大小写的字符,并且这些字符都是大写,则返回 True,否则返回 False。


我是这样找到问题的:
首先根据输出发现结果比答案多了第一个u ,先找到u在原输入代码的位置
通过加入下图绿框代码找到u的位置是447
2020-02-06_125047.png 2020-02-06_125231.png

在通过红框中的代码输出找到447附近的两个大写字母串
2020-02-06_125132.png
发现 红圈中IY不太正常 ,打开输入文件找到这里,发现 IY 后面是一个换行
2020-02-06_125927.png

再回去看一下upper的用法,我理解是回车换行符不属于能区分大小写的字符所以被他忽略了。。
检测了一下是这样的
2020-02-06_130107.png
上图\r\n是Windows系统里的回车 换行 就是在输入文件截图里显示的黑色CR LF


至于怎么改。。。你自己考虑吧

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-6 03:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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