2

大家好,我知道可能已经问过一些类似的问题,但如果你能给我一个更具体的解决方案来解决我的尝试,我将不胜感激。

基本上程序应该返回列表中最短的单词。最短的单词不能是空字符串。<-- 我也不确定如何做这部分。

谢谢您的帮助!:)

主程序:

    n = int((input("Enter amount of words: "))
    sw = st.word(n)
    print("The shortest word is: {0:.s}" .format(sw))

功能:

    def word(n):

        l1 = []

        for i in range(n):
            words = str(input("Enter word: "))
            l1.append(words)

        s = l1
        nxt = l1

        for i in range(n+1): 
            if s[i] < nxt[i+1]:
                smallest = s[i]
            if nxt[i+1] < s[i]:
                smallest = nxt[i+1]
        return smallest
4

4 回答 4

6

您可以只使用 build in min函数:

l = ["ab", "abc", "", "fff", "gdfgfdg","a", "3455"]


print(min((word for word in l if word), key=len))
# results in: a

一些解释:

  • (word for word in l if word)生成器表达式

  • if word条件确保不使用空字符串,

  • key=len 使用每个单词的长度来查找最小值

于 2015-03-29T05:14:13.123 回答
4

您应该始终更喜欢使用内置函数而不是编写自己的函数(也许除了您正在学习的情况)。很好地@Marcin描述了函数的工作,所以,我想向你展示一个函数来替代生成器表达式。minfilter

让我们看看如何min以及如何filter协同工作:

In [1]: l = ["ab", "abc", "", "fff", "gdfgfdg","a", "3455"]

In [2]: min(filter(None, l), key=len)
Out[2]: 'a'

与解决方案相比,它可能不太直观,@Marcin但我更喜欢使用高阶函数,而不是生成器。阅读文本,其中一个单词的频率为 40%(word for word in l if word- 3 / 7)- 不,谢谢 :)。

只是来自文档的引用:

In [3]: filter?
Type:        type
String form: <class 'filter'>
Namespace:   Python builtin
Docstring:
filter(function or None, iterable) --> filter object

Return an iterator yielding those items of iterable for which function(item)
is true. If function is None, return the items that are true
于 2015-03-29T05:46:19.120 回答
1

如果你想要第一个最小单词。

n = raw_input('Enter words breaking with spaces:')

wordList = n.split()

print min([(word, len(word)) for word in wordList], key=lambda x:x[1])

如果你想要所有的最少的话。

n = raw_input('Enter words breaking with spaces:')

wordList = n.split()

minimunWordLength = min([len(word) for word in wordList])
minimunWords = filter(lambda x:len(x) == minimunWordLength,wordList)

print minimunWords
于 2015-03-29T05:32:35.323 回答
0

算法:

  1. 通过 获取数字单词的用户输入raw_input()。当用户输入错误的输入(即非整数值)时处理异常处理。
  2. 检查输入数字是否大于 0。如果是,则转到下一步。否则打印You enter value less then 1.
  3. 调用getSmallWord函数,将单词计数器作为参数传递。
  4. 使用for循环和range函数接受来自用户的单词并添加到set变量中,因为单词可能与用户重复,set 不会添加重复的单词。
  5. 将第一个元素从 指定set为最小并从 中删除该单词set
  6. 从 中迭代每个元素set并检查当前元素(即字长)是否小于最小字,然后将该字指定为最小。
  7. 返回最小的单词。
  8. 打印结果。

演示:

def getSmallWord(n):
    #- Use set because set will add one one word when user enter duplicate words.
    words = set()
    for i in range(n):
        word = raw_input("Enter word: ")
        words.add(word)

    #- Assign First word as smallest.
    smallest_word = words.pop()

    #- Iterate words from the 1 index. because we assign 0th element as Smallest.
    for word in words:
        #- Check Lenght of current elemnt from the User Input with the Smallest Word.
        if len(word)<len(smallest_word):
            smallest_word = word

    return smallest_word


if __name__=="__main__":
    try:
        n = int(raw_input("Enter amount of words: "))
    except ValueError:
        n = 5
        print "Enter Wrong number input. Number of Words are %d"%n      

    if n>0:
        sw = getSmallWord(n)
        print "The shortest word is: %s" %sw
    else:
        print "You enter value less then 1." 

输出:

vivek@vivek:~/Desktop/stackoverflow/anna$ python 8.py 
Enter amount of words: 5
Enter word: qwert
Enter word: asdf
Enter word: as
Enter word: asdf
Enter word: qwer
The shortest word is: as

笔记:

在 Python 2.x 中使用 raw_input()

在 Python 3.x 中使用 input()

于 2015-03-29T06:01:06.360 回答