折折叠叠像弹簧 发表于 2020-4-24 01:44:58

查找最长的单词

假设有一篇只包含英文字母和标点符号的英文文章,除用于分隔单词的空格外仅含的标点符号为','、'.'、'!'、'?'和'...'标点均在单词尾部且不连续出现,编写程序寻找文章中最长的单词(大小写不同被认为是同一个单词并都用小写表示,若最长单词出现多次则只要输出一次,且最长单词可能不止一个)并按单词在原文章中出现的次序顺序输出,若结果不止一个,用逗号加一个空格分隔各单词
我的代码:
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 = len(j)
lst2 =
s =', '.join(lst2)
print(s)

运行结果显示我只正确了80%,不知道是遗漏了什么,请各位指教

txxcat 发表于 2020-4-24 08:24:09

文章限制很多,能看到的漏洞有一个,一句话用结束后下一句话没有空格直接打出来,例如:'game over!try again?','over!try'会被当成一个单词计算。

折折叠叠像弹簧 发表于 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 = len(j)
lst =
print(', '.join(lst))
代码修改后可以解决你指出的错误了,但是运行结果仍然80%正确

折折叠叠像弹簧 发表于 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 = len(j)
lst =
sorted(lst, key=x.index)
print(', '.join(lst))

在第八行插入了sorted(lst, key=x.index),运行就通过了。题目要求按单词在原文的顺序输出,可能问题就出在这个地方。
是原代码没按原文顺序输出吗?哪一步出现乱序了呢

txxcat 发表于 2020-4-24 14:10:18

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

不大明白那20%的错误是什么样的错误,能说明一下吗?

折折叠叠像弹簧 发表于 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 = len(j)
lst =
sorted(lst, key=x.index)#没有这句就是错误20%
print(', '.join(lst))

折折叠叠像弹簧 发表于 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 = len(j)
lst =
sorted(lst, key=x.index)#没有这行就20%错误
print(', '.join(lst))

hanjiang6607 发表于 2020-4-24 15:08:16

新手就这么厉害呀!

txxcat 发表于 2020-4-24 18:14:19

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

原来是平台评测的代码正确率,但问题是lst本来是按x里单词的顺序获取的,然后按x.index索引排序没有任何影响,还是原来的顺序。
再有sorted是把排序生成新的列表,没有赋值这句话是没用的,lst不会有任何变动,除非用sort方法才会改变,所以感觉还是平台的评测标准有问题。

刺猬君 发表于 2020-4-24 23:55:39

不懂诶

折折叠叠像弹簧 发表于 2020-4-30 10:59:00

问了一下老师,给出的答复是:字典是无序的,python3.6后会给字典自动排序
但是OJ平台的python版本是3.5,所以
for i in x:
    d == len(i)
生成的字典是无序的
页: [1]
查看完整版本: 查找最长的单词