我是编程新手,刚刚完成UNI的第一学期课程。在处理我课程的最后细节时,我遇到了一个挑战,我还没有找到关于堆栈溢出的答案。
我有一个名为cL(coloursList)的列表,并试图从该列表中删除一个元素,该元素包含在名为“ colour2”的变量中,该变量由用户使用“ input”通过外壳输入方法。
我发现通过引用元素本身(通过提供元素名称作为字符串)或元素的索引位置来使用list.remove(x)或list.pop(x)从列表中删除元素的方法在列表中。
这就是我正在使用的代码的样子:
# more code before this
cL = ["red", "green", "blue", "magenta", "orange", "pink"]
elif colour2 == colour1:
cL = cL.remove(colour2)
print("\nPlease select a different colour than previous one:\n", cL)
colour2 = str(input("Please re-enter second colour: "))
# more code to follow
基本上我要在这里实现的是,当用户输入第二种或第三种颜色时,会在外壳中提示他,如果他输入了以前从列表中使用过的颜色,则尝试删除从列表中选择该颜色,然后向用户显示新的修改后的列表,这样他就知道自己剩下的颜色可供选择。
很显然,我尝试的这段代码不起作用
cL = cL.remove(colour2)
并且正在尝试查看完成此任务有哪些选择。
非常感谢您!
*******更新包含完整代码(适用于犯罪分子)*******
*******在STACK OVERFLOW社区的帮助下完成了任务*******
cL = ["red", "green", "blue", "magenta", "orange", "pink"]
print("\nAvailable colours to choose from:\n", cL)
colour1 = str(input("Please enter FIRST colour: ")).lower()
while True:
if colour1 not in cL:
print("\nInvalid colour.\nPlease choose a colour from list:\n", cL)
colour1 = str(input("Please re-enter a valid FIRST colour: "))\
.lower()
else:
cL.remove(colour1)
break
print("\nGREAT WORK! Remaining valid colours to choose from are:\n", cL)
colour2 = str(input("Please enter SECOND colour: ")).lower()
while True:
if colour2 not in cL:
print("\nInvalid colour.\nPlease choose a colour from list:\n", cL)
colour2 = str(input("Please re-enter a valid SECOND colour: "))\
.lower()
else:
cL.remove(colour2)
break
这是我完成的颜色输入验证代码的样子(用于第一和第二种颜色)。认为这可能有助于将来完成类似任务的人。
*颜色输入可以是[小写],[大写]或[混合],除非用户在选择任何一种颜色之前选择呈现给他的一种颜色,否则他将被卡在循环,要求他从提供的列表中选择有效的颜色。
答案 0 :(得分:2)
你快到了。
方法list.remove()修改列表,但不返回修改后的列表本身。
因此,如果您执行以下操作:
cL.remove(colour2)
print(cL)
它应该给您想要的答复。
答案 1 :(得分:1)
另一种方法:
colour2 = str(input("Please re-enter second colour: "))
cL = [x for x in cL if x != colour2]
答案 2 :(得分:1)
由于您不仅限于colour2
,而且希望多次这样做,因此我提供了一种更通用的解决方案,该解决方案适用于任意数量的输入,除非您输入q
>
cL = ["red", "green", "blue", "magenta", "orange", "pink"]
deleted = []
while True:
colour = input("Please enter a colour to delete: (press q to quit)")
if colour == 'q':
break
if colour not in deleted:
cL.remove(colour)
deleted.append(colour)
else:
print ("%s already deleted. Try entering another color" %colour)
示例输出
Please enter a colour to delete: (press q to quit)red
Please enter a colour to delete: (press q to quit)red
red already deleted. Try entering another color
Please enter a colour to delete: (press q to quit)green
Please enter a colour to delete: (press q to quit)pink
Please enter a colour to delete: (press q to quit)red
red already deleted. Try entering another color
Please enter a colour to delete: (press q to quit)green
green already deleted. Try entering another color
Please enter a colour to delete: (press q to quit)q
答案 3 :(得分:0)
因此,据我了解,您有一个颜色列表,并且您希望用户开始从该列表中选择颜色,并且如果用户选择的颜色不在列表中,或者已经选择了一种颜色,它应该告诉他选择其他颜色。
如果是这种情况,它将是这样
colors_list = ["red", "green", "blue", "magenta", "orange", "pink"]
colors_chosen = []
while colors_list:
print("Please select a color from this list: {}".format(colors_list))
color_selected = input()
while color_selected not in colors_list:
print("The color selected is not one of the options")
print("Please select a color from this list: {}".format(colors_list))
color_selected = input()
colors_list.remove(color_selected)
colors_chosen.append(color_selected)
print("These are the colors you chose: {}".format(colors_chosen))
所以我们正在做的是拥有所有可能颜色的列表,并且正在使用一个循环,该循环将在此列表不为空的情况下重复进行(如果您将while循环替换为for循环,只希望用户选择n种颜色而不是所有颜色)。在该循环内,我们将询问用户颜色,如果不是列表内的颜色,它将进入while循环,直到用户选择列表内的有效颜色。一旦用户选择了有效的颜色,我们将从列表中删除该颜色,并将其添加到列表中,以存储用户选择的颜色。重复此过程,直到颜色列表为空为止。
如果用户键入的不是颜色(例如“汽车”或类似名称),或者键入的是先前选择的颜色,则可能要显示不同的消息。为此,您需要检查用户键入的单词是否不在颜色列表中,而是在所选单词列表中,然后打印“您不能选择已经选择的单词!”,如果它不在两个列表中,则打印“您必须选择一种实际的颜色!”。
希望有帮助!