鱼C论坛

 找回密码
 立即注册
查看: 1680|回复: 1

[已解决]零基础学习python(原版)20讲动动手第二题

[复制链接]
发表于 2020-11-14 00:21:54 | 显示全部楼层 |阅读模式

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

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

x
萌新求助如果格式不对非常抱歉
就是关于从一大长串字符串中提取字母AAAaAAA格式中小写的a文字。
算上做这道题加看答案绞尽脑汁花了大概两个小时还没有弄懂。
主要问题有两个。
第一个是答案中countB我仔细翻看没有前置没有找到对其赋值(赋值了0没更改)
在我的理解中应该if永远不成立,因为是0,确实代码正常运行了也得出了结果。
包括后面的数字初始值在哪里进行变动的我也看不出来。就根本想不通是为什么。逻辑我看了大概能理解。
我代码只截取了一半,真心求大神解释。
第二个问题是我自己做题的时候思考的逻辑是能否使用一每7个变量为基础做循环。
比如说在for each in range(1,100)中,是否能将each设定为七个一组,
第一组是[1,2,3,4,5,6,7],第二组是[2,3,4,5,6,7,8]就这种感觉。
网上查了也找不到理想的答案,希望可以得到大神指点,非常感谢。

countA = 0  # 统计前边的大写字母
countB = 0  # 统计小写字母
countC = 0  # 统计后边的大写字母
length = len(str1)

for i in range(length):
    if str1[i] == '\n':
        continue

    if str1[i].isupper():
        if countB:
            countC += 1
        else:
            countC = 0
            countA += 1
最佳答案
2020-11-14 01:04:19

参考下用索引下标来做出的代码,希望能有助于你的理解:
str1 = """小甲鱼准备的txt文件内容"""
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
回复

使用道具 举报

发表于 2020-11-14 01:04:19 | 显示全部楼层    本楼为最佳答案   

参考下用索引下标来做出的代码,希望能有助于你的理解:
str1 = """小甲鱼准备的txt文件内容"""
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-10 21:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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