(Nov-24-2017, 11:41 PM)Austin11 Wrote: I changed up my code to take away the extra while loop and include it in the first while statement when the user puts in a negative it works great. However, when they put in a string I receive a ValueError like below. I have a feeling it has to do with my is_actual_float function but I can't seem to figure out where. I tried changing things around but it didn't work.
Traceback (most recent call last): File "C:/Users/Eman/Desktop/lab5_2/lab5.py", line 82, in <module> main() File "C:/Users/Eman/Desktop/lab5_2/lab5.py", line 75, in main pints_collected = get_pints_for_drive() File "C:/Users/Eman/Desktop/lab5_2/lab5.py", line 24, in get_pints_for_drive pints = float(input("Enter pints collected: ")) ValueError: could not convert string to float: 'Im lost'Also, I tried your second recommendation with the max and min and for some reason, I keep getting an error message whether it be the format you gave me or the python shortcuts. I know your format is correct along with the python shortcuts. In short, I just need a quick explanation of what the following error message means. I've looked on the internet and just cannot find a concrete answer.
Traceback (most recent call last): File "C:/Users/Eman/Desktop/lab5_2/lab5.py", line 82, in <module> main() File "C:/Users/Eman/Desktop/lab5_2/lab5.py", line 77, in main maximum = max(pints_collected) TypeError: 'float' object is not iterable
For the ValueError, this is indeed a problem with your is_actual_float function, or rather a problem with it not being able to check for a string using the Try and Except method reliably. To fix this is easy enough, remove the "try" and "except" from the is_actual_float function and move it to your get_pints_for_drive function as follows:
try: pints = int(input("Enter pints collected: ")) if is_actual_float(pints): counter += 1 pints_collected += pints pints_data.append(pints) pints_data.sort() else: print("Please try again.") except ValueError: print("Please try again.")As for the min and max error, the error you are getting is because floats are not iterable, and max() is trying to iterate through pints_collected, which in my script is a float, not a list, you'd have to call max(pints_data) for that to work. (Floats are not iterable)
I've done this for my own testing and everything seems to be working perfectly, this obviously isn't the complete code just snippets of what is relevant. Side note, I would use [-1] to call the last number in our list instead of [6].
def get_pints_for_drive(pints_data = [], pints_collected = 0): # Python Stuff return pints_collected, pints_data def get_average(pints_collected): average_pints = round(pints_collected / 7,2) return average_pints def get_max(pints_data): max_pints = pints_data[-1] return max_pints def get_min(pints_data): min_pints = pints_data[0] return min_pints def display_information(average,maximum,minimum): print(average,maximum,minimum) def main(): done = False while not done: pints_collected, pints_data = get_pints_for_drive() average = get_average(pints_collected) maximum = get_max(pints_data) minimum = get_min(pints_data) display = display_information(average,maximum,minimum) done = prompt_done()