вывод для мин / макс иногда правильный, а иногда нет - PullRequest
0 голосов
/ 13 апреля 2020

Итак, я пишу основную c программу, и часть вывода состоит в указании самого низкого и самого высокого числа, которое ввел пользователь. По какой-то причине min и max являются правильными в некоторых случаях, а не в других. И я не могу понять какой-либо шаблон, когда это правильно или неправильно (не обязательно, когда наименьшее число является первым или последним и т. Д. c). Все остальное работает отлично, и код работает нормально каждый раз. Вот код:

total = 0
count = 0
lst = []
while True:
    x = input("Enter a number: ")
    if x.lower() == "done":
        break
    if x.isalpha():
        print("invalid input")
        continue
    lst.append(x)
    total = total + int(x)
    count = count + 1
    avg = total / count

print("The total of all the numbers your entered is: " + str(total))
print("You entered " + str(count) + " numbers.")
print("The average of all your numbers is: " + str(avg))
print("The smallest number was: " + str(min(lst)))
print("The largest number was: " + str(max(lst)))

Есть идеи? Имейте в виду, что я (очевидно) довольно рано в своем исследовании кодирования. Спасибо!

Ответы [ 2 ]

1 голос
/ 13 апреля 2020

Если в конце вашей программы вы добавите:

print("Your input, sorted:", sorted(lst))

, вы должны увидеть lst в том порядке, в котором Python считает, что сортируется.

You ' Вы заметите, что это не всегда будет соответствовать тому, что вы считаете отсортированным.

Это потому, что вы считаете lst отсортированным, когда элементы расположены в числовом порядке. Тем не менее, элементы не являются числами; когда вы добавляете их к lst, они являются строками, и Python обрабатывает их как таковые, даже если вы вызываете min(), max() и sorted() для них.

Способ Чтобы решить вашу проблему, добавьте int s в список lst, изменив строку с:

lst.append(x)

на:

lst.append(int(x))

Внесите эти изменения и увидите если это поможет.

PS: Вместо того, чтобы вызывать str() для всех этих целочисленных значений в ваших операторах печати, например:

print("The total of all the numbers your entered is: " + str(total))
print("You entered " + str(count) + " numbers.")
print("The average of all your numbers is: " + str(avg))
print("The smallest number was: " + str(min(lst)))
print("The largest number was: " + str(max(lst)))

, вы можете воспользоваться тем, что Python * print() функция будет печатать каждый аргумент отдельно (по умолчанию разделенный пробелом). Так что используйте это вместо этого, что проще и немного проще для чтения:

print("The total of all the numbers your entered is:", total)
print("You entered", count, "numbers.")
print("The average of all your numbers is:", avg)
print("The smallest number was:", min(lst))
print("The largest number was:", max(lst))

(И если вы хотите, вы можете использовать f-strings. Но вы можете посмотреть это самостоятельно.)

0 голосов
/ 13 апреля 2020

Вы преобразуете свои данные в int, когда добавляете их к итогу, но не когда вы находите min и max.

При заданных строках min и max возвращаемые значения основаны на алфавитном порядке , который иногда может соответствовать числовому размеру, но в общем случае не соответствует.

Все, что вам нужно сделать, это добавить ввод как int s.

total = 0
count = 0
lst = []
while True:
    x = input("Enter a number: ")
    if x.lower() == "done":
        break
    if x.isalpha():
        print("invalid input")
        continue
    lst.append(int(x)) # this should fix it.
    total = total + int(x)
    count = count + 1
    avg = total / count

Возможно, вы также захотите использовать форматирование строки для печати ваших ответов:

print(f"The total of all the numbers your entered is: {total}")
print(f"You entered {count} numbers.")
print(f"The average of all your numbers is: {avg}")
print(f"The smallest number was: {min(lst)}")
print(f"The largest number was: {max(lst)}")
...