【问题标题】:How to print a value in main function?如何在主函数中打印一个值?
【发布时间】:2019-04-15 02:51:41
【问题描述】:

我的目标是:

  1. 接受输入(直到用户输入 0)或退出(如果输入了字母),
  2. 运行一些检查以排除非整数,
  3. 将这些值添加到列表中,然后
  4. 然后打印列表的总和。

我正在尝试在 main 中捕获变量 close 的布尔值,但出现错误。

错误:“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()

如果输入了非整数,有什么更好的优雅退出方式?谢谢。

【问题讨论】:

  • 正如错误清楚地表明的那样,addToList 需要一个参数:def addToList(numberList),但您没有提供它:close = addToList()
  • 另外,请考虑使用if close: 代替if close == True:while not stopAdding: 代替PEP8 中建议的while stopAdding == False:,并且(以非常非常小的方式)更快。

标签: python list function return


【解决方案1】:

你在第二次通话中忘记了你的论点:

close = addToList(sumTotal)

【讨论】:

    【解决方案2】:

    把你的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))
    

    【讨论】:

    • @Cornel 随时将我的回答标记为已接受,如果您认为它回答了您的问题,请点赞:)
    • 谢谢。我已经更新了我的代码。另外,检查字符串以便只允许使用整数的最佳方法是什么?用正则表达式?
    • @Cornel 你用的isalpha 很好,相反的是isdigit
    • 感谢您的帮助。
    【解决方案3】:

    谢谢大家。

    我在 addToList 函数的末尾去掉了我的 if else 并返回了 close 值和 numberList 值:return (close,numberList) 然后主要使用内置 sum 函数:

    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():
    

    现在运行良好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多