如何检查用户输入是否与每个子元组中的第一项相同



我想检查用户输入是否与元组中子元组的任何第一项相同。然后,如果是相同的,我想打印子元组。我见过其他人使用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)

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

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

尝试以下操作:

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

首先我们讨论您的代码:

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

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

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

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

现在工作代码:

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

您可以在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.lower()

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

Unicode标准第3.13节介绍了使用的小写算法。

最新更新