i am writing an interactive program that displays y/n after selecting the option. if at begining itself i press s or c the while loop terminates. if i select some no first time "say 5" the 5th option turns to y but after that if i press "s" or "c" it shows the 5th entry as "n" and the program is not exited. not sure what's going wrong. beginner question.(alternate solution is also appretiated, can't import other packages as well)
import os,time
selected_list=[]
def px_filter_menu(num):
os.system("clear")
data = ["p1","p2","p3","p4","p5","p6","p7","p8","p9","p10","p11","p12","p13","p14","p15","p16","p17","p18","p19","p20","p21","p22","p23","p24","p25","p26"]
print("============================================================================\n= Filter selection menu")
print("============================================================================\n\n")
gap =5
for count , item in enumerate(data, 1):
if count <10:
if data[count-1] in selected_list:
print("{0}. {1} {2}".format(count,item.ljust(gap),"[y]"))
else:
print("{0}. {1} {2}".format(count,item.ljust(gap),"[n]"))
else:
if data[count-1] in selected_list:
print("{0}. {1} {2}".format(count,item.ljust(gap),"[y]"))
else:
print("{0}. {1} {2}".format(count,item.ljust(gap),"[n]"))
print("\n\n[S] save and exit")
print("\n\n[C] if you press C and wish to make changes please remove the PX and add again\n")
input = raw_input("enter the desired number ")
if len(input.strip()) ==0:
print("first")
time.sleep(2)
px_filter_menu(-1)
while True:
if input.upper()=="S":
print("5")
time.sleep(2)
break
elif input.upper()=="C":
del selected_list[:]
#by default all protocol goes
print("6")
time.sleep(2)
break
elif input.isdigit() and data[int(input)-1] in selected_list:
print(input)
selected_list.remove(data[int(input)-1])
print("3")
time.sleep(2)
px_filter_menu(-1)
elif input.isdigit():
selected_list.append(data[int(input)-1])
print("4")
time.sleep(2)
px_filter_menu(-1)
else:
px_filter_menu(-1)
return
px_filter_menu(-1)
.upper()in inputinput = raw_input("enter the desired number ")break. That there’s a recursive call in there is irrelevant.while True:you get an input that lets you recuse into antoher version of yourself getting a newinput- if you now break you are back into the 1stwhile Trueand can not escape IT because you never reset itsinput. BTW the "design" is not what you want to do - use a straight loop - not a recursion.