繁体   English   中英

从list()返回值不知所措,我是否需要将元组转换为字符串?

[英]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] 只有一个i0 ,所以它正在创建一个包含一个元素lst[0] 但是您可能想要项目本身,而不是将其作为单个元素的列表,因此,如果需要该元素,则应仅使用lst[0]

但是后来,我走得更远,拆箱了。 看到,拆包符号不是元组专用的:不,它也可以在列表中使用,我们甚至可以将split放在右侧,将其压缩为我最后建议的更改。

如果您愿意,甚至可以简化此功能:

return a.split()

但是我喜欢解构到给予清晰questionanswer

问题出在第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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM