【问题标题】:Positive Integer Sum, Average, Count正整数和、平均值、计数
【发布时间】:2018-10-30 21:40:11
【问题描述】:

我的编程教授要求我创建一个程序,该程序要求用户输入他们愿意输入的正整数(包括零)。除正整数之外的任何内容都会停止输入并计算/显示数字的总和、平均值和计数。

我遇到的主要问题与返回多个要在程序中传递的正整数有关。我似乎找不到我需要的东西。

inputPostiveInteger()

Pass in nothing
Ask the user for a positive integer
Return the integer is the user inputs one
Return -1 if the user does not input a positive integer

他让程序工作的方式就是例子-

Enter a positive integer, anything else to quit: 1
Enter a positive integer, anything else to quit: 5
Enter a positive integer, anything else to quit: 10
Enter a positive integer, anything else to quit: cat
Sum 16
Average 5.3
Total numbers 3

我尝试了多种方式的 try/except 和 while not 子句来获得正确的输入部分,但似乎无法将我的大脑包裹在这一点上。

我了解如何计算/显示平均值、计数、总和的公式 - 但似乎无法在多个公式中获得经过审查的整数条目。

例如。用于尝试输入

def inputPositiveInteger():
    try:
        userInt = int(input("Enter a positive integer, anything else to quit: ")) > -1
    except ValueError:
        return -1

def main():
    total = 0
    count = 0
    posInt = inputPositiveInteger()
    while posInt != -1:
        total += posInt
        count += 1

main()

total = 0
userInt = int(input('Enter a positive integer, anything else to quit: '))

while userNumber > -1:
    total += userInt
    userInt = int(input('Enter a positive integer, anything else to quit: '))

【问题讨论】:

  • 在您的 try 块中,您不会遇到错误,因此它永远不会结束,由于除以零等原因会发生值错误,我建议您不要尝试使用简单的 break在 if 语句中,没有理由将这样一个简单的任务过度复杂化
  • 你只是没有从你的函数返回userInt,所以posInt将被设置为None(函数隐式返回这个值)
  • 如果输入有效,您不会从 inputPositiveInteger 返回,您的 while 循环是无止境的或永远不会命中,因为输入值永远不会改变 inside。您是否以任何形式或形式调试过您的代码? #stackoverflow.com/questions/1623039/python-debugging-tips

标签: python


【解决方案1】:

我试着让我的解决方案有点像你的代码:

def inputPositiveInteger():
    try:
        userInt = int(input("Enter a positive integer, anything else to quit: "))
    except ValueError:
        return -1

    if userInt < 0:
        return -1
    return userInt

def main():
    total = 0
    count = 0
    posInt = inputPositiveInteger()
    while posInt != -1:
        total += posInt
        count += 1
        posInt = inputPositiveInteger()

    if count == 0:
        print("Sum:", None)
        print("Average:", None)
        print("Total numbers:", None)
    else:
        print("Sum:", total)
        print("Average:", total/count)
        print("Total numbers:", count)

main()

此外,您可能已经或可能没有涵盖数组(又名列表),在我看来这将是可行的方法,这里也没有尝试,除非必要:

def inputPositiveInteger():
    userInt = input("Enter a positive integer, anything else to quit: ")
    # str.isnumeric checks that a string only contains numbers and isn't empty
    if not userInt.isnumeric():
        return -1
    return int(userInt)

def main():
    posInt = inputPositiveInteger()
    nums = []
    while posInt != -1:
        nums.append(posInt)
        posInt = inputPositiveInteger()

    if nums:
        print("Sum:", sum(nums))
        print("Average:", sum(nums)/len(nums))
        print("Total numbers:", len(nums))
    else:
        print("Sum:", None)
        print("Average:", None)
        print("Total numbers:", None)

main()

希望这会有所帮助,祝你的课好运。

【讨论】:

  • 赞成尝试复制代码结构,尽管一个很好的答案可以解释 OP 的代码存在什么问题。
【解决方案2】:

试试这个:

def finish(summ,count):
    print('Sum',summ)
    print('Count',count)
    print('Avg',round(summ/count,5))

summ = 0
count = 0
while True:
    try:
        userInt = int(input('Enter a positive integer, anything else to quit: '))
        if userInt >= 0:
            summ += userInt
            count += 1 
        else:
            finish(summ,count)
            break
    except:
        finish(summ,count)
        break

【讨论】:

    【解决方案3】:

    感谢您缩小输入范围的建议,我最终将其作为最终提交的代码。

    def calcAverage(total, count):
        return round(float(total) / float(count), 2)
    
    # prompt user to enter posInt
    def inputPositiveInteger():
        userInt = input("Enter a positive integer, anything else to quit: ")
        # return input if digit, else return -1
        if not userInt.isdigit():
            return -1
        return int(userInt)
    
    def main():
        # call function
        posInt = inputPositiveInteger()
        nums = []
        while posInt != -1:
            nums.append(posInt)
            posInt = inputPositiveInteger()
    
        if nums:
            print("Sum", sum(nums))
            print("Average", calcAverage(sum(nums), len(nums)))
            print("Total numbers", len(nums))
    
    
    main()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-19
      • 1970-01-01
      • 2017-03-03
      • 1970-01-01
      相关资源
      最近更新 更多