Возврат значения в основную функцию - PullRequest
0 голосов
/ 12 ноября 2018

Моя цель:

  1. принять ввод (пока пользователь не введет 0) или выйти (если введена буква),
  2. выполнить несколько проверок, чтобы выбросить нецелые числа,
  3. добавить эти значения в список и
  4. затем выведите сумму списка.

Я пытаюсь перехватить логическое значение для закрытия переменных в main, но получаю ошибку.

Ошибка: "close = addToList () Ошибка типа: addToList () отсутствует 1 требуется позиционный аргумент: 'numberList'. "

#function to create a list
def createList():
    numberList = []
    return numberList

#function to add integers from user to list
def addToList(numberList):
    stopAdding = False
    close = False
    while stopAdding == False:
        integerInput = input("Please enter a number [1-9] or '0' to stop: ")
        if integerInput.isalpha():
            badInput()
            close = True
            break        
        elif integerInput == '0':
            stopAdding = True       
        else:
            numberList.append(int(integerInput))
    if close == True:
        return close
    else:
        return numberList

#function for when invalid number entered
def badInput():  
    print("Invalid number entered.")


#function to sum the numbers in list
def sumList(numberList):
    sumTotal = 0
    for number in numberList:
        sumTotal = sumTotal + number
    return sumTotal

#function to print the list sum
def printSum(sumTotal):
    print("The sum is: ", sumTotal)


#the main function
def main():
    numberList = createList()
    addToList(numberList)

    sumTotal = sumList(numberList)

    close = addToList()
    if close == True:
        pass
    else:
        printSum(sumTotal)



#call main
main()

Что может быть лучше для грациозного выхода, если введено нецелое число? Благодаря.

Ответы [ 3 ]

0 голосов
/ 12 ноября 2018

Измените вашу main функцию, чтобы она выглядела следующим образом;

def main():
    numberList = createList()
    close = addToList(numberList)

    sumTotal = sumList(numberList)

    if not close:
        printSum(sumTotal)

Чтобы сделать ваш код чище, вы можете просто удалить функцию sumList и просто использовать встроенную функцию sumи удалите createList, так как он действительно не должен быть его собственной функцией.Тогда ваш main будет выглядеть так:

def main():
    numberList = []
    close = addToList(numberList)

    if not close:
        printSum(sum(sumTotal))
0 голосов
/ 12 ноября 2018

Спасибо, ребята / девочки.

Я избавился от своего if в конце функции addToList и возвратил и значение close, и значение numberList: return (close, numberList) И затем для основного использования встроенная функция суммы:

close, numberList = addToList(numberList)

#the main function
def main():
    numberList = createList()
    close, numberList = addToList(numberList)

    if not close:        
        printSum(sum(numberList))

Наконец, для отбрасывания всех введенных нецелых входных данных я использовал:

if not stringname.isdigit():

Хорошо работает сейчас.

0 голосов
/ 12 ноября 2018

Вы забыли свой аргумент во втором вызове:

close = addToList(sumTotal)
...