如果list()返回值丢失,是否需要将元组转换为字符串?

2024-04-27 02:41:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图写一个程序,允许用户回答一个问题。 问题与用户选择的文件中的答案在同一行,然后程序将随机选择行,拆分行,并将两个项目放在不同的返回变量中。你知道吗

不过,在最后比较变量时,我不知所措。我怀疑我试图将str与tuple进行比较,这就是为什么它不起作用的原因。我当然是一个新手,通过搜索论坛走了这么远,但现在我需要你的帮助。你知道吗

提前多谢了!你知道吗

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

Tags: 文件用户answerimport程序returndefline
2条回答

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]

然后它会工作,因为它会得到两个字符串,第一个和第二个字在文件中的给定行。你知道吗

相关问题 更多 >