#python
Вопрос:
Вот мой код:
def main(): number = None quit = False while(not quit): choice = getSelection() if(choice == 'G'): # get a number number = getANumber() elif(choice == 'S'): # current sum currSum(number) elif(choice == 'A'): # current avg currAvg(number) elif(choice == 'H'): # highest number currHighest(number) elif(choice == 'L'): # lowest number currLowest(number) elif(choice == 'Q'): # quit print('Thanks for using the program!') quit = True pause() else: print('Invalid selection. Pick only from the menu.') pause() def displayMenu(): print("n"*50, "=== The Menu ===") print("G] Get a number") print("S] Display current sum") print("A] Display current average") print("H] Display the current highest number") print("L] Display the current lowest number") print("Q] Quit") print("n" * 2) def getSelection(): displayMenu() result = input("Enter your selection: ") return result def getANumber(): result = int(input("Enter a number, please: ")) return result def currSum(num): if(num is None): print("Go back and enter a number first...") pause() return print("The current sum is: ", sum(num)) pause() def currAvg(num): if(num is None): print("Go back and enter a number first...") pause() return avg = sum(num) / len(num) print("The current avgerage is: ", round(avg,2) ) pause() def currHighest(num): if(num is None): print("Go back and enter a number first...") pause() return print("The current highest is: ", max(num)) pause() def currLowest(num): if(num is None): print("Go back and enter a number first...") pause() return print("The current lowest is: ", min(num) pause() def pause(): x = input("npress any key to continue....n") main()
Ошибка:
Traceback (most recent call last): File "d:pythonProjectweek11menuFuncc.py", line 85, in lt;modulegt; main() File "d:pythonProjectweek11menuFuncc.py", line 10, in main currSum(number) File "d:pythonProjectweek11menuFuncc.py", line 51, in currSum print("The current sum is: ", sum(num)) TypeError: 'int' object is not iterable
У меня есть проект школьного кодирования, в котором мне нужно сохранить ввод от пользователя, а затем найти сумму, среднее, максимальное и минимальное количество чисел, используя эту программу типа меню, желательно, чтобы профессор хотел этого без использования списка, но я, похоже, не могу работать без него. Я понятия не имею, как преодолеть эту ошибку, и я читал некоторые другие сообщения об этой ошибке, но почему-то не могу ее преодолеть.
Комментарии:
1. вероятно, происходит по адресу
sum(num)
. Что это должно сделать? если вы вводите номер внутри2.
num
это одно число. Нет смысла звонитьsum()
по одному номеру.3. @Mahrkeenerh Предполагалось суммировать числа, как только «S» будет набрано с числом, хранящим несколько чисел в списке.
4. вы все время переписываете номер, это не список
5. и если вы хотите сделать это без списков (которые вы должны делать), вы должны отслеживать число, сумму, а также количество чисел, которые уже были введены , таким образом, вам не нужно использовать
sum()
avg()
или что-то в этом роде
Ответ №1:
проблема в том , что функции, которые вы используете, такие как sum (), avg() и т.д., Не работают с одним целым числом.
Функция sum() возвращает число, сумму всех элементов в повторяемом.
Чтобы это сработало, вам нужно пройти небольшое руководство по этому вопросу.
Кроме того, зная тот факт, что ваш профессор запретил вам использовать этот список, это означает (на мой взгляд), что он/она также хочет, чтобы вы вручную рассчитали необходимый материал для повышения ваших навыков программирования.
Я исправил ваш код ниже:
def main(): global cur_sum global no_of_digits global highest_num global lowest_num cur_sum = 0 no_of_digits = 0 number = None quit = False while (not quit): choice = getSelection() if (choice == 'G'): # get a number number = getANumber() no_of_digits = 1 cur_sum = number if no_of_digits == 1: highest_num = number lowest_num = number prev_number = number if number gt; prev_number: highest_num = number elif number lt; prev_number: lowest_num = number prev_number = number elif (choice == 'S'): # current sum currSum(number) elif(choice == 'A'): # current avg currAvg(number) elif(choice == 'H'): # highest number currHighest(number) elif(choice == 'L'): # lowest number currLowest(number) elif(choice == 'Q'): # quit print('Thanks for using the program!') quit = True pause() else: print('Invalid selection. Pick only from the menu.') pause() def displayMenu(): print("n" * 50, "=== The Menu ===") print("G] Get a number") print("S] Display current sum") print("A] Display current average") print("H] Display the current highest number") print("L] Display the current lowest number") print("Q] Quit") print("n" * 2) def getSelection(): displayMenu() result = input("Enter your selection: ") return result def getANumber(): result = int(input("Enter a number, please: ")) return result def currSum(num): if (num is None): print("Go back and enter a number first...") pause() else: print("The current sum is: ", cur_sum) pause() def currAvg(num): if (num is None): print("Go back and enter a number first...") pause() return avg = cur_sum/no_of_digits print("The current avgerage is: ", round(avg, 2)) pause() def currHighest(num): if (num is None): print("Go back and enter a number first...") pause() print("The current highest is: ", highest_num) pause() def currLowest(num): if (num is None): print("Go back and enter a number first...") pause() print("The current lowest is: ", lowest_num) pause() def pause(): x = input("npress any key to continue....n") main()
Две вещи, которые я сделал не так, как ты :
- объявил переменные глобальными перед кодом, чтобы я мог получить к ним доступ в любом месте программы.
- вручную рассчитал сумму , среднее , наибольшее и наименьшее числа.
Кроме того, ваш код был хорош в целом, за исключением незначительной ошибки, о которой я говорил выше 🙂
Комментарии:
1. Большое спасибо, я не думал об использовании глобальных переменных, и теперь ваш способ действительно имеет смысл использовать ручные вычисления!