我如何修改我的代码,以便用户可以输入相同的颜色四次,但没有任何超出我的列表范围?

2024-09-29 23:26:16 发布

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

#Colours

colourRange = ["red", "green", "blue","yellow", "magenta","cyan"]
print("Please enter colours from: ", colourRange)
colour1 = input("Please press Enter after you have entered your colour\n\
Enter your 1st colour?: ")
colour2 = input("Enter 2nd colour?: ")
colour3 = input("Enter 3rd colour?: ")
colour4 = input("Enter 4th colour?: ")
colour = [colour1,colour2,colour3,colour4]

#loop for four colour choice within list     

for i in range(4):
    while colour[i] not in colourRange:
        print(colour[i], "is not a valid colour, please \
            select another from :  ", colourRange)
        colour[i] = (input("Replace with: "))
    else:
        colourRange.remove(colour[i])

Tags: infromforinputyournotprintenter
1条回答
网友
1楼 · 发布于 2024-09-29 23:26:16

如果您编写一个函数来获取一种有效的颜色,然后多次调用它,那么这就简单多了。你知道吗

def get_colour(prompt, valid_colours):
    """Allow the user to enter a single valid colour."""
    while True:
        colour = input(prompt)
        if colour in valid_colours:
            return colour
        print("Not a valid colour.")

def get_colours(n, valid_colours):
    """Get n valid colours from the user."""
    return [get_colour("Input colour {}: ".format(i+1), valid_colours) 
            for i in range(n)]

colours = get_colours(4, {"red", "green", "blue", "yellow", "magenta", "cyan"})

请注意:

  • nvalid_colours是参数,使代码更加灵活和可重用
  • 我使用了list comprehension来简化代码
  • valid_colours是一个set,这使得成员资格测试(colour in valid_colours)更快(O(1)对元组或列表而言,O(n));以及
  • 我使用了str.format而不是连接+。你知道吗

使用中:

>>> colours = get_colours(4, {"red", "green", "blue", "yellow", "magenta", "cyan"})
Input colour 1: purple
Not a valid colour.
Input colour 1: cyan
Input colour 2: green
Input colour 3: yellow
Input colour 4: red
>>> colours
['cyan', 'green', 'yellow', 'red']

相关问题 更多 >

    热门问题