将一个元素添加到字符串后,从列表中删除某个字符

时间:2015-03-14 10:07:36

标签: python string

我昨天发布了this,现在又遇到了另一个问题。

到目前为止的代码:

with open("questions.txt", "r") as questions:
    keys = questions.read().split('|')
    answers = keys[3]
    keys[3] = keys[3].split('/', 1)[0]

    answers = answers.split('/')[1:]
    answer = [x for x in answers if '!' in x][0][1:]

    #print(keys)
    #print(answers)
    #print(answer)

    for x in range(0,4):
        print(keys[x])
    print("")
    for y in range(0,4):
        print(answers[y])

    userAnswer = input("Enter your answer!: ").lower()

    if userAnswer == answer:
        print("Correct!")
        input("")

这很好用,但现在当我显示answers列表时,列表中的第一个条目前面有一个!,这只是为了让程序找出哪一个是正确答案。现在,我希望在让程序为字符串answer添加正确答案后,删除字符!的列表。

answers = answers.split('/')[1:]
answer = [x for x in answers if '!' in x][0][1:]

#Code would likely fit here

2 个答案:

答案 0 :(得分:1)

由于您已经找到了正确的答案,并且不再需要前面有!的版本,因此您可以执行以下操作:

answers = answers.split('/')[1:]
answer = [x for x in answers if '!' in x][0][1:]

#Code would likely fit here
answers[answers.index('!' + answer)] = answer

这将在列表中找到正确答案的索引,并在其前面加上感叹号,并将其替换为不包含感叹号的版本。现在,当您将来使用answers列表时,它将被正确格式化。因为我们知道只有一个答案会在它前面有一个感叹号,所以我们可以改变这一个事件而不是遍历整个列表。

或者,如果要维护列表的版本,感叹号仍在列表中,则可以在打印出答案选项时简单地删除!。为此,您可以更改

for y in range(0,4):    
    print(answers[y])

for ans in answers:
    ans[1:] if a.startswith('!') else ans

在我们的print语句中,我们只是检查要打印的字符串的第一个字符是!,如果是,则删除第一个字符。否则我们会照常打印。

有关此更改的注意事项 - 无需像您一样在python中迭代范围。您可以简单地遍历每个元素,而不是循环遍历一系列数字并查看该列表中每个索引处的元素。这允许我们来自:

for y in range(0,4):
    print answers[y]

简单地说:

for y in answers:
    print y

答案 1 :(得分:0)

您有2个选项。你可以在印刷品中消除它。

for y in range(0,4):
    if answers[y].startswith('!'):
        print(answers[y][1:])
    else:
        print(answers[y])

更加诡异地重写为

for a in answers:
    if a.startswith('!'):
        print(a[1:])
    else:
        print(a)

或实际将其从列表中删除。

answers = [a[1:] if a.startswith('!') else a for a in answers]

另外要注意,您的上一个选项仍然包含文件中的换行符。使用。

消除这一点
keys = questions.read().strip().split('|')