接受列表中的多个元素

问题描述 投票:0回答:3

我想从列表中输入多个元素并让程序打印准确的“pointCount”数量。如果我从任一列表中输入一个元素(例如“a”= 1 点,“f”= 3 点),它就会起作用。问题是,例如,如果我输入“咖啡馆”之类的内容,程序只会打印出“0 分”而不是“7 分”。

onePointLetters = ["a", "b", "c"]
twoPointLetters = ["d", "e"]
threePointLetter = ["f"]
enterLetter = input("Enter a letter: ").lower()
while enterLetter != "stop":
    pointCount = 0
    if enterLetter in onePointLetters:
        pointCount += 1
    if enterLetter in twoPointLetters:
        pointCount += 2
    if enterLetter in threePointLetter:
        pointCount += 3
    print("You have a total of " + str(pointCount) + " points!")
    enterLetter = input("Enter another letter: ").lower()

我尝试了另一种编码选择。

onePointLetters = ["a", "b", "c"]
twoPointLetters = ["d", "e"]
threePointLetter = ["f"]
enterLetter = input("Enter a letter: ").lower()
while enterLetter != "stop":
    pointCount = 0
    for onePointLetters in enterLetter:
        pointCount += 1
    for twoPointLetters in enterLetter:
        pointCount += 2
    for threePointLetter in enterLetter:
        pointCount += 3
    print("You have a total of " + str(pointCount) + " points!")
    enterLetter = input("Enter another letter: ").lower()

如果我保留其中一个“for”循环,后者似乎会按预期工作。但如果我保留所有三个,程序只会将所有值相加并最终为输入的每个字母得到 6 分(d = 6 分,afe = 18 分)。

对此有更好的解决方案吗?

python python-3.x
3个回答
1
投票

你的第一个代码有效,但你应该在 while 循环之外初始化 pointCount

我建议为此使用字典:

letterPoints = {"a":1, "b":1, "c":1, "d":2, "e":2, "f":3}
pointCount   = 0
while True:
    enterLetter  = input("Enter a letter: ").lower()
    if enterLetter == "stop": break
    pointCount  += letterPoints.get(enterLetter,0)
    print("You have a total of", pointCount, "points!")

0
投票

您的第一次编码尝试检查输入是否在点列表中。 “a”在列表中,因此得一分。 “f”也在列表中,因此得 3 分。但是,“咖啡馆”不在任何列表中。

你需要找到一种方法来遍历输入单词的每个字母,并检查它们应该添加到 pointsCounter 的点数。

onePointLetters = ["a", "b", "c"]
twoPointLetters = ["d", "e"] 
threePointLetters = ["f"]
enterWord = input("Enter a letter: ").lower()

while enterWord != "stop":
    pointCount = 0

    # Loop through every letter of the word entered
    for letter in enterWord:
        # Adds points to pointCount according to the pointsystem
        if letter in onePointLetters:
            pointCount += 1
        elif letter in twoPointLetters:
            pointCount += 2
        elif letter in threePointLetters:
            pointCount += 3
    print("You have a total of " + str(pointCount) + " 
    points!")
    enterWord = input("Enter another letter: ").lower()

0
投票

是的,您可以使用字典将每个字母映射到其对应的分值。这是一个使用字典的示例代码:

pointValues = {'a': 1, 'b': 1, 'c': 1, 'd': 2, 'e': 2, 'f': 3}

enterLetter = input("Enter a letter: ").lower()
while enterLetter != "stop":
    pointCount = 0
    for letter in enterLetter:
        if letter in pointValues:
            pointCount += pointValues[letter]
    print("You have a total of " + str(pointCount) + " points!")
    enterLetter = input("Enter another letter: ").lower()

此代码创建一个字典 pointValues ,将每个字母映射到其对应的点值。然后,对于用户输入的每个字母,代码检查该字母是否在字典中,如果在,则将其分值添加到总 pointCount 中。这样,您就不需要为每个点值都有单独的列表,并且代码可以处理包含多个字母的输入字符串。

© www.soinside.com 2019 - 2024. All rights reserved.