鱼C论坛

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

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

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

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

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

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



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

参考代码:

  1. # 你的字符串
  2. string = 'I Love FishC! I Love Python! I Love Window!'

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

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

  8. # for 循环打印 filter 筛选字符串长度都和 第一个字符串长度相同的字符,均为最长单词
  9. for i in filter(lambda x:len(x) == len(words[0]), words):
  10.     print(i, end=' ')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-7-15 22:07:00 | 显示全部楼层
本帖最后由 青出于蓝 于 2021-7-16 14:14 编辑
  1. c=input("句子:") #接受你的英语字符串
  2. f=c.split(" ") #将字符串分割
  3. c=0#c原始化为0,后面将用c存贮最长的字符串的字母个数
  4. for i in f:
  5.     if len(i)>c:
  6.         c=len(i)#将比原始长的字符串的个数存贮到c
  7.         strr=i#把比原始长的单词命名为strr
  8. print(strr)
复制代码

遇到问题要多思考
上边代码最重要的是split函数,将字符串分割
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

大神能标注下注释吗。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

print(strr)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-7-15 22:30:51 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

我运行了以下,打印出来的是最开始的句子呀
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

怎么会?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-7-16 07:31:47 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

方便截个图吗...
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

  7. 这种解决方法一般网上也有
  8. 利用其他函数
  9. # 瞬间出结果
  10. for k in d:
  11.     print(k,d[k])
  12.     # k是lst中的每个元素
  13.     # d[k]是k在lst中出现的次数

复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-7-16 08:23:21 | 显示全部楼层
如果要靠学过的知识就看那个人说的就好了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

没事你们继续忙
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

参考代码:

  1. # 你的字符串
  2. string = 'I Love FishC! I Love Python! I Love Window!'

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

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

  8. # for 循环打印 filter 筛选字符串长度都和 第一个字符串长度相同的字符,均为最长单词
  9. for i in filter(lambda x:len(x) == len(words[0]), words):
  10.     print(i, end=' ')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

没有错啊, 是最长的单词,
PS: 这个程序要排除一下标点符号
屏幕截图 2021-07-16 092249.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

  2. RE_WORD = '\w+'
  3. def DealFile(filename):
  4.     # 读取文件信息
  5.     with open(filename) as f:
  6.         data = f.readlines()
  7.    
  8.     # 单词出现次数统计字典{'word':次数}
  9.     word_dict = {}
  10.     # 处理每一行字符串
  11.     for line in data:
  12.         # 正则表达式获取一行中所有单词
  13.         words = re.findall(RE_WORD, line)
  14.         # 将单词加入到统计字典中
  15.         for w in words:
  16.             # 除空格
  17.             w = w.strip()
  18.             # 出现次数+1
  19.             word_dict[w] = word_dict.get(w,0) + 1
  20.             
  21.     # 按单词次数排序, [(word, count),...]
  22.     word_count_list = sorted(word_dict.items(), key=lambda x: x[1], reverse=True)
  23.     # 打印次数最多的单词
  24.     maxVal = word_count_list[0][1]
  25.     for w, count in word_count_list:
  26.         if count == maxVal:
  27.             print(w)
  28.         else:
  29.             break
  30.         
  31. DealFile('test.txt')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-7-16 10:36:56 From FishC Mobile | 显示全部楼层
如果有多个单词是一样长且都是句子中最长的单词呢?是全部输出?还是输出最后一个?或者是第一个?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

我理解的应该是全部输出
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-7-16 17:35:30 | 显示全部楼层
这解法越来越离谱了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-7-17 04:35:43 | 显示全部楼层
  1. # 找出一句话中最长的单词
  2. def longest_word(sentence: str) -> str:
  3.     word_list = sentence.split()
  4.     m = ''
  5.     for w in word_list:
  6.         if len(w) > len(m):
  7.             m = w
  8.     return m
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-21 17:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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