import random
menu = []
input_menu = input("add your menu: ")
menu.append(input_menu)
while len(input_menu) > 0:
input_menu = input('add more menu(if not, enter): ')
menu.append(input_menu)
print(menu)
print("Today's menu:", random.choice(menu))
我想避免输入相同的菜单,而是要显示一条消息-> print(“它已经在列表中”)
ex)当我输入“鸡”时,如果列表中已经有“鸡”,则显示消息并返回输入
,这是最短的代码吗?还是可以缩短此代码?
答案 0 :(得分:0)
搜索列表中的项目是O(n)解决方案(请参见对问题的@Austin's评论)。相反,使用set
会导致您失去输入菜单的顺序。第二个缺点是,您不能将set
放入random.choice
中,因为set
不支持索引。
但是,您可以将菜单项与菜单列表结合使用,并检查新项是否在菜单项中,否则将其添加到列表和菜单项中。
那样您就可以
缺点:一组使用一些内存
import random
def PrettyPrintMenu(m):
print("\nMenu", *m, sep="\n - ")
menu = []
input_menu = input("add your menu: " )
menu.append(input_menu)
unique = {input_menu} # set of menu items, we check it to avoid dupes
# PrettyPrintMenu(menu) # uncomment to get a printout here as well
while True:
input_menu = input('add more menu(if not, enter): ')
if not input_menu: # empty strings are Falsy
break # leave while
if input_menu in unique:
print("\n'{}' is already on the menu.".format(input_menu))
else:
menu.append(input_menu)
unique.add(input_menu)
PrettyPrintMenu(menu)
print("\nToday`s menu:", random.choice(menu))
输出:
add your menu: soup
add more menu(if not, enter): eggs
Menu
- soup
- eggs
add more menu(if not, enter): chicken
Menu
- soup
- eggs
- chicken
add more menu(if not, enter): chicken
'chicken' is already on the menu.
Menu
- soup
- eggs
- chicken
add more menu(if not, enter): dessert
Menu
- soup
- eggs
- chicken
- dessert
add more menu(if not, enter):
Today`s menu: chicken
我利用print()
的选项为菜单添加了漂亮的打印机答案 1 :(得分:-1)
您的实现不是您想要的输出的正确实现。我修改并修复了您的代码:
import random
menu = []
while True:
input_menu = input("add your menu(if you are done, press enter):")
menu.append(input_menu)
if len(menu) != len(set(menu)):
menu = list(set(menu))
print("It's already in the list. Please try again.")
elif len(input_menu) == 0:
break
print("Today's menu:", random.choice(menu))
希望它会有所帮助:)