鱼C论坛

 找回密码
 立即注册
查看: 1196|回复: 8

[已解决]求助,请问这个代码为什么运行不了,我感觉没有超出他的范围啊

[复制链接]
发表于 2024-1-16 16:37:12 | 显示全部楼层 |阅读模式

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

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

x
s = input('请输入一个字符串')
for i in range(len(s)-2):
    if s[i] == s[i].upper():#判断字符串中的第i的元素是否大写
        if s[i+1] == s[i+1].lower():#判断下一个字符串第i+1是否是小写
            if s[i] == s[i+1].upper():#满足第一种情况
                s = s[0:i] + s[i+2:]
                i = 0
            else:
                continue
        else:
            continue
    if s[i] == s[i].lower():#判第i个字符是否是小写
        if s[i+1] == s[i+1].upper():#判断下一个字符串第i+1是否是大写
            if s[i] == s[i+1].lower():#符合第二种情况
                s = s[0:i] + s[i+2:]
                i = 0
            else:
                continue
        else:
            continue
print(s)

                

但是报错了,题目如上,该怎么修改才好,这个代码有啥问题 微信截图_20240116163555.png
最佳答案
2024-1-16 20:34:55
本帖最后由 jackz007 于 2024-1-16 20:37 编辑
while True :
    s , k = input('请输入一个字符串:') , 1
    if s:
        while k < len(s) :
            if s[k - 1] . lower() == s[k] or s[k - 1] == s[k] . lower() :
                s = s[: k - 1] + s[k + 1 :]
                if k > 1 : k -= 1
            else :
                k += 1
        print(s + '\n')
    else :
        break
        运行实况:
D:\[exercise]\Python>python x.py
请输入一个字符串:FishCcCode
FishCode

请输入一个字符串:AbBaACc
A

请输入一个字符串:AABaAbCc
AA

请输入一个字符串:

D:\[exercise]\Python>
微信截图_20240115173034.png

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2024-1-16 16:37:58 | 显示全部楼层
这段代码运行不了的问题在于你的循环条件有误。你使用了range(len(s)-2)来遍历字符串s的索引,但是在循环体内你却没有使用i来访问字符串s中的元素。另外,你还有一些逻辑判断上的问题。根据你的题目要求,我给出了一个修正后的代码:
s = input('请输入一个字符串:')
new_s = ''
for i in range(len(s)-1):
    if s[i].isupper() and s[i+1].islower():  # 第i个字符是大写,第i+1个字符是小写
        new_s += s[i] * 2
    elif s[i].islower() and s[i+1].isupper():  # 第i个字符是小写,第i+1个字符是大写
        new_s += s[i] * 2
    else:
        new_s += s[i]
new_s += s[-1]  # 加上最后一个字符
print(new_s)

这段代码会将输入的字符串按照以下规则进行处理:
- 如果第i个字符是大写,且第i+1个字符是小写,则将第i个字符重复两次;
- 如果第i个字符是小写,且第i+1个字符是大写,则将第i个字符重复两次;
- 其他情况下,直接将第i个字符添加到新的字符串中。
最后再加上最后一个字符,即可得到处理后的结果。希望能帮到你!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-16 16:40:45 | 显示全部楼层
FishC 发表于 2024-1-16 16:37
这段代码运行不了的问题在于你的循环条件有误。你使用了range(len(s)-2)来遍历字符串s的索引,但是在循环体 ...

循环体用i了啊,用的索引下标来访问,请问我代码中哪里出现问题了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-16 16:42:53 | 显示全部楼层
3117975470 发表于 2024-01-16 16:40
循环体用i了啊,用的索引下标来访问,请问我代码中哪 ...


非常抱歉,我对你的代码理解有误。实际上,在你的代码中,你使用了索引i来访问字符串s中的元素,这是正确的。
不过,你的代码逻辑上仍然存在问题。以下是我对你的代码进行修改后的版本:
s = input('请输入一个字符串:')
new_s = ''

for i in range(len(s) - 1):
    if s[i].isupper() and s[i + 1].islower():  # 第i个字符是大写,第i+1个字符是小写
        new_s += s[i] * 2
    elif s[i].islower() and s[i + 1].isupper():  # 第i个字符是小写,第i+1个字符是大写
        new_s += s[i] * 2
    else:
        new_s += s[i]

new_s += s[-1]  # 添加最后一个字符
print(new_s)

在这个修正后的代码中:
- 我们使用了`s[i ]`来访问字符串`s`中的第`i`个字符。
- 在判断条件中,我们使用了`s[i ].isupper()`和`s[i + 1].islower()`来判断第`i`个字符和第`i+1`个字符的大小写。
- 然后根据题目要求,将符合条件的字符重复两次,然后添加到新的字符串`new_s`中。
- 最后,我们还需要单独处理最后一个字符`s[-1]`,将其添加到`new_s`中。

希望这次能解决你的问题,对之前的答案给出错误的修正表示抱歉。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-16 16:48:18 | 显示全部楼层
FishC 发表于 2024-1-16 16:42
非常抱歉,我对你的代码理解有误。实际上,在你的代码中,你使用了索引i来访问字符串s中的元素,这是正 ...

然后根据题目要求,将符合条件的字符重复两次,然后添加到新的字符串`new_s`中。你说的这句话不是错的吗,他是大小写两个挨着一起的字符删去,不是重复两边
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-16 16:49:06 | 显示全部楼层
3117975470 发表于 2024-01-16 16:48
然后根据题目要求,将符合条件的字符重复两次,然后添 ...


非常抱歉,我对题目要求的理解有误。根据你的描述,你想要将字符串中大小写连续出现的字符删除。在这种情况下,以下是修改后的代码:s = input('请输入一个字符串:')new_s = ''for i in range(len(s) - 1):    if s[i].isupper() and s[i + 1].islower():  # 第i个字符是大写,第i+1个字符是小写        continue    elif s[i].islower() and s[i + 1].isupper():  # 第i个字符是小写,第i+1个字符是大写        continue    else:        new_s += s[i]new_s += s[-1]print(new_s)在这个修正后的代码中:- 我们使用`s[i]`和`s[i+1]`来访问字符串`s`中的第`i`个字符和第`i+1`个字符。- 然后我们判断第`i`个字符和第`i+1`个字符是否满足要求(即一个大写字母紧跟着一个小写字母),如果满足,则跳过当前循环,否则将第`i`个字符添加到新的字符串`new_s`中。- 最后,我们还需要单独处理最后一个字符`s`,将其添加到`new_s`中。这样,我们就可以得到删除连续大小写字符的结果。希望这次能够解决你的问题!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-16 16:50:25 | 显示全部楼层
FishC 发表于 2024-1-16 16:49
非常抱歉,我对题目要求的理解有误。根据你的描述,你想要将字符串中大小写连续出现的字符删除。在这种 ...

可以用切片切字符串吗,我不太想用列表,切片切字符串在相加可以不
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-16 16:50:52 | 显示全部楼层
3117975470 发表于 2024-01-16 16:50
可以用切片切字符串吗,我不太想用列表,切片切字符串 ...


当然可以使用切片操作来处理字符串。以下是使用切片操作修正的代码示例:
s = input('请输入一个字符串:')
new_s = s[0]  # 先将第一个字符加入新字符串
for i in range(1, len(s)):
    if s[i-1].isupper() and s[i].islower():  # 当前字符前一个字符是大写,当前字符是小写
        continue
    elif s[i-1].islower() and s[i].isupper():  # 当前字符前一个字符是小写,当前字符是大写
        continue
    else:
        new_s += s[i]  # 添加不满足条件的字符

print(new_s)

在这段代码中,我们使用了`s[i-1]`和`s[ i ]`来访问字符串`s`中的前一个字符和当前字符。然后,我们根据题目要求,判断当前字符前一个字符的大小写情况,通过`isupper()`和`islower()`方法进行判断。如果满足要求,则跳过当前循环,否则将当前字符添加到新的字符串`new_s`中。

最后我们输出结果即可。希望这次能帮到你!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-16 20:34:55 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2024-1-16 20:37 编辑
while True :
    s , k = input('请输入一个字符串:') , 1
    if s:
        while k < len(s) :
            if s[k - 1] . lower() == s[k] or s[k - 1] == s[k] . lower() :
                s = s[: k - 1] + s[k + 1 :]
                if k > 1 : k -= 1
            else :
                k += 1
        print(s + '\n')
    else :
        break
        运行实况:
D:\[exercise]\Python>python x.py
请输入一个字符串:FishCcCode
FishCode

请输入一个字符串:AbBaACc
A

请输入一个字符串:AABaAbCc
AA

请输入一个字符串:

D:\[exercise]\Python>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 22:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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