Posts: 3
Threads: 1
Joined: Dec 2020
Dec-21-2020, 11:18 AM
(This post was last modified: Dec-21-2020, 11:23 AM by buran.)
my code:
largest = None
smallest = None
while True:
num = input("Enter a number: ")
if num == "done" :
break
try:
num1 = int(num)
except ValueError:
print('Invalid input')
continue
for number1 in num:
if largest is None:
largest = number1
elif largest > number1:
largest = number1
print("Maximum is", largest)
for number2 in num:
if smallest is None:
smallest = number2
elif smallest < number2:
smallest = number2
print("Minimum is", smallest) My desired output would be if I used 2,8,9,python,4,10 would be:
Invalid input
Maximum is 10
Minimum is 2
But my output shows:
Invalid input
Maximum is d ← Mismatch
Minimum is o ← Mismatch
d and o are from word done
buran write Dec-21-2020, 11:23 AM:Please, use proper tags when post code, traceback, output, etc. This time I have added tags for you.
See BBcode help for more info.
Posts: 1,358
Threads: 2
Joined: May 2019
You are using num for the input, then expect that num will end up being the list that you can cycle over, and you also never append the integer to the list.
Minor changes, try:
largest = None
smallest = None
num = []
while True:
num_input = input("Enter a number: ")
if num_input == "done" :
break
try:
num1 = int(num_input)
num.append(num1)
except ValueError:
print('Invalid input')
continue
for number1 in num:
if largest is None:
largest = number1
elif largest > number1:
largest = number1
print("Maximum is", largest)
for number2 in num:
if smallest is None:
smallest = number2
elif smallest < number2:
smallest = number2
print("Minimum is", smallest) Output: Enter a number: 2
Enter a number: 8
Enter a number: 9
Enter a number: python
Invalid input
Enter a number: 4
Enter a number: 10
Enter a number: done
Maximum is 2
Minimum is 10
Posts: 1,358
Threads: 2
Joined: May 2019
Oh, and btw - you reverse minimum and maximum as shown in results above.
Posts: 2,131
Threads: 11
Joined: May 2017
Hint: Use a function to split user-input and logic to get minimum and maximum.
def get_number():
"""
Helper function to get one int from user input
"""
while True:
num_input = input("Enter a number: ")
if num_input.lower() == "done":
return None
try:
return int(num_input)
except ValueError:
print('Invalid input')
def get_min_max():
"""
Primitive implementation using a list with min and max.
"""
numbers = []
while True:
number = get_number()
if number is None:
break
numbers.append(number)
return min(numbers), max(numbers)
def get_min_max_oneshoot():
"""
Returns minimum and maximum of entered ints.
The ints itself are not stored in a list.
"""
first_run = True
minimum = None
maximum = None
while True:
number = get_number()
if number is None:
break
if first_run:
first_run = False
minimum = number
maximum = number
continue
minimum = min(number, minimum)
maximum = max(number, maximum)
return minimum, maximum
min_value_1, max_value_1 = get_min_max_oneshoot()
# min_value_2, max_value_2 = get_min_max() The function get_min_max is the easier implementation.
get_min_max_oneshoot is like your implementation, but without storing any history values.
You get only min and max, all other values are not stored.
Posts: 3
Threads: 1
Joined: Dec 2020
(Dec-21-2020, 01:09 PM)jefsummers Wrote: Oh, and btw - you reverse minimum and maximum as shown in results above.
Thank you for your help, my head almost exploded from this one.
Posts: 3
Threads: 1
Joined: Dec 2020
(Dec-21-2020, 01:51 PM)DeaD_EyE Wrote: Hint: Use a function to split user-input and logic to get minimum and maximum.
def get_number():
"""
Helper function to get one int from user input
"""
while True:
num_input = input("Enter a number: ")
if num_input.lower() == "done":
return None
try:
return int(num_input)
except ValueError:
print('Invalid input')
def get_min_max():
"""
Primitive implementation using a list with min and max.
"""
numbers = []
while True:
number = get_number()
if number is None:
break
numbers.append(number)
return min(numbers), max(numbers)
def get_min_max_oneshoot():
"""
Returns minimum and maximum of entered ints.
The ints itself are not stored in a list.
"""
first_run = True
minimum = None
maximum = None
while True:
number = get_number()
if number is None:
break
if first_run:
first_run = False
minimum = number
maximum = number
continue
minimum = min(number, minimum)
maximum = max(number, maximum)
return minimum, maximum
min_value_1, max_value_1 = get_min_max_oneshoot()
# min_value_2, max_value_2 = get_min_max() The function get_min_max is the easier implementation.
get_min_max_oneshoot is like your implementation, but without storing any history values.
You get only min and max, all other values are not stored.
Thank you for the help, I appreciate it.
|