【问题标题】:Python list that outputs numbers inputted backwards输出向后输入的数字的 Python 列表
【发布时间】:2017-07-10 13:35:52
【问题描述】:

我需要一个代码,要求输入 5 个 pos 数字,然后向后输出这些数字。我想使用一个while循环。到目前为止,这是我想出的,但是第二个 while 循环不起作用。

positiveNum = 0
SIZE = 5
numberList= []
ARRAY_LIMIT = SIZE -1

while len(numberList) < SIZE :
    positiveNum = input("Enter a positive number:")
    numberList.append(positiveNum)
while int(positiveNum) >= 0:
    print(numberList[positiveNum])
    positiveNum -= 1

【问题讨论】:

  • 注意,您使用 positiveNum 既作为需要访问的列表的索引,又作为用户给出的实际数字。也就是说,如果用户给你“100”,你会尝试访问 numberList[100],而 numberList 里面可能只有一个数字
  • 在惯用的 python 中,while 循环不是正确的结构。即使在其他语言中,当您不知道要迭代多少项时,通常也会使用 while 循环。对于这两个循环,您都知道有多少。作为一种教育性的东西,它很好,但不要认为那是正确的做法。

标签: python arrays while-loop


【解决方案1】:

您应该迭代 numberList 的长度而不是正数。 基本上将第二个while循环修改为此。

 i = SIZE; 
 while i>0: 
        print(numberList[i-1])
        i=i-1

【讨论】:

    【解决方案2】:

    在第二个循环中,您使用的是相同的 positiveNum 变量,但没有将其重置为数组的大小,请尝试:

    SIZE = 5
    numberList= []
    ARRAY_LIMIT = SIZE -1
    
    while len(numberList) < SIZE :
        positiveNum = input("Enter a positive number:")
        numberList.append(positiveNum)
    index = SIZE - 1
    while index >= 0:
        print(numberList[index])
        index -= 1
    

    【讨论】:

      【解决方案3】:

      您的第一个问题是input 返回一个string,因此如果您想使用它进行索引,您需要将其转换为int。您可能会收到以下错误。

      TypeError: 列表索引必须是整数或切片,而不是 str

      # Won't work with string
      numberList[positiveNum]
      positiveNum -= 1
      # Need to cast to int first
      positiveNum = int(input("Enter a positive number:"))
      

      在您的 while 循环条件中将其转换仅适用于该条件,它不会将变量中的值更改为 int,它仍然是 string

      # Works only once
      while int(positiveNum) >= 0:
      

      现在下一个问题是您使用positiveNum 作为索引号。如果最后输入的数字大于 SIZE,例如 100,这将导致 IndexError

      SIZE = 5
      number_lst = []
      
      while len(number_lst) < SIZE:
          # Should perform error checking if you must have positive numbers
          num = int(input("Enter a positive number: "))
          number_lst.append(num)
      
      # Output backwards using while
      i = len(number_lst) - 1
      while i >= 0:
          print(number_lst[i])
          i -= 1
      

      这里还有几个 for 循环替代方案

      # Output backwards using for
      for item in number_lst[::-1]:
          print(item)
      
      for item in reversed(number_lst):
          print(item)
      
      for i in range(len(number_lst) - 1, -1):
          print(number_lst[i])
      
      for i in reversed(range(len(number_lst))):
          print(number_lst[i])
      

      【讨论】:

        【解决方案4】:

        使用 while 循环:

        size = 5
        number_list = []
        
        while len(number_list) < size:
            number_list.append(int(input("Enter a positive number: ")))
        i = 1
        while i <= size:
            print(number_list[size - i])
            i += 1
        

        对第二个循环使用 for 循环:

        size = 5
        number_list = []
        
        while len(number_list) < size:
            number_list.append(int(input("Enter a positive number: ")))
        for i in number_list[::-1]:
            print(i)
        

        使用两个 for 循环,在这种情况下会更明智:

        size = 5
        number_list = []
        
        for _ in range(size):
            number_list.append(int(input("Enter a positive number: ")))
        for i in number_list[::-1]:
            print(i)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-06
          • 2013-01-03
          • 2014-06-27
          • 2014-06-24
          • 2016-07-17
          • 2019-09-20
          相关资源
          最近更新 更多