鱼C论坛

 找回密码
 立即注册
查看: 1648|回复: 13

[已解决]找出一个短句中字符最多的单词

[复制链接]
发表于 2021-7-18 16:00:57 | 显示全部楼层 |阅读模式

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

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

x
sentence = 'Today is a perfect day!'   # 输入英文短句如 Today is a perfect day!

words = sentence.split()   # 按照空格分裂

list =[]

maxlength = 0

for word in words:
    if word.isalpha():      #如果word 全为字母的话
        if len(word) >= maxlength:
            list = [word]
            maxlength = len[word]
            list.append(word)
    else:
        len(word[:-1]) == maxlength:  # 排查文末有标点的特殊情况,去掉最后一个字符
            list.append(word)

print(list)


需求: 从一个英文短句中找出字符最多的那个单词 (可能不只一个)

上面的我的代码,但是显示else 下面的一句报错,请假下大神是什么原因啊,或者说我这个思路是否正确呢,感谢指点!
最佳答案
2021-7-18 17:17:28
weiyideid823 发表于 2021-7-18 16:59
Today is a perfect dayyyyy!

如果句子是这个,好像不能同时把perfect 和dayyyyy 打印出来啊
sentence = 'Today is a perfect day!'   # 输入英文短句如 Today is a perfect day!

words = sentence.split()   # 按照空格分裂

maxlength = 0
for word in words:    # 确定最长单词的长度值
    if not word . isalpha():
        word = word[:-1]
    if len(word) > maxlength:
        maxlength = len(word)

for word in words:    # 把符合最大长度的所有单词打印出来
    if not word . isalpha():
        word = word[:-1]
    if len(word) == maxlength:
        print(word)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-18 16:18:15 | 显示全部楼层
       这是一个逻辑表达式
len(word[:-1]) == maxlength:
       应该用 if 打头
if len(word[:-1]) == maxlength:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-18 16:24:40 | 显示全部楼层
jackz007 发表于 2021-7-18 16:18
这是一个逻辑表达式

       应该用 if 打头

啊 这么低级的错误,感谢大大神
sentence = 'today is a perfect day!'   # 输入英文短句如 Today is a perfect day!

words = sentence.split()   # 按照空格分裂

list =[]

另外我改动之后,最后运行出来的结果是把today 和 perfect 都打印出来了,看来我这if else 的逻辑有问题?

maxlength = 0

for word in words:
    if word.isalpha():      #如果word 全为字母的话
        if len(word) >= maxlength:
            maxlength = len(word)
            list.append(word)
    else:
        if len(word[:-1]) == maxlength:  # 排查文末有标点的特殊情况,去掉最后一个字符
            list.append(word)

print(list)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-18 16:32:33 | 显示全部楼层
jackz007 发表于 2021-7-18 16:18
这是一个逻辑表达式

       应该用 if 打头

我改了下,然后结果把taday 和 perfect 都打印出来了,怎样改正我这个if else 的逻辑啊
sentence = 'today is a perfect day!'   # 输入英文短句如 Today is a perfect day!

words = sentence.split()   # 按照空格分裂

list =[]

另外我改动之后,最后运行出来的结果是把today 和 perfect 都打印出来了,看来我这if else 的逻辑有问题?

maxlength = 0

for word in words:
    if word.isalpha():      #如果word 全为字母的话
        if len(word) >= maxlength:
            maxlength = len(word)
            list.append(word)
    else:
        if len(word[:-1]) == maxlength:  # 排查文末有标点的特殊情况,去掉最后一个字符
            list.append(word)

print(list)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-18 16:34:55 | 显示全部楼层
sentence = 'Today is a perfect day!'   # 输入英文短句如 Today is a perfect day!

words = sentence.split()   # 按照空格分裂

maxlength = 0
xw = ''
for word in words:
    if not word . isalpha():
        word = word[:-1]
    if len(word) > maxlength:
        maxlength = len(word)
        xw = word

print(xw)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-18 16:41:45 | 显示全部楼层
weiyideid823 发表于 2021-7-18 16:32
我改了下,然后结果把taday 和 perfect 都打印出来了,怎样改正我这个if else 的逻辑啊

当word比maxlength大的时候这个word就被放到list里,所以你打印list会打印两个,可以把最后的打印改为只打印list的最后一项
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-18 16:42:37 | 显示全部楼层
sentence = 'today is a perfect day!'   # 输入英文短句如 Today is a perfect day!

words = sentence.split()   # 按照空格分裂

list =[]

另外我改动之后,最后运行出来的结果是把today 和 perfect 都打印出来了,看来我这if else 的逻辑有问题?

maxlength = 0

for word in words:
    if word.isalpha():      #如果word 全为字母的话
        if len(word) >= maxlength:
            maxlength = len(word)
            list.append(word)
    elif len(word[:-1]) == maxlength:  # 排查文末有标点的特殊情况,去掉最后一个字符
            list.append(word)

print(list)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-18 16:43:21 | 显示全部楼层
可以elif
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-18 16:51:39 | 显示全部楼层

这个如果遇到最长的单词有多个的时候好像不行?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-18 16:56:04 | 显示全部楼层

这个运行出来好像也是同时打印的today 和 perfect啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-18 16:59:03 | 显示全部楼层


Today is a perfect dayyyyy!

如果句子是这个,好像不能同时把perfect 和dayyyyy 打印出来啊

另外 XW = ' '  是啥意思求教。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-18 17:17:28 | 显示全部楼层    本楼为最佳答案   
weiyideid823 发表于 2021-7-18 16:59
Today is a perfect dayyyyy!

如果句子是这个,好像不能同时把perfect 和dayyyyy 打印出来啊
sentence = 'Today is a perfect day!'   # 输入英文短句如 Today is a perfect day!

words = sentence.split()   # 按照空格分裂

maxlength = 0
for word in words:    # 确定最长单词的长度值
    if not word . isalpha():
        word = word[:-1]
    if len(word) > maxlength:
        maxlength = len(word)

for word in words:    # 把符合最大长度的所有单词打印出来
    if not word . isalpha():
        word = word[:-1]
    if len(word) == maxlength:
        print(word)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-18 17:19:40 | 显示全部楼层
sentence = 'Today is a perfect dayyyyy!'   # 输入英文短句如 Today is a perfect day!

words = sentence.split()

dic = {}

maxlength = 0

for word in words:
    if not word.isalpha(): 
        word = word[:-1]
    length = len(word)
    if length > maxlength:
        maxlength = length 
    dic[word] = length


for k,v in dic.items():
    if v ==  maxlength:
        print(k)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-18 17:47:53 | 显示全部楼层
本帖最后由 R0n9 于 2021-7-18 17:50 编辑

可否这样?
from collections import Counter
sentence = 'Today is a perfect day!'
words = sentence.split()

b = dict(Counter(words))
c={key:value for key,value in b.items() if value > 1}
if c:
    print(max(zip(c.values(), c.keys())))
else:
    print('都是一个')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-14 00:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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