weiyideid823 发表于 2021-7-15 21:26:34

求住以下python 实现代码

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



从一个英文短句中找出字符最多的那个单词

青出于蓝 发表于 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函数,将字符串分割

weiyideid823 发表于 2021-7-15 22:09:38

青出于蓝 发表于 2021-7-15 22:07
遇到问题要多思考

大神能标注下注释吗。。。

Ⅲ只小猪 发表于 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)

Ⅲ只小猪 发表于 2021-7-15 22:30:51

Ⅲ只小猪 发表于 2021-7-15 22:23


感觉有点耍流氓{:10_250:}

weiyideid823 发表于 2021-7-15 23:15:33

Ⅲ只小猪 发表于 2021-7-15 22:23
print(strr)

我运行了以下,打印出来的是最开始的句子呀

青出于蓝 发表于 2021-7-16 07:31:09

weiyideid823 发表于 2021-7-15 23:15
我运行了以下,打印出来的是最开始的句子呀

怎么会?

青出于蓝 发表于 2021-7-16 07:31:47

Ⅲ只小猪 发表于 2021-7-15 22:30
感觉有点耍流氓

{:10_250:}

青出于蓝 发表于 2021-7-16 08:06:44

weiyideid823 发表于 2021-7-15 23:15
我运行了以下,打印出来的是最开始的句子呀

方便截个图吗...

3236654291 发表于 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是lst中的每个元素
    # d是k在lst中出现的次数

3236654291 发表于 2021-7-16 08:23:21

如果要靠学过的知识就看那个人说的就好了{:10_277:}

3236654291 发表于 2021-7-16 08:29:29

本帖最后由 3236654291 于 2021-7-16 08:32 编辑

啊,看错了
你要求的是单词
我看成了字母
{:10_247:}
没事你们继续忙

Twilight6 发表于 2021-7-15 21:26:35


参考代码:

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

# 将字符串进行切割,分隔出单词后有些单词末尾会有字符,在用字符串方法切割掉最后一个字符
# 用 set 将单词合并同样的单词,转会 list 用于下面的排序
words = list(set( 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), words):
    print(i, end=' ')

Ⅲ只小猪 发表于 2021-7-16 09:24:42

weiyideid823 发表于 2021-7-15 23:15
我运行了以下,打印出来的是最开始的句子呀

没有错啊, 是最长的单词,
PS: 这个程序要排除一下标点符号

小默的世界 发表于 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 = word_dict.get(w,0) + 1
            
    # 按单词次数排序, [(word, count),...]
    word_count_list = sorted(word_dict.items(), key=lambda x: x, reverse=True)
    # 打印次数最多的单词
    maxVal = word_count_list
    for w, count in word_count_list:
      if count == maxVal:
            print(w)
      else:
            break
      
DealFile('test.txt')

hrp 发表于 2021-7-16 10:36:56

如果有多个单词是一样长且都是句子中最长的单词呢?是全部输出?还是输出最后一个?或者是第一个?

weiyideid823 发表于 2021-7-16 14:07:59

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

我理解的应该是全部输出

Ⅲ只小猪 发表于 2021-7-16 17:35:30

这解法越来越离谱了{:10_245:}

聂嘉辉 发表于 2021-7-16 22:39:38

最讨厌这种不劳而获的。你一个代码不写,有些人太善良了,你遇到问题请教一下没什么,但是什么都没有就很可恶了。你这样能学到什么呢?如果你没学过就不要做题!先学会。

mengqingnet 发表于 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
页: [1] 2
查看完整版本: 求住以下python 实现代码