如何在列表中添加内容,但首先检查它是否已经存在

2024-09-29 23:19:31 发布

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

所以我有一个名为线索的列表,其中包括字母和符号配对,用户可以添加到。。。但是,在用户向列表中添加新的符号和字母配对之前,我希望程序检查这个配对是否已经存在于线索中。如果出现,则会显示一条消息,说明“此配对已存在,请重试”。你知道吗

这是我到目前为止的代码。。。你知道吗

#PROCEDURE FOR ADDING A NEW PAIRING
def add_pairing(clues):
addClue = False
#USER INPUTS A LETTER AND SYMBOL
letter=input("What letter would you like to add?  ").upper()

symbol=input("\nWhat symbol would you like to pair with  ").upper()
userInput= letter + symbol
#GOES THROUGH CLUES TO SEE IF THE PAIRING HAS ALREADY BEEN ENTERED
for clue in clues:
#IF THE CLUE HAS ALREADY BEEN ADDED, IT WILL PRINT A MESSAGE        
    if letter in clues:
        print("The letter either doesn't exist or has already been entered ")
        break
    elif symbol in clues:
        print("The letter either doesn't exist or has already been entered")

    elif len(userInput) ==1:
        print("You can only enter one character")

#IF THE CLUE DOESN'T EXIST IN CLUES, IT WILL GO TO THE else STATEMENT       
    else:
        newClue = letter + symbol
        addClue = True
if addClue == True:
    clues.append(newClue)
    #PRINTS MESSAGE SAYING THAT THE PAIRING HAS BEEN ADDED
    print("The pairing has been added")
#PRINTS CLUES AFTER THE PAIRING HAS BEEN ADDED
    print (clues)
return clues

Tags: theinaddedifsymbolhasprintbeen
2条回答

您正在检查if letter in clueselif symbol in clues:,您想要的是in clue,没有s。否则,为什么要循环?你知道吗

这就是为什么你会看到DUP。不过,还有许多其他问题,例如:

  • 每次遍历列表的代价很高(O(n))。使用一组字母和一组符号,检查变成O(1)。如果这些“线索”之间有任何联系——用字典或其他结构来实现——但将它们串联起来并将它们放入一个列表似乎是最不合适的解决方案。你知道吗
  • 你在写userInput= letter + symbol然后elif len(userInput) ==1:。这是错误的检查-如果用户输入多个字符,其长度将超过2,而不是1。你知道吗
  • 不管怎样,为什么要在回路里检查呢?一张支票就够了。你知道吗
  • 为什么breakif letter in clues:而不是在elif symbol in clues:?你知道吗

字典是这样一对值的理想对象:

clues = dict()
while True:
    letter = input("What letter would you like to add?  ").upper()
    if letter == "":
        break        
    symbol = input("\nWhat symbol would you like to pair with  ").upper()

    if letter not in clues.keys() and symbol not in clues.values():
        clues[letter]=symbol
    else:
        print("Letter or symbol already paired")

print(clues)

相关问题 更多 >

    热门问题