我有两个功能,一个功能检查是否要向字典中添加任何项目,然后检查该项目的值是什么并将该数据保存到文件中。如果您完成了向字典中添加新项目的操作,它将移至下一个功能,该功能检查您是否要更改任何现有项目的值。如果一切顺利,则可以命令程序退出。
我的问题是创建while循环并使其调用第一个函数并运行它,但是当您没有更多要添加的项目时,我需要它来调用下一个函数并确保您不需要更改任何值当前存在的项目。然后,当放入exit命令时,它将退出while循环,并退出程序。我无法弄清楚如何使while循环确定第一个函数结束并调用下一个函数。
我通过使用递归和无while循环使程序正常工作。但是有人告诉我那很草率。当我在while循环中构建函数时,我也使它起作用,但是它们告诉我这也很草率。因此,我试图在构建函数之后进行while循环,并在其中调用函数。预先感谢,希望我的问题很清楚。
# current dictionary
itemNames = {}
# checks if you want to add to your dictionary
def addToDictionary():
checkIF_newItems = raw_input("Add new item? 'YES' or 'NO' \n ").upper()
if checkIF_newItems.startswith("Y"):
newItems = raw_input("What type of item would you like to add today? \n")
newItems_Name = raw_input("What is the value of your new item? \n")
itemNames[newItems] = newItems_Name
return True
elif 'PRINT' in checkIF_newItems:
print "These are your current items. \n\n"
return True
elif checkIF_newItems.startswith("N"):
print("OKAY")
exit()
elif 'Exit' in checkIF_newItems:
exit()
# checks if you want to edit your current dictionary
def check_forChanges():
#checks user intent and if YES prints current keys
checkIf = raw_input("Change item value? 'YES' 'NO' 'EXIT' 'ADD' 'PRINT' \n").upper()
print("\n")
if checkIf.startswith("Y"):
for i in itemNames.keys():
print i
print("\n")
#finds what key to access and ask for its new value
itemChoice = raw_input("what item would you like to change the value of? \n")
return True
if itemChoice in itemNames.keys():
newName = raw_input("What is the new value? \n")
itemNames[itemChoice] = newName
print("You've changed your " + itemChoice + "'s value to " + newName + ".")
return True
print('\n')
return True
#if NO then checks to exit
elif checkIf.startswith("N"):
CLOSE = raw_input("OKAY then, would you like to exit? ").upper()
if CLOSE.startswith('Y'):
exit()
return False
elif EXIT.startswith('N'):
check_forChanges()
elif EXIT is 'print':
for i in itemNames:
print i
return True
# goes back to first function
elif 'ADD' in checkIf:
addToDictionary()
return True
#prints current values
elif 'PRINT' in checkIf:
for i in itemNames.values():
print i
return True
elif 'EXIT' in checkIf:
exit()
return False
# main routine
validIntro = False
while not validIntro:
addToDictionary()
if addToDictionary() == False:
continue
else:
exit()
check_forChanges()
if check_forChanges() == False:
break
else:
continue
但是我希望能够运行该程序,直到用户决定退出为止。我也希望单个while循环可以调用我的两个函数,但仅在必要时才调用。
答案 0 :(得分:0)
我的问题是创建while循环并使其调用第一个函数并运行它,但是当您没有更多要添加的项目时,我需要它来调用下一个函数并确保您不需要更改任何值当前存在的项目。然后,当放入exit命令时,它将退出while循环,并退出程序。我不能找出如何使while循环确定第一函数结束,调用下一个。
听起来您想继续添加到词典中,直到用户说“没什么可添加的”,然后检查值直到用户退出。看起来像这样:
while addToDictionary(): pass
while check_forChanges(): pass
当当前操作完成时,您必须将现有函数修改为False,并且在用户要求退出时调用sys.exit()
。尽管我认为您不需要退出-如果他们不想添加或检查,那么就完成了,循环已经终止。
您是否曾经希望用户在调用check_forChanges之后添加到词典中?如果是,但是您仍然要强制执行添加操作,然后进行检查,然后再添加更多内容,那么您希望在整个过程中进行循环:
keep_looping = True
while keep_looping:
while addToDictionary(): pass
while check_forChanges(): pass
keep_looping = askToContinue()