所以我对编码很新,但我正在学习Python。所以我把它放在一起,但不是将uInput与'con'列表进行比较。我在这里做错了什么?
#countries.py
con = [('uk', 'united kingdom'), ('us', 'usa', 'america', 'united states of america'), ('japan')]
accepted = [ ]
while len(accepted) < 196:
print("You have ", len(accepted), "/ 196 Countries!")
uInput = input("Enter the country: ")
print("")
if uInput.lower() in con:
if uInput.lower() in accepted:
print("Already got that one!")
print("")
else:
accepted.append(uInput.lower())
print("Nice! Now for the next!")
print("")
else:
print("Country not recognised, did you spell it right?")
print("")
print("You got them all!")
*的被修改
所以这是我的代码现在已更新,但不检查重复项或添加它们,您可以根据需要多次输入UK。但是因为没有被添加到接受列表中,所以这些点也不会增加。
#countries.py
con = [('uk', 'united kingdom'), ('us', 'usa', 'america', 'united states of america'), ('japan')]
accepted = [ ]
while len(accepted) < 196:
print("You have ", len(accepted), "/ 196 Countries!")
uInput = input("Enter the country: ")
print("")
foundCon = False
for conTuple in con:
if uInput.lower() in conTuple:
foundCon = True
print("Nice! Now for the next!")
print("")
...
duplicate = False
for c in accepted:
if c in conTuple:
duplicate = true
if duplicate:
print("You've already entered that one!")
...
if not foundCon:
print("Country not recognised, did you spell it right?")
print("")
print("You got them all!")
...
答案 0 :(得分:3)
in
不是递归的;它可以在('uk', 'united kingdom')
中找到con
,但不能在'uk'
或'united kingdom'
中找到 - 这些都不是con
的元素。
最简单(也是最好)的解决方法(仅针对此问题)是检查any
中con
元素的if any(uInput.lower() in c for c in con):
是否包含输入:
uInput
顺便说一句,
也会更好set
转换为小写一次然后再使用con
元素使用accepted
,对set
使用in
- 从语义上讲,set
主要用于查找内容set
它(以及其他数学accepted
操作),并为此目的进行了优化,但代价是不维护元素的排序uk
内存储(并检查)全部united kingdom
个国家/地区名称;否则,我可以输入一次united kingdom
,第二次输入accepted
,{{1}}不会在{{1}},我会获得该国家的双倍信用。< / LI>
答案 1 :(得分:0)
当你调用input时,你返回一个字符串,这意味着uInput是一个字符串。
你的列表con是一个元组列表..所以在行:
if uInput.lower() in con:
你总是会变错,因为字符串正在与元组进行比较。它没有与每个元组中的每个元素进行比较,只是作为一个整体的元组。因此,uInput永远不会等于con的元素。
也许尝试将代码更改为以下内容:
foundCon = False
for conTuple in con:
if uInput.lower() in conTuple:
foundCon = True
# perform logic for matching items
...
duplicate = False
for c in accepted:
if c in conTuple:
duplicate = True
if duplicate:
# perform logic for duplicate items
...
if not foundCon:
# perform logic for no matches
...
答案 2 :(得分:0)
Karl Knechtel的主要观点是:&#39; in&#39;不会进入你的嵌套列表(你有一个列表,其中每个元素都是一个列表)。但是,如果你确实想看看元素是否真实,那就是&#39; foo&#39;存在于列表列表中&#39; blah&#39;然后:
blah=[['hi','there'],['yo','whatsup','foo']]
if('foo' in [y for y in x for x in blah]):
print("Yep, it's in there")
基本上,你可以迅速扁平化“等等”。通过使用列表推导使其成为:
blah_flattened = ['hi','there','yo','whatsup']