鱼C论坛

 找回密码
 立即注册
查看: 54|回复: 5

大佬们帮我看下这个代码有什么问题

[复制链接]
发表于 昨天 19:12 From FishC Mobile | 显示全部楼层 |阅读模式

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

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

x
y = []
words = []
text = input("输入字符串")
while True:
    X = input("输入要查找的单词(退出输入停止)")
    if X!="停止":
        words.append(X)
    else:
        break

for i in words:
    for j in range(len(text) - len(i)):
        if text[j:j + len(i)] == i:
            y.append([j,j + len(i)])   
for i in range(len(y) - 1):
    for j in range(len(y) - 1):
        if y[j][0] > y[j + 1][0]:
            y[j][0],y[j + 1][0] = y[j + 1][0],y[j][0]
        elif y[j][0] == y[j + 1][0]:
            if len(y[j]) > len(y[j + 1]):
                y[j],y[j + 1] = y[j + 1],y[j]
            

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

使用道具 举报

发表于 昨天 19:12 | 显示全部楼层
在你提供的代码中,存在一些语法和逻辑上的错误。以下是代码中的问题和建议的修改:

1. **变量初始化**:`y = `和`words = `应该初始化为列表,如:`y = []`和`words = []`。
   
2. **字符串比较错误**:在`for`循环中,你在比较`text`和`i`时,应该使用字串切片进行比较,而不是`if text == i:`。应该是`if text[j:j+len(i)] == i:`。

3. **列表中的元素追加缺失参数**:`y.append()`缺少参数,应该是`y.append((i, j))`,以便将单词和位置一起存储。

4. **变量重用导致错误**:在排序逻辑中,`y`被用作整体列表,但`for`循环中`y`应该是不同的变量名。整个排序逻辑有冗余和错误。建议使用`sorted()`方法对元组列表排序。

5. **错误的打印语句**:`pri-nt(y)`语法错误,应该是`print(y)`。

这是修改后的代码示例:
y = []
words = []
text = input("输入字符串")
while True:
    X = input("输入要查找的单词(退出输入停止)")
    if X != "停止":
        words.append(X)
    else:
        break

for i in words:
    for j in range(len(text) - len(i) + 1):
        if text[j:j+len(i)] == i:
            y.append((i, j))

# 根据单词字母顺序和长度排序
y_sorted = sorted(y, key=lambda x: (x[0], len(x[0])))

print(y_sorted)

以上代码将会根据输入的单词在字符串中查找并输出结果,结果依据单词名和单词长度进行排序。

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

使用道具 举报

 楼主| 发表于 昨天 19:13 From FishC Mobile | 显示全部楼层
for i in words:
    for j in range(len(text) - len(i)):
        if text[j:j + len(i)] == i:
            y.append([j,j + len(i)]) words会这里会跳过最后一个元素  但是我不知道该怎么解决
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 19:13 | 显示全部楼层
xiangxv 发表于 2025-01-09 19:13
for i in words:
    for j in range(len(text) - le ...


你的问题中提到的代码段可能有误,尤其是在`if text == i`的逻辑中不正确,这会导致无法正确地将数据添加到`y`中。此外,可能存在拼写和逻辑错误。需要确保`for`循环遍历到字符串的最后一个位置,并且修正条件判断和数据追加部分。

以下是修改后的代码段,确保不会跳过最后一个元素:
y = []
words = []
text = input("输入字符串")
while True:
    X = input("输入要查找的单词(退出输入停止)")
    if X != "停止":
        words.append(X)
    else:
        break

for i in words:
    for j in range(len(text) - len(i) + 1):  # 修正循环范围,确保不跳过最后一个元素
        if text[j:j+len(i)] == i:  # 检查子串是否匹配
            y.append((i, j))  # 添加单词和起始位置到y中

print(y)

请注意以下几点:
1. 在`for j in range(len(text) - len(i) + 1):`中,加1是为了确保遍历到字符串的最后一个可能匹配的位置。
2. 使用字符串切片`text[j:j+len(i)]`来判断子串是否与单词匹配。
3. 修正了`y.append((i, j))`,这样可以将匹配的单词和其对应的起始位置存入`y`中。

这些修改应当解决跳过最后一个元素的问题,并且让代码功能符合预期。

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

使用道具 举报

发表于 昨天 21:48 | 显示全部楼层
本帖最后由 jackz007 于 2025-1-9 22:37 编辑

         有没有问题取决于你想要的效果,你得仔细说出你的意图!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 1 小时前 From FishC Mobile | 显示全部楼层
jackz007 发表于 2025-1-9 21:48
有没有问题取决于你想要的效果,你得仔细说出你的意图!

想要实现图片上的效果 但是 这几行代码
for i in words:
    for j in range(len(text) - len(i)):
        if text[j:j + len(i)] == i:
            y.append([j,j + len(i)])
会跳过最后一个元素  
Screenshot_2025-01-10-10-09-35-25_439a3fec0400f8974d35eed09a31f914.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-10 11:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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