【问题标题】:Press Enter to exit While Loop in Python 3.4在 Python 3.4 中按 Enter 退出 While 循环
【发布时间】:2015-05-19 00:44:51
【问题描述】:

我是 Python 新手,过去几个月一直在自学。我正在使用的这本书教授 Python 2.7,而我正在尝试在 3.4 中学习 Python。我现在已经习惯了使用这两种方法,但是对于我的生活,我无法弄清楚如何使用 enter 键退出这个 while 循环。代码如下:

total = 0
count = 0
data = eval(input("Enter a number or press enter to quit: "))

while data != "":
    count += 1
    number = data
    total += number
    average = total / count
    data = eval(input("Enter a number or press enter to quit: "))
print("The sum is", total, ". ", "The average is", average)

我不断收到此错误:

Traceback (most recent call last):
  File "/Users/Tay/Documents/Count & Average.py", line 10, in <module>
    data = eval(input("Enter a number or press enter to quit: "))
  File "<string>", line 0

    ^
SyntaxError: unexpected EOF while parsing

我能够获得此代码的修改版本以在 2.7 中工作,但我想知道如何在 3.4 中执行此操作。我到处搜索,似乎找不到答案。

【问题讨论】:

  • 你为什么使用 eval?将while 条件放在循环的底部,而不是顶部。
  • 以这种方式从用户那里获取输入:anh.cs.luc.edu/python/hands-on/3.1/handsonHtml/io.html
  • 我只是按照本指南的代码更改:docs.python.org/2/library/2to3.html。这就是我使用 eval 的原因。我不应该使用 eval 吗?
  • 尽可能避免使用eval()。您可以使用try..except(而不是expect)捕获错误。
  • 好的,谢谢TigerhawkT3的提示!

标签: python python-3.x while-loop exit-code


【解决方案1】:

试试这个更正版本的代码。你的逻辑是正确的,但你有一些错误。您不需要eval,在将其添加到总数时必须将数字转换为integer,最后您必须在打印出来之前在函数之外定义平均值。

total = 0
count = 0
average = 0
data = input("Enter a number or press enter to quit: ")

while data:
    count += 1
    number = data
    total += int(number)
    average = total / count
    data = input("Enter a number or press enter to quit: ")

print("The sum is {0}. The average is {1}.".format(total, average))

示例

Enter a number or press enter to quit: 5
Enter a number or press enter to quit: 4
Enter a number or press enter to quit: 3
Enter a number or press enter to quit: 2
Enter a number or press enter to quit: 
The sum is 14. The average is 3.5.

Enter a number or press enter to quit: 
The sum is 0. The average is 0.

【讨论】:

  • 顺便说一下,while data != "":可以简写成while data:
  • 非常感谢亨利!在我所处的级别上,这段代码对我来说更有意义。我用的是 Lambert 的《Python 基础》,而且我才第 3 章的最后,所以我还没有学到很多其他函数。
  • 您也可以删除average = total / count - 无需重复计算 - 并将format()字符串的average替换为total/count
【解决方案2】:

将用户的输入保留为字符串,直到您检查其内容:

total = 0
count = 0

while 1:
    data = input("Enter a number or press enter to quit: ")
    try:
        data = float(data)
    except ValueError:
        break
    count += 1
    total += data

average = total / count
print("The sum is " + total ". The average is " + average + ".")

【讨论】:

    【解决方案3】:

    我分离了一个 eval 函数 isNumber 我让它保持浮动小数,它看起来更干净一些。

    def isNumber(value):
        try:
            float(value)
            return True
        except ValueError:
            "error"
            return False
    
    total = 0
    count = 0
    data = input("Enter a number or press enter to quit: ")
    
    while data and isNumber(data):
        count += 1
        number = float(data)
        total += number
    
    average = total / count  #This sentences is more clean here (for me)
    data = input("Enter a number or press enter to quit: ")
    print("The sum is", total, ". ", "The average is", average)
    

    【讨论】:

    • 这可能会以任何非数字结束循环,对吧?
    猜你喜欢
    • 1970-01-01
    • 2011-11-07
    • 2013-05-15
    • 1970-01-01
    • 2015-08-15
    • 1970-01-01
    • 2015-10-10
    • 2016-08-13
    • 1970-01-01
    相关资源
    最近更新 更多