【问题标题】:How to get the index of list value and value too choosen by user input如何获取用户输入选择的列表值和值的索引
【发布时间】:2018-11-19 12:14:28
【问题描述】:

我希望用户可以输入数字,如果数字与列表值匹配,则程序返回输入的值,它也是索引。

我该怎么做? 我已经写了几行代码,但它不起作用....

a = [10, 20, 30, 40, 50, 60]

inp = int(input("Enter digit"))
i =0
for i in a:
    if inp == a[i]:
        print("You found it {}".format(a[i]))
else:
        print("No found")

它引发了一个 IndexError。

【问题讨论】:

    标签: python python-3.x error-handling


    【解决方案1】:

    for i in a 迭代 a 的 元素,而不是其整数索引。

    您可以使用enumerate 修复您的代码。

    a = [10, 20, 30, 40, 50, 60]
    inp = int(input('Enter digit: '))
    
    for index, value in enumerate(a):
        if value == inp:
            print('You found it at position {}'.format(index))
            break
    else: # no break
        print('not found')
    

    此外,我将 字符串 input('Enter digit: ') 更改为 int 和 break 在目标被看到一次后退出循环。

    请参阅this question,了解如何在编程练习之外对此行为进行编程的解决方案(TL;DR:a.index(inp))。

    【讨论】:

    • 是的,这是给'你找到了'字符串,但我想要输入值的索引。我用 print('You found it {}'.format(value)) 进行了编辑,但它给出的值不是索引
    • @ArvinaKori 好的,我已经介绍过了。
    • Pythonic 解决方案 :)
    【解决方案2】:

    改变

    for i in a:
       if inp == a[i]:
           ...
    

    到

    for i in a:
       if inp == i:
           ...
    

    因为for 循环遍历列表中的元素。(而不是索引)

    【讨论】:

    • 它正在执行 else 块并给出“No Found”字符串的循环。
    【解决方案3】:
    a = [10, 20, 30, 40, 50, 60]
    
    inp = int(input("Enter digit: "))
    
    if inp in a:
        print("You found {} at {}".format(inp, a.index(inp)))
    else:
        print("Not found")
    

    【讨论】:

      【解决方案4】:

      更pythonic的方式是:

      a = [10, 20, 30, 40, 50, 60]
      
      inp = int(input("Enter digit :"))
      if inp in a:
        print "You found", inp, "at index:", a.index(inp)
      else:
        print "Not found"
      

      输出:

      Enter digit :10
      You found 10 at index: 0
      

      【讨论】:

        【解决方案5】:

        我认为不需要 for 循环:

        l = [i for i in range(0,100,10)]
        
        def found_it():
            print("You found it {}".format(l.index(ans)))
            if ans in l:
                print("You found it")
            else:
                print("Try again")
                found_it()
        

        【讨论】:

          【解决方案6】:

          您可以使用in在列表中查看它

          lst = [11, 1, 4, 15, 6]
          userInput = int(input('Enter Value')) # IF IT IS INT
          if userInput in lst:
              print(userInput, lst.index(userInput))
          

          【讨论】:

            【解决方案7】:

            首先,始终使用 int() 函数将用户输入转换为整数,然后在整数列表中找到它。

            我猜你只需要找到一个元素是否在列表中。为此你可以试试这个:

            a = [10, 20, 30, 40, 50, 60]
            
            inp = int(input("Enter digit"))
            if inp in a:
                print("You found it at index {}".format(a.index(inp)))
            else:
                print("Not found")
            

            【讨论】:

              【解决方案8】:

              代码中有一些逻辑错误:

              1. 输入函数返回字符串值,您正在比较 字符串值 'inp' 与数组 int 值。需要类型转换 价值。

              2. for i in a(表示您正在访问数组“a”中的每个值 变量“我”)。这里 'i' 不用作索引变量。需要 用 'for i in range(0,len(a))' 更新它(这意味着迭代 for循环直到数组'a'的长度,索引值为'i')。

              代码:

              a = [10, 20, 30, 40, 50, 60]
              flag = 0 
              inp = int(input("Enter digit"))
              for i in range(0,len(a)):
                  if inp == a[i]:
                      print("You found it")
                      print("index = ", i)
                      flag = 1
                      break
              if flag == 0:
                  print("No found")
              

              输出:

              【讨论】:

              • 关于第 3 点:for/else 是一个有效的 Python 构造。 else 块最多执行一次,当且仅当 for 循环运行完成而没有 breaking。
              【解决方案9】:

              您正面临这个问题,因为在 for 循环中我获取数组值并存储在 i 中,这就是显示索引错误的原因。

              这里是查找输入号和匹配号的代码:

              a=[10,20,30,40,50,60]
              
              inp=20
              
              i=0
              
              for i in a:
              
                  c = i 
              
                  print(c)
              
                  if inp==i:
              
                      print("You found it")
              

              代码输出:

              10
              20
              You found it
              30
              40
              50
              60 
              

              【讨论】:

                【解决方案10】:

                你必须使用

                for i in range(len(a)):
                

                索引错误是由于您将for 循环构造为for i in a,这意味着i 将遍历a 的内容。然后调用a[i] 将不起作用,因为在循环的第一步中您调用的是a[10]。

                或者,您可以像这样直接遍历a 的元素:

                for a_element in a:
                    if inp == a_element:
                

                它将用户输入与a的内容进行比较。

                【讨论】:

                • 我认为如果您详细说明一下会很有用。这条线应该用在哪里?为什么问题中的代码不起作用?
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2023-03-19
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2019-10-26
                • 2013-09-19
                相关资源
                最近更新 更多