鱼C论坛

 找回密码
 立即注册
查看: 2674|回复: 11

查找最长的单词

[复制链接]
发表于 2020-4-24 01:44:58 | 显示全部楼层 |阅读模式

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

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

x
假设有一篇只包含英文字母和标点符号的英文文章,除用于分隔单词的空格外仅含的标点符号为','、'.'、'!'、'?'和'...'  标点均在单词尾部且不连续出现,编写程序寻找文章中最长的单词(大小写不同被认为是同一个单词并都用小写表示,若最长单词出现多次则只要输出一次,且最长单词可能不止一个)并按单词在原文章中出现的次序顺序输出,若结果不止一个,用逗号加一个空格分隔各单词
我的代码:
x = input()
x = x.lower().split()
lst,dic =[],{}
for i in x:
    if i.isalpha():
        lst.append(i)
    else:
        lst.append(i[:-1])
for j in lst:
    dic[j] = len(j)
lst2 = [k for k,v in dic.items() if v==max(dic.values())]
s =  ', '.join(lst2)
print(s)

运行结果显示我只正确了80%,不知道是遗漏了什么,请各位指教
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-24 08:24:09 | 显示全部楼层
文章限制很多,能看到的漏洞有一个,一句话用结束后下一句话没有空格直接打出来,例如:'game over!try again?','over!try'会被当成一个单词计算。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-24 11:38:07 | 显示全部楼层
txxcat 发表于 2020-4-24 08:24
文章限制很多,能看到的漏洞有一个,一句话用结束后下一句话没有空格直接打出来,例如:'game over!try aga ...

x,d = input(),{}
for i in ['.',',','!','?','...']:
    x = x.replace(i,' ')
x = x.lower().split()
for j in x:
    d[j] = len(j)
lst = [k for k,v in d.items() if v==max(d.values())]
print(', '.join(lst))
代码修改后可以解决你指出的错误了,但是运行结果仍然80%正确
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-24 12:08:48 | 显示全部楼层
txxcat 发表于 2020-4-24 08:24
文章限制很多,能看到的漏洞有一个,一句话用结束后下一句话没有空格直接打出来,例如:'game over!try aga ...

问题已解决
x,d = input(),{}
for i in ['.',',','!','?','...']:
    x = x.replace(i,' ')
x = x.lower().split()
for j in x:
    d[j] = len(j)
lst = [k for k,v in d.items() if v==max(d.values())]
sorted(lst, key=x.index)
print(', '.join(lst))

在第八行插入了sorted(lst, key=x.index),运行就通过了。题目要求按单词在原文的顺序输出,可能问题就出在这个地方。
是原代码没按原文顺序输出吗?哪一步出现乱序了呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-24 14:10:18 | 显示全部楼层
折折叠叠像弹簧 发表于 2020-4-24 11:38
代码修改后可以解决你指出的错误了,但是运行结果仍然80%正确

不大明白那20%的错误是什么样的错误,能说明一下吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-24 14:57:32 | 显示全部楼层
txxcat 发表于 2020-4-24 14:10
不大明白那20%的错误是什么样的错误,能说明一下吗?

online judge平台根据输入输出来判断正确率,没有说明报错原因。
我在第八行加入一句sorted(lst,key = x.index) 就运行通过了
我觉得问题是出在‘’按单词在原文的顺序输出‘’这个要求,但是我觉得不需要sorted,原来的代码就是按顺序输出的,不知道问题在哪里

正确代码
x,d = input(),{}
for i in ['.',',','!','?','...']:
    x = x.replace(i,' ')
x = x.lower().split()
for j in x:
    d[j] = len(j)
lst = [k for k,v in d.items() if v==max(d.values())]
sorted(lst, key=x.index)#没有这句就是错误20%
print(', '.join(lst))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-24 15:01:59 | 显示全部楼层
txxcat 发表于 2020-4-24 14:10
不大明白那20%的错误是什么样的错误,能说明一下吗?

online judge平台根据输入输出判断正确率,没有说明错误原因
我在第八行插入sorted(lst,key=x.index) 就可以正确通过
推测是‘’按单词在原文顺序输出‘’   这个要求没达到,但是我觉得没有sorted,原来的代码已经是按顺序输出单词了,不明白问题出在哪里
正确代码
x,d = input(),{}
for i in ['.',',','!','?','...']:
    x = x.replace(i,' ')
x = x.lower().split()
for j in x:
    d[j] = len(j)
lst = [k for k,v in d.items() if v==max(d.values())]
sorted(lst, key=x.index)#没有这行就20%错误
print(', '.join(lst))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-24 15:08:16 | 显示全部楼层
新手就这么厉害呀!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-24 18:14:19 | 显示全部楼层
折折叠叠像弹簧 发表于 2020-4-24 14:57
online judge平台根据输入输出来判断正确率,没有说明报错原因。
我在第八行加入一句sorted(lst,key = x ...

原来是平台评测的代码正确率,但问题是lst本来是按x里单词的顺序获取的,然后按x.index索引排序没有任何影响,还是原来的顺序。
再有sorted是把排序生成新的列表,没有赋值这句话是没用的,lst不会有任何变动,除非用sort方法才会改变,所以感觉还是平台的评测标准有问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-24 23:55:39 | 显示全部楼层
不懂诶
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-30 10:59:00 | 显示全部楼层
问了一下老师,给出的答复是:字典是无序的,python3.6后会给字典自动排序
但是OJ平台的python版本是3.5,所以
for i in x:
    d[i] == len(i)
生成的字典是无序的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-11 19:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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