【问题标题】:How to change words in a list to upper/lower case using range - Python如何使用范围将列表中的单词更改为大写/小写 - Python
【发布时间】:2019-01-25 05:33:32
【问题描述】:

我的任务之一是获取用户输入,将其转换为列表,然后根据每个单词中的字符数,相应地更改为大写/小写。我被告知我必须使用范围,这是我正在努力解决的部分。这是我最近的尝试,但它不起作用。任何建议将不胜感激。

poem = input("Enter a poem, verse or saying: ")
words_list = poem.split()
list_len = len(words_list)
for word in range(0,list_len):
    if len(words_list[word]) < 4:
        word = word.lower()
    elif len(words_list[word]) > 6:
        word = words.upper()

【问题讨论】:

  • 不是。 wordrange 的整数值。输出应该是什么?您是否尝试修改 word_list 并返回该列表?
  • 您的代码中有一部分是正确的,words_list[word] 是实际的单词,一个字符串。继续在任何地方使用它。您还需要分配给该索引,即words_list[word] = ...。分配给局部变量不会改变列表。
  • 命名变量以反映它们的含义:例如,使用word 表示单词,使用wdx 表示单词列表中单词的索引......这将对您有所帮助理解困惑
  • 很抱歉提出这个问题,但是您看过python中范围函数的文档吗?检查this tutorial 并尝试使用 range 函数,而不是为你的作业寻求解决方案,因为它会帮助你更多地理解。
  • 嗨,Thomas - 是的,我花了很长时间试图自己查找这个,但我就是想不通。修改代码以使其正常工作非常简单,但我一直盯着它看太久了,我只是看不到它!

标签: python list range uppercase lowercase


【解决方案1】:

您的代码有几个问题。 word 是迭代器的值,因此它是一个整数。您不能在整数上使用函数 upperlower。但是,您可以通过更简单的方式解决它:

poem = input("Enter a poem, verse or saying: ")
words_list = poem.split()
for i in range(0,len(words_list)):
    word = words_list[i]
    word = word.lower() if len(word) < 4 else word
    if len(word) > 6:word = word.upper()
    print(word)

在执行上述代码时:

Enter a poem, verse or saying: Programming in Python is great
PROGRAMMING
in
Python
is
great

你也可以让它的函数返回一个列表(也使用range):

def get(string):
    words_list = string.split()
    output = []
    for i in range(0,len(words_list)):
        word = words_list[i]
        word = word.lower() if len(word) < 4 else word
        if len(word) > 6:word = word.upper()
        output.append(word)
    return output

print(get(input("Enter a poem, verse or saying: ")))

测试:

Enter a poem, verse or saying: Programming in Python is great
['PROGRAMMING', 'in', 'Python', 'is', 'great']

【讨论】:

    【解决方案2】:
    poem = input("Enter a poem, verse or saying: ")
    words_list = poem.split()
    list_len = len(words_list)
    
    # word is not a word here, it was an integer
    # by a convention we use 'i' for the iterator here
    for i in range(0,list_len):
        # here we assign an actual 'word' to the word variable
        word = words_list[i]
        if len(word) < 4:
            # therefore you couldn't use .lower() or .upper() on the integer
            word = word.lower()
        elif len(word) > 6:
            word = word.upper()
    

    使用合适的 IDE 进行编码,例如 PyCharm。它会提醒您所犯的所有错误。

    如果您确实需要使用范围,这将起作用,但您仍然需要弄清楚打印/返回值。

    如果您不知道发生了什么,只需在需要的地方添加一些 prints。如果您在代码中添加打印,您将自己弄清楚。

    【讨论】:

      【解决方案3】:

      只需对您的原始代码进行少量修改。由于您要转换为大写/小写,因此您还可能希望保存输出。您也可以使用新列表来保存输出,而不是替换原始列表中的值words_list

      for word in range(0,list_len):
          if len(words_list[word]) < 4:
              words_list[word] = words_list[word].lower()
          elif len(words_list[word]) > 6:
              words_list[word] = words_list[word].upper()
      
      print(words_list)
      

      输出

      Enter a poem, verse or saying: My name is bazingaa
      ['my', 'name', 'is', 'BAZINGAA']
      

      【讨论】:

      • 辛苦了。在那里看到它似乎很明显,但就是无法解决!
      • 很高兴为您提供帮助。如果答案有帮助,请随时接受。 :)
      【解决方案4】:

      这个怎么样?

      poem = input("Enter a poem, verse or saying: ")
      words_list = poem.split()
      out = ""
      for word in words_list:
          if len(word) < 4:
              word = word.lower()
          elif len(word) > 6:
              word = word.upper()
          out += " " + word
      print(out)
      

      删除了不需要的“list_len”变量,在“words_list”中循环并检查“word”的长度。并使用“out”变量集中输出。对于输出可能有更好的技术,我只是做了一个简单的。

      【讨论】:

      • 我认为要求是使用范围
      猜你喜欢
      • 2013-09-29
      • 1970-01-01
      • 2017-09-15
      • 1970-01-01
      • 2014-11-04
      • 1970-01-01
      • 1970-01-01
      • 2011-03-24
      • 2018-08-06
      相关资源
      最近更新 更多