[英]at loss with return value from list(), do I need to convert a tuple into a string?
我正在尝试编写一个程序,允许用户回答问题。 问题与用户选择的文件中的答案是同一行,程序将随机选择该行,拆分该行,然后将这两个项目放在单独的返回变量中。
不过,在最后比较变量时我很茫然。 我怀疑我正在尝试将str与元组进行比较,这就是为什么它不起作用的原因。 我当然是新手,通过搜索论坛走到了这一步,但是现在我需要您的帮助。
在此先多谢!
import random
import operator
def random_line(file):
return random.choice(list(open(file)))
def seperate_values(a):
line = a
lst = line.split()
question = list([lst[i] for i in [0]])
answer = list([lst[i] for i in [1]])
return question, answer
current_list = raw_input("Please enter filename\n")
chosen_line = random_line(current_list)
chosen_question, chosen_answer = seperate_values(chosen_line)
print chosen_question
print chosen_answer
user_answer = raw_input("enter the 3-digit code please\n")
if user_answer == chosen_answer:
print "congratulations"
else:
print "failure"
正在读取的文件是一个如下所示的txt:
auckland akl
wellington wlg
taupo tuo
hamilton hlz
TL; DR:替换
question = list([lst[i] for i in [0]])
answer = list([lst[i] for i in [1]])
同
question = lst[0]
answer = lst[1]
或者,最好更换
line = a
lst = line.split()
question = list([lst[i] for i in [0]])
answer = list([lst[i] for i in [1]])
return question, answer
同
question, answer = a.split()
return question, answer
让我们更深入地研究以下表达式: list([lst[i] for i in [0]])
。 我们有一个列表理解,然后将其传递到list
。 但是列表理解已经创建了一个列表,因此将其传递到list
会创建一个副本,副本的内容与第一个相同。 因此,这与[lst[i] for i in [0]]
相同。 那是在做什么 好吧,对于[0]
每个i
,我们都有一个项lst[i]
。 只有一个i
, 0
,所以它正在创建一个包含一个元素lst[0]
。 但是您可能想要项目本身,而不是将其作为单个元素的列表,因此,如果需要该元素,则应仅使用lst[0]
。
但是后来,我走得更远,拆箱了。 看到,拆包符号不是元组专用的:不,它也可以在列表中使用,我们甚至可以将split
放在右侧,将其压缩为我最后建议的更改。
如果您愿意,甚至可以简化此功能:
return a.split()
但是我喜欢解构到给予清晰question
和answer
。
问题出在第10和11行:
question = list([lst[i] for i in [0]])
answer = list([lst[i] for i in [1]])
我不知道您要在这里做什么^%*&#^,但是最后得到两个列表,而不是两个字符串。 您可以大大简化:
question = lst[0]
answer = lst[1]
然后它将起作用,因为它将获得两个字符串,即文件中给定行上的第一个和第二个单词。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.