鱼C论坛

 找回密码
 立即注册
查看: 904|回复: 9

python0基础入门20讲的最后一题

[复制链接]
发表于 2020-5-20 13:02:01 | 显示全部楼层 |阅读模式

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

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

x
题目是a) 每位密码为单个小写字母 b) 每位密码的左右两边均有且只有三个大写字母 小甲鱼的代码出来的是ilovefishc
a = 0
b = 3
c = 7
while len(str1) > c:
    d = str1[a:b]
    e = str1[b]
    f = str1[b+1:c]
    if d.isupper() and f.isupper() and e.islower():
        print(e)
    a += 1
    b += 1
    c += 1
我的代码为什么跟他不一样呢。。我固定了长度索引值一直是0123456 1234567这样的 如果中间的是小写旁边是大写就写出来 但是出来的跟小甲鱼的不一样 人已经有点晕了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-20 13:06:09 From FishC Mobile | 显示全部楼层
这思路就是错的,咋能固定长度037呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-20 13:12:23 | 显示全部楼层
wp231957 发表于 2020-5-20 13:06
这思路就是错的,咋能固定长度037呢

不是前面3个是大写 后面3个是大写 中间那个数字是小写的情况下输出小写字符吗...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-20 13:13:17 | 显示全部楼层
琉璃琉璃 发表于 2020-5-20 13:12
不是前面3个是大写 后面3个是大写 中间那个数字是小写的情况下输出小写字符吗...


不是的,

是从上一个小写字母到下一个小写字母之间
和这一个小写字母到下一个小写字母之间
只能有且仅有三个大写字母
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-20 13:13:30 | 显示全部楼层
wp231957 发表于 2020-5-20 13:06
这思路就是错的,咋能固定长度037呢

而且是密码a左右两边均有且只有3个。。那不就是固定长度为7吗....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-20 13:22:14 | 显示全部楼层
Twilight6 发表于 2020-5-20 13:13
不是的,

是从上一个小写字母到下一个小写字母之间

我已经做这个题做晕了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-20 13:22:49 From FishC Mobile | 显示全部楼层
琉璃琉璃 发表于 2020-5-20 13:12
不是前面3个是大写 后面3个是大写 中间那个数字是小写的情况下输出小写字符吗...

你说这是理想化期望
实际上会有很多骚扰字符的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-20 13:46:58 | 显示全部楼层
用你的切片方法可以这样做:
a = []
b = 0
c = 1
for i in str1:
    if i.islower():
        a.append(str1.index(i,b,len(str1)))
    b += 1
b = 0
count_left = 0
count_right = 0
while b != a[-1] and c+1 < len(a):
    d = str1[b:a[c]]
    f = str1[(a[c]+1):a[c+1]]
    for i in d:
        if i.isupper():
            count_left += 1
    for i in f:
        if i.isupper():
              count_right += 1
    if count_left == count_right == 3:
        print(str1[a[c]],end='')
    count_right,count_left = 0,0
    b = a[c]
    c += 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-20 13:58:34 | 显示全部楼层
Twilight6 发表于 2020-5-20 13:46
用你的切片方法可以这样做:

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-20 14:05:37 | 显示全部楼层

a = []   # 用于统计小写字母的索引值
b = 0    # 初始化b的数值

for i in str1:  # 遍历出所有小写字母的下标,添加入 a 列表,用于为下面索引做准备条件
    if i.islower():
        a.append(str1.index(i,b,len(str1)))
    b += 1

c = 1     # 初始化代表第第二个 小写字母的下标
b = 0     # 初始化b 用于当作开始或上一个小写字母的下标

count_left = 0  # 用于计算小写字母左边的大写字母数量
count_right = 0 # 用于计算小写字母右边边的大写字母数量

while c+1 < len(a):  # 只需要c的索引大于 a 的列表长度即可退出循环
    
    d = str1[b:a[c]]   # 记录小写字母左边的所有字母
    f = str1[(a[c]+1):a[c+1]]  # 记录小写字母右边的所有字母
    
    for i in d:   # 遍历左边的大写字母出现的次数
        if i.isupper():
            count_left += 1
    for i in f:   # 遍历右边的大写字母出现的次数
        if i.isupper():
              count_right += 1
            
    if count_left == count_right == 3: # 如果等于 3 即是符合题意 打印字母
        print(str1[a[c]],end='')
        
    count_right,count_left = 0,0  # 重新初始化记数参数,为下一次循环计数做准备
    
    b = a[c] # b为赋值为下一个小写字母的索引值
    
    c += 1 # c为b的下一个小写字母的索引

重新写了注释,如果帮助到你记得给个最佳哦~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-21 06:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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