鱼C论坛

 找回密码
 立即注册
查看: 3415|回复: 28

[已解决]求住以下python 实现代码

[复制链接]
发表于 2021-7-15 21:26:34 | 显示全部楼层 |阅读模式

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

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

x
菜鸟求助大神以下python 实现代码啊。。。



从一个英文短句中找出字符最多的那个单词
最佳答案
2021-7-15 21:26:35

参考代码:
# 你的字符串
string = 'I Love FishC! I Love Python! I Love Window!'

# 将字符串进行切割,分隔出单词后有些单词末尾会有字符,在用字符串方法切割掉最后一个字符
# 用 set 将单词合并同样的单词,转会 list 用于下面的排序
words = list(set([i if i.isalpha() else i[:-1] for i in string.split()]))

# 这里 sort 按照单词长度排序,且由长到短
words.sort(key=lambda x:len(x), reverse=True)

# for 循环打印 filter 筛选字符串长度都和 第一个字符串长度相同的字符,均为最长单词
for i in filter(lambda x:len(x) == len(words[0]), words):
    print(i, end=' ')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-15 22:07:00 | 显示全部楼层
本帖最后由 青出于蓝 于 2021-7-16 14:14 编辑
c=input("句子:") #接受你的英语字符串
f=c.split(" ") #将字符串分割
c=0#c原始化为0,后面将用c存贮最长的字符串的字母个数
for i in f:
    if len(i)>c:
        c=len(i)#将比原始长的字符串的个数存贮到c
        strr=i#把比原始长的单词命名为strr
print(strr)
遇到问题要多思考
上边代码最重要的是split函数,将字符串分割
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-7-15 22:09:38 | 显示全部楼层

大神能标注下注释吗。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-15 22:23:27 | 显示全部楼层
本帖最后由 Ⅲ只小猪 于 2021-7-15 22:34 编辑
weiyideid823 发表于 2021-7-15 22:09
大神能标注下注释吗。。。
c=input("句子:")         # 接受你的英文短句
f=c.split(" ")                            # 因为每个英文单词用空格来分割,所以这里用" "空格字符串来分割这个句子,然后传入f列表中,这样的话列表中的每个元素都是一个英文单词
ee=[]         
c=0                   
for i in f:                              # 遍历f列表中的每个单词 
    if len(i)>c:                       # len(i)表示计算每个单词的长度,如果单词长度大于c的话,就运行下面的代码
        c=len(i)                       # 把单词的长度赋给c
        strr=i                          # 把最长的单词赋给strr,注意,因为使用了if len(i)>c和c=len(i),所以如果下一个单词的长度大于上一个单词的长度的话,每次循环后if len(i)>c中的c会被赋予新的值,而且这个值是越来越大的,                         
    else:
        continue                    # 而且这个值是越来越大的,因为如果单词长度小于c的话,是不会执行if下面的代码的,所以最后返回的是最长的英文单词。我现在加上一个else可能会比较好理解
print(strr)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-15 22:30:51 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-7-15 23:15:33 | 显示全部楼层

我运行了以下,打印出来的是最开始的句子呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-16 07:31:09 | 显示全部楼层
weiyideid823 发表于 2021-7-15 23:15
我运行了以下,打印出来的是最开始的句子呀

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

使用道具 举报

发表于 2021-7-16 07:31:47 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-16 08:06:44 | 显示全部楼层
weiyideid823 发表于 2021-7-15 23:15
我运行了以下,打印出来的是最开始的句子呀

方便截个图吗...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-16 08:22:19 | 显示全部楼层
import collections
content = input(':')
a = []
for i in content:
     a.append(i)
d = collections.Counter(a)

这种解决方法一般网上也有
利用其他函数
# 瞬间出结果
for k in d:
    print(k,d[k])
    # k是lst中的每个元素
    # d[k]是k在lst中出现的次数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-16 08:23:21 | 显示全部楼层
如果要靠学过的知识就看那个人说的就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-16 08:29:29 | 显示全部楼层
本帖最后由 3236654291 于 2021-7-16 08:32 编辑

啊,看错了
你要求的是单词
我看成了字母

没事你们继续忙
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-15 21:26:35 | 显示全部楼层    本楼为最佳答案   

参考代码:
# 你的字符串
string = 'I Love FishC! I Love Python! I Love Window!'

# 将字符串进行切割,分隔出单词后有些单词末尾会有字符,在用字符串方法切割掉最后一个字符
# 用 set 将单词合并同样的单词,转会 list 用于下面的排序
words = list(set([i if i.isalpha() else i[:-1] for i in string.split()]))

# 这里 sort 按照单词长度排序,且由长到短
words.sort(key=lambda x:len(x), reverse=True)

# for 循环打印 filter 筛选字符串长度都和 第一个字符串长度相同的字符,均为最长单词
for i in filter(lambda x:len(x) == len(words[0]), words):
    print(i, end=' ')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-16 09:24:42 | 显示全部楼层
weiyideid823 发表于 2021-7-15 23:15
我运行了以下,打印出来的是最开始的句子呀

没有错啊, 是最长的单词,
PS: 这个程序要排除一下标点符号
屏幕截图 2021-07-16 092249.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-16 10:09:15 | 显示全部楼层
import re

RE_WORD = '\w+'
def DealFile(filename):
    # 读取文件信息
    with open(filename) as f:
        data = f.readlines()
    
    # 单词出现次数统计字典{'word':次数}
    word_dict = {}
    # 处理每一行字符串
    for line in data:
        # 正则表达式获取一行中所有单词
        words = re.findall(RE_WORD, line)
        # 将单词加入到统计字典中
        for w in words:
            # 除空格
            w = w.strip()
            # 出现次数+1
            word_dict[w] = word_dict.get(w,0) + 1
            
    # 按单词次数排序, [(word, count),...]
    word_count_list = sorted(word_dict.items(), key=lambda x: x[1], reverse=True)
    # 打印次数最多的单词
    maxVal = word_count_list[0][1]
    for w, count in word_count_list:
        if count == maxVal:
            print(w)
        else:
            break
        
DealFile('test.txt')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-16 10:36:56 From FishC Mobile | 显示全部楼层
如果有多个单词是一样长且都是句子中最长的单词呢?是全部输出?还是输出最后一个?或者是第一个?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-7-16 14:07:59 | 显示全部楼层
hrp 发表于 2021-7-16 10:36
如果有多个单词是一样长且都是句子中最长的单词呢?是全部输出?还是输出最后一个?或者是第一个?

我理解的应该是全部输出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-16 17:35:30 | 显示全部楼层
这解法越来越离谱了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-16 22:39:38 | 显示全部楼层
最讨厌这种不劳而获的。你一个代码不写,有些人太善良了,你遇到问题请教一下没什么,但是什么都没有就很可恶了。你这样能学到什么呢?如果你没学过就不要做题!先学会。

评分

参与人数 1鱼币 +2 收起 理由
青出于蓝 + 2 +1

查看全部评分

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

使用道具 举报

发表于 2021-7-17 04:35:43 | 显示全部楼层
# 找出一句话中最长的单词
def longest_word(sentence: str) -> str:
    word_list = sentence.split()
    m = ''
    for w in word_list:
        if len(w) > len(m):
            m = w
    return m
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-14 01:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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