鱼C论坛

 找回密码
 立即注册
查看: 1706|回复: 12

python20课

[复制链接]
发表于 2018-3-28 17:06:05 | 显示全部楼层 |阅读模式

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

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

x
  1. str1 = '''ABSaDKSbRIHcRHGcdDIF'''

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

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

  9.     """
  10.     |如果str1[i]是大写字母:
  11.     |-- 如果已经出现小写字母:
  12.     |-- -- 统计后边的大写字母
  13.     |-- 如果未出现小写字母:
  14.     |-- -- 清空后边大写字母的统计
  15.     |-- -- 统计前边的大写字母
  16.     """
  17.     if str1[i].isupper():
  18.         if countB:
  19.             countC += 1
  20.         else:
  21.             countC = 0
  22.             countA += 1

  23.     """
  24.     |如果str1[i]是小写字母:
  25.     |-- 如果小写字母前边不是三个大写字母(不符合条件):
  26.     |-- -- 清空所有记录,重新统计
  27.     |-- 如果小写字母前边是三个大写字母(符合条件):
  28.     |-- -- 如果已经存在小写字母:
  29.     |-- -- -- 清空所有记录,重新统计(出现两个小写字母)
  30.     |-- -- 如果该小写字母是唯一的:
  31.     |-- -- -- countB记录出现小写字母,准备开始统计countC
  32.     """
  33.     if str1[i].islower():
  34.         if countA != 3:
  35.             countA = 0
  36.             countB = 0
  37.             countC = 0
  38.         else:
  39.             if countB:
  40.                 countA = 0
  41.                 countB = 0
  42.                 countC = 0
  43.             else:
  44.                 countB = 1
  45.                 countC = 0
  46.                 target = i

  47.     """
  48.     |如果前边和后边都是三个大写字母:
  49.     |-- 如果后边第四个字母也是大写字母(不符合条件):
  50.     |-- -- 清空记录B和C,重新统计
  51.     |-- 如果后边仅有三个大写字母(符合所有条件):
  52.     |-- -- 打印结果,并清空所有记录,进入下一轮统计
  53.     """
  54.     if countA == 3 and countC == 3:
  55.         if i+1 != length and str1[i+1].isupper():
  56.             countB = 0
  57.             countC = 0
  58.         else:
  59.             print(str1[target], end='')
  60.             countA = 3
  61.             countB = 0
  62.             countC = 0
复制代码

这一段不理解,countB没有事先声明为小写字母,python怎么就认为它是代表小写字母呢?
if str1[i].isupper():
        if countB:
            countC += 1
        else:
            countC = 0
            countA += 1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-3-28 18:15:58 | 显示全部楼层
不是python认为他代表小写字母,使用if countB: 是判断是否已经出现小写字母,

如果出现了小写字母的话,countB 就不为0了,if 的条件也就为真,进而统计后边的大写字母

如果没有出现小写字母的话,countB 的值就是 0 ,if的条件为假,统计的是前边的大写字母。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-28 18:16:12 | 显示全部楼层
countB = 0  # 统计小写字母
是用来存放 小写字母的个数。 if countB: 是否存在有小母
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-28 19:53:31 | 显示全部楼层
本帖最后由 c17328 于 2018-3-28 19:56 编辑
Zmynx_2017 发表于 2018-3-28 18:15
不是python认为他代表小写字母,使用if countB: 是判断是否已经出现小写字母,

如果出现了小写字母的话 ...


能详细点吗?
if str1[i].isupper():
这句是判断大写字母的,为True的时候继续往下运行,True的时候不就是大写字母吗。
if countB:
这两句加一起有点看不明白
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-28 20:04:05 | 显示全部楼层
Zmynx_2017 发表于 2018-3-28 18:15
不是python认为他代表小写字母,使用if countB: 是判断是否已经出现小写字母,

如果出现了小写字母的话 ...

if str1.isupper():
        if countB:
            countC += 1
        else:
            countC = 0
            countA += 1
countB = 0,
if countB:
这句话是不是一直为假,不会为真的.
然后程序直接跳至else的语句上
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-28 20:53:59 | 显示全部楼层
c17328 发表于 2018-3-28 20:04
if str1.isupper():
        if countB:
            countC += 1

不是,你程序代码里写的是str1[i].isupper()不是,所以,他只是判断一个字符,而不是整个字符串

所以,并不是一直为假,如果一直为假的话,也就没有写的必要了。对吧。

countB是一个可变的量,不是唯一固定的一个值,它是统计小写字母的,所以,如果有小写字母

那么countB也不为0了,if countB也就是 if 的条件成立了。

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

使用道具 举报

发表于 2018-3-28 20:57:10 | 显示全部楼层
c17328 发表于 2018-3-28 19:53
能详细点吗?
if str1.isupper():
这句是判断大写字母的,为True的时候继续往下运行,True的时候不就 ...

首先是if str1[i].isupper(),其次是,str1.[i]是否是大小写字母,与之前有无小写字母没有必然的关系

你判断的当前的某个字符,跟当前字符之前是否有小写字母没有关系,所以,可能存在当前字符为大写字母

而他前边有小写字母,此时countB 不等于 0 ,也就是if countB 的条件为True,这样应该理解了吧。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-28 21:07:39 | 显示全部楼层
Zmynx_2017 发表于 2018-3-28 20:57
首先是if str1.isupper(),其次是,str1.是否是大小写字母,与之前有无小写字母没有必然的关系

你判断 ...

if str1[i].isupper():
        if countB:
            countC += 1
        else:
            countC = 0
            countA += 1
就是我是两个if之间,绕不出去了。
if str1[i].isupper():
如果为假是,程序还会往下执行吗,题目中没有写else的情况。
num=int(input("输入一个数字:"))
if num%2==0:
    if num%3==0:
        print ("你输入的数字可以整除 2 和 3")
    else:
        print ("你输入的数字可以整除 2,但不能整除 3")
else:
    if num%3==0:
        print ("你输入的数字可以整除 3,但不能整除 2")
    else:
        print  ("你输入的数字不能整除 2 和 3")
if的嵌套的有点搞不清楚
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-28 21:10:34 | 显示全部楼层
if 只是一个条件判断,如果if的判断条件成立,那么进入执行if 下的那些内容,

如果不满足,那么不执行,并不是每一个if 都需要一个else , 如果你没有写else

且if 条件不成立的话,那么if 条件下所对应的的那块程序就不会被执行,直接跨过

执行if之后的内容。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-28 21:16:00 | 显示全部楼层
Zmynx_2017 发表于 2018-3-28 21:10
if 只是一个条件判断,如果if的判断条件成立,那么进入执行if 下的那些内容,

如果不满足,那么不执行, ...

if str1[i].isupper():
        if countB:
            countC += 1
        else:
            countC = 0
            countA += 1


if str1[i].isupper():这句为假的时候那么,if countB:不就没办法执行了吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-28 21:22:24 | 显示全部楼层
c17328 发表于 2018-3-28 21:16
if str1.isupper():
        if countB:
            countC += 1

仔细看代码,仔细看我的回答。说了半天了,不是str1.isupper(),

是str1[i].isupper(),只是str1的某一个元素,不是全部!!!
11936.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-28 21:35:11 | 显示全部楼层
Zmynx_2017 发表于 2018-3-28 21:22
仔细看代码,仔细看我的回答。说了半天了,不是str1.isupper(),

是str1.isupper(),只是str1的某一个 ...

for i in range(length):
    if str1[i] == '\n':
        continue
    if str1[i].isupper():
        if countB:
            countC += 1
        else:
            countC = 0
            countA += 1
for循环之后如果if str1(1).isupper():为假的时候,它内嵌的if ountB:会被python执行到吗。告诉我答案就行,我自己理解一下。中括号打不出来,用小括号代替一下。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-28 21:45:59 | 显示全部楼层
c17328 发表于 2018-3-28 21:35
for i in range(length):
    if str1 == '\n':
        continue

不会被执行,因为首先只有 if str1[i].isupper()条件为真时,才会执行if 条件下的那一块,

注意 缩进 关系,因为 if countB: 是在if str1[i].isupper()的基础上又向里边缩进了一个tab
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-28 22:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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