【问题标题】:How to check if user input is the same as the first item in each subtuple?如何检查用户输入是否与每个子元组中的第一项相同?
【发布时间】:2021-03-21 19:40:10
【问题描述】:

我想检查用户输入是否与元组中子元组的第一项相同。然后,如果相同,我想打印子元组。我见过其他人使用any,但它不起作用。我不太确定如何遍历所有子元组,因为我收到了错误消息:

tupple indices must be integers or slices, not tuple.

这是我尝试过的:

i=0
for i in a[i]:
    if input_city in a [i]:
        print(a[i])
    else:
        i+=1

我也试过了:

if any(input_city in i for i in a):
    print(a[i])
else:
    print("City does not exist")

基本上如果我有这些元组:

a = (('City A', 1, 2, 3), ('City B', 4, 5, 6))
  • 如果用户输入City A,那么我将打印(City A, 1, 2, 3)
  • 如果用户输入City B,那么我将打印(City B, 4, 5, 6)

【问题讨论】:

标签: python


【解决方案1】:

循环直接迭代项目,而不是索引,所以我会调用循环变量subtuple 而不是i 并去掉所有括号内的查找。

for subtuple in a:
    if subtuple[0] == input_city:
        print(subtuple)

【讨论】:

    【解决方案2】:

    尝试以下方法:

    for i in a:
        if input_city in i:
            print(i)
    

    【讨论】:

      【解决方案3】:

      首先我们谈谈你的代码:

      i=0
      for i in a[i]:
          if input_city in a [i]:
              print(a[i])
          else:
              i+=1
      

      第 2 行:a[i]。所以你正在循环一个元组since a[0] is ('City A', 1, 2, 3)所以i在第一次迭代中变成City A。记住这一点!。

      第 3 行:在这里检查if input_city in a[i]。正如我们看到的i 是字符串City A。这意味着你说if input_city in a['City A']。所以很明显会抛出错误,因为你不能按值切片元组,而是按索引。

      最后一行:i += 1。不需要这个,因为python默认增加这个值。

      现在的工作代码:

      for i in a:
          if input_city in i:
              print(i)
      

      【讨论】:

        【解决方案4】:

        您可以在 for 循环中循环遍历元素本身,而不必担心索引:

        >>> city_tuples = (('City A', 1, 2, 3), ('City B', 4, 5, 6))
        >>> input_city = input("Please enter a city: ")
        Please enter a city: City b
        >>> for city_tuple in city_tuples:
        ...     if city_tuple[0].lower() == input_city.lower():
        ...         print(city_tuple)
        ...
        ('City B', 4, 5, 6)
        

        str.<b>lower</b>()

        返回字符串的副本,其中所有大小写字符 [4] 都转换为小写。

        Unicode 标准第 3.13 节描述了所使用的小写算法。

        【讨论】:

        • 我之前没见过这个中使用的 .lower() 。我只是想知道使用它的原因是什么?
        • 例如说用户输入类似'neW YoRK'的东西他们仍然会得到包含'New York'的元组。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-03
        • 1970-01-01
        • 1970-01-01
        • 2021-05-07
        • 2016-09-07
        相关资源
        最近更新 更多