15,299,850 members
1.00/5 (1 vote)
See more:
I'm trying to replace the highlighted block of conditional statements with user defined functions. I tried various methods but they were messing up the loop. I'll be glad if anyone helps me with this problem. Thank you.

What I have tried:

Python
```progress_count = 0
trailer_count = 0
exclude_count = 0
retriever_count = 0

while True:
while True:
try:
#get inputs from user
except ValueError:
print("Integer Required \n")
continue
if pass_credits + defer_credits + fail_credits != 120:
print("Total incorrect \n") #sum of inputs entered should be 120
continue
elif (pass_credits or defer_credits or fail_credits) not in range (0,121,20):
print("Out of range")  #range of entered inputs should be 0,20,40,60...120
continue
else:
#type, total and range of inputs entered are correct
break

#conditions to assess student progess
if pass_credits==120:
print("Progress\n")
progress_count+=1
elif pass_credits==100:
print("Progress (module trailer)\n")
trailer_count+=1
elif fail_credits>=80:
print("Exclude\n")
exclude_count+=1
else:
print("Do not progress - module retriever\n")
retriever_count+=1

#prompting for confirmation to enter more students' data on their progression or quit and view as horizontal histogram
rerun_program = str(input("Would you like to enter another set of data? \nEnter 'y' for yes or 'q' to quit and view results: "))
if rerun_program == 'y':
#loops back to try block to get new data
continue
elif rerun_program == 'q':
print("\nHorizontal Histogram")
print(f"Progress {progress_count} : {progress_count*'*'}")
print(f"Trailer {trailer_count} : {trailer_count*'*'}")
print(f"Retriever {retriever_count} : {retriever_count*'*'}")
print(f"Exclude {exclude_count} : {exclude_count*'*'}")
print(f"{progress_count + trailer_count + retriever_count + exclude_count} outcomes in total.")
#displays the entered data as a horizontal histogram and kills program
break```
Posted
Updated 2-Dec-20 20:45pm
v2

## Solution 1

Why have you reposted this question? I already gave you the answer at While loop malfunctioning?[^]
Member 15009895 2-Dec-20 12:01pm

I'm sorry, I tried it but the prompting user input was looping unlimitedly. Is there any way to rectify that?
Richard MacCutchan 2-Dec-20 12:02pm

Then you should have replied to my suggested solution and explained the problem. There is no need to repost the entire question.

## Solution 2

You might try something like
Python
```def validate_user_input():
success = True
try:
#get inputs from user
except ValueError:
print("Integer Required \n")
success = False
else:
if pass_credits + defer_credits + fail_credits != 120:
print("Total incorrect \n") #sum of inputs entered should be 120
success = False
elif (pass_credits not in range(0,121,20)) or (defer_credits not in range(0,121,20)) or (fail_credits not in range (0,121,20)):
print("Out of range")  #range of entered inputs should be 0,20,40,60...120
success = False
return success, pass_credits, defer_credits, fail_credits

success = False
while not success:
success, pass_credits, defer_credits, fail_credits = validate_user_input()```
v2