【问题标题】:Simple python iteration exercise..stuck with try and except简单的python迭代练习..卡住了try和except
【发布时间】:2017-01-03 15:40:20
【问题描述】:

编写一个重复读取数字直到用户输入“完成”的程序。输入“完成”后,打印出总数、计数和平均值。如果用户输入的不是数字,请使用 try 和 except 检测他们的错误并打印错误消息并跳到下一个数字。

这就是我所拥有的。

total = 0
count = 0
average = 0
while True:
    number = input("Enter a number:")
    if number == "done":
        break
    try:
        total += numbers
        count += 1
        average = total / len(number)
    except:
        print ("Invalid input")
    continue
print (total, count, average)

当我运行它时,由于某种原因,我总是得到无效的输入。我的 except 部分一定是错的。

编辑: 这就是我现在所拥有的,并且有效。但是,对于非数字,我确实需要尝试并除外。

total = 0
count = 0
average = 0
while True:
    number = input("Enter a number:")
    if number == "done":
        break
    total += float(number)
    count += 1
    average = total / count
print (total, count, average)

我想我明白了?!?!

total = 0
count = 0
average = 0
while True:
    number = input("Enter a number:")
    try:
        if number == "done":
            break
        total += float(number)
        count += 1
        average = total / count
    except:
        print ("Invalid input")
print ("total:", total, "count:", count, "average:", average)

如果这花了我一个小时,我应该恐慌吗? 这不是我的第一种编程语言,但已经有一段时间了。

【问题讨论】:

  • 这是python 2还是python 3?
  • 你想在 except 块中捕获什么异常?删除 try-except ,看看你真正得到了什么错误。
  • 大家好。这是 Python 3。@Daniel,我现在就试试。如果它没有输入数字,我正在尝试捕捉。
  • 调试步骤 1:删除 try ... except 以查看引发的异常。调试完成。
  • 嗨。我更新了我现在所拥有的。它的工作,但我仍然需要尝试和除外。

标签: python


【解决方案1】:

我知道这是旧的,但我想我会把我的 2 美分扔在那里(因为多年后我自己也在使用相同的例子来学习)。你可以试试:

values=[]
while True: 
    A=input('Please type in a number.\n')
    if A == 'done':
        break
    try:
        B=int(A)
        values.append(B)
    except:
        print ('Invalid input')

total=sum(values)
average=total/(len(values))
print (total, len(values), average)

我觉得这有点干净(而且个人更容易理解)。

【讨论】:

    【解决方案2】:

    问题是当您尝试使用输入时:

    try:
        total += numbers
    

    首先,没有值数字;您的变量是单数,而不是复数。其次,您必须将文本输入转换为数字。试试这个:

    try:
        total += int(number)
    

    【讨论】:

    • 是的,我明白了。 :)
    • 好。原始代码每次都会引发异常:在初始化之前尝试使用变量的值。您仍然无法计算输入的数量,但这是另一个问题。
    • 我想我明白了。
    【解决方案3】:

    这是因为当 number 是 int 时没有 len(number)。 len 用于查找列表/数组的长度。您可以通过注释掉 try/except/continue 来自行测试。我认为下面的代码更符合您的要求?

    total = 0
    count = 0
    average = 0
    while True:
        number = input("Enter a number:")
        if number == "done":
            break
        try:
            total += number
            count += 1
            average = total / count
        except:
            print ("Invalid input")
        continue
    print (total, count, average)
    

    请注意,仍然存在一些问题。例如,您实际上必须在输入框中键入“完成”才能不出错,但这解决了您最初的问题,因为您的平均值中有 len(number) 而不是 count。另请注意,您有总数 += 数字。当您的变量是数字而不是数字时。小心你的变量名/用法。

    【讨论】:

    • 我想我明白了。
    【解决方案4】:

    解决方案...

    total = 0
    count = 0
    average = 0
    while True:
        number = input("Enter a number:")
        if number == "done":
            break
        else:
            try:
                total += int(number)
                count += 1
                average = total / count
            except ValueError as ex:
                print ("Invalid input")
                print('"%s" cannot be converted to an int: %s' % (number, ex))
    print (total, count, average)
    

    您的代码有问题:

    • total+=numbers #numbers 不存在;是数字
    • len(number) # number 是一个字符串。你需要的平均数
    • 如果没有完成,则处理它
    • 数字转换为int时,使用try ... except ValueError来捕捉问题。
    • 此外,您可以使用 try ... except ValueError as ex 来获得更易于理解的错误消息。

    【讨论】:

    • 嗨。你能看看我写的东西吗?我觉得是对的。
    • 没问题。不要惊慌。永远不要灰心!
    【解决方案5】:

    所以,经过多次尝试,我得到了解决方案

    num = 0
    count = 0
    total = 0
    average = 0
    while True:
        num = input('Enter a number: ')
        if num == "done":
            break
        try:
            float(num)
        except:
            continue
        total = total + float(num)
        count = count + 1
        average = total / count
     print(total, count, average)
    

    【讨论】:

    • 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。
    【解决方案6】:

    更新解决方案的老问题

    num = 0
    total = 0.0
    while True:
    number = input("Enter a number")
    if number == 'done':
        break
    try :
        num1 = float(number)
    except:
        print('Invailed Input')
        continue
    num = num+1
    total = total + num1
    print ('all done')
    print (total,num,total/num)
    

    Write and Run picture

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-13
      • 1970-01-01
      • 2018-04-06
      • 1970-01-01
      • 2015-02-27
      • 2019-06-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多