Python 3.x Python,如何忽略诸如';完成';从列表中求和的数字

Python 3.x Python,如何忽略诸如';完成';从列表中求和的数字,python-3.x,Python 3.x,尽管如此: 数字=输入(“>”) 如果数字==“完成”: 打破 总数=0 对于数字中的数字: 如果数字==int: 总数=总数+数字 打印(总计)我很难理解您想用这段代码做什么,请下次使用适当的代码块,并进行适当的缩进。我的猜测是,你想得到一个像345这样的输入数字,然后加上3+4+5作为输出。如果输入不是int,则应中断循环。根据您的需要,我提出了两种不同的解决方案 这段代码将简单地获取输入并检查它是否“完成”,如果它没有“完成”,它将尝试添加。这是一个易于理解的解决方案,但如果输入的字符串与

尽管如此: 数字=输入(“>”) 如果数字==“完成”: 打破 总数=0 对于数字中的数字: 如果数字==int: 总数=总数+数字
打印(总计)

我很难理解您想用这段代码做什么,请下次使用适当的代码块,并进行适当的缩进。我的猜测是,你想得到一个像345这样的输入数字,然后加上3+4+5作为输出。如果输入不是int,则应中断循环。根据您的需要,我提出了两种不同的解决方案

这段代码将简单地获取输入并检查它是否“完成”,如果它没有“完成”,它将尝试添加。这是一个易于理解的解决方案,但如果输入的字符串与“done”不同,则会产生错误

此方法将再次测试“done”字符串,但之后还将检查输入是否可以转换为int。如果不能转换,则捕获错误并返回“invalid input”。如果你想让程序在任何字符串处终止,你可以在except部分加上break

while True:
numbers = input(">")
if numbers == "done":
    break
else:
    try:
        testing = int(numbers)
        total = 0
        for number in numbers:
            total += int(number)
    except:
        total = "invalid input"
print(total)
我自己也是一个初学者,如果一个有经验的人能告诉我更好的方法,我会非常感兴趣的

while True:
numbers = input('> ')
if numbers == 'done':
    break
total = 0
for number in numbers:
    if numbers == int:
        total = total + numbers
print(total)
假设这是您的代码:

这是您问题的解决方案-->

默认情况下,所有内容都被接受为字符串,因此我们将其转换为整数以查找总数。 我们还使用列表来存储我们接受的所有值

另一个解决方案是-->

希望您理解解决方案:-)

尝试以下方法:

total = 0
number_of_inputs = 0

while True:
    number_string = input('Enter a number: ')

    try:
        total += float(number_string)
        number_of_inputs += 1
    except ValueError:
        break  # we weren't given a number, so exit the loop

# Now that we're outside of the loop, print out the total:
print('The total is:', total)

if number_of_inputs > 0:
    average = total / number_of_inputs
    print('The average is:', average)
else:
    print('The average cannot be calculated, as no inputs were given.')
你看到发生什么事了吗?while循环不断地询问并向
total
添加整数,直到给出一个非整数(如“done”)。一旦获得该非整数,
int()
函数将失败,它抛出的异常将被捕获,代码将立即
中断
而退出
循环

一旦跳出循环,总数和平均数就会被打印出来

您应该注意以下几点:

  • 如果用户未提供任何输入(这在这里是可能的),总数将正确打印为0,但如果您尝试计算平均值,则会出现错误,原因是输入的数量(也为0)。这就是为什么我在尝试计算平均值之前检查输入的数量是否大于零

  • 最初我使用
    int()
    将字符串转换为数字,但我改为使用
    float()
    。我认为,由于您要计算平均值,所以平均值不一定是整数(即使所有输入都是整数),因此强制执行整数输入没有意义。这就是为什么我将
    int()
    更改为
    float()
    ,但是否使用它取决于您自己

  • ValueError
    不是一个函数;这是一个
    异常
    。此时,您可能不知道异常是什么,所以只需知道它们是可能发生的特殊情况,并且通常用于捕获错误,例如错误的输入值

在我上面发布的代码中,循环总是需要数字输入。但是,一旦我们有了无法转换为数字的输入,程序就会说,“嘿,我有一个我们期望的异常!异常是值中有一个错误!”然后程序会继续,而不是继续下一行代码(即
number\u of\u inputs+=1
)然后将执行
除ValueError:
部分下的代码块。在上面的代码中,它所做的就是调用
break
,它退出循环

一旦退出循环,代码将打印出总数和平均值

如果不是因为代码中的
try:
除了ValueError:
行之外,那么一旦有人给出非数字输入,程序就会突然结束(带有一条很长的错误消息)。这是因为对
float()
的调用不知道如何将像“done”这样的值转换为数字,所以它只不过是退出而已

但是,通过使用
try:
除了ValueError:
,我们预计可能会有人提供非数字输入。当这种情况发生时(它会发生,当用户完成输入时)——而不是退出——我们希望采取另一种行动。我们将这个替代动作指定为一个简单的
断开
循环,这将允许程序继续执行循环后面的任何动作


我希望这是有道理的。如果没有,那么一旦您开始学习Python中的异常,它将变得更有意义。

嗨,我建议您为了获得更好的响应,在您的帖子中写下您想要实现的目标,不仅在标题中,而且更具体一点,您可以添加一个示例。格式化你的代码会很感激,这样用户可以更好地理解它Hi Nathan,谢谢你的建议,我从我的编辑器复制并粘贴了我的代码我不知道为什么它会以那种格式结束,重新调整提示看起来很可怕:在stackoverflow中,为了使你的代码在帖子中看起来格式正确,在每行代码前面加四个空格。否则,stackoverlfow会将代码视为一个长段落,并从中删除各种格式。是的。。。这是我脑海中的方法,但无法将其转化为代码,这太棒了,谢谢,我设法以不同的方式解决了它,我还没有遇到映射函数,不过我已经见过几次了。谢谢你,很高兴知道你也理解并喜欢它。如果您得到它,则接受它作为解决方案。:)嗨,Athos,我是这个网站的新手,所以我没有意识到我的代码粘贴的方式如此可怕,我写了它,甚至无法理解它,所以我试图解决的问题是编写一个程序,从用户输入中提取多个整数来计算平均值。这个
total = 0
average = 0
count = 0

while True:     
    numbers = input('> ')

    if numbers == 'done': break

    try:     
        total = int(numbers) + total
        count = count + 1
    except:
        print('nope')

    try:
        average = total / count
    except:
        print('error')

print(total)
print(average)
print(count)
numbers=[]
while True:
    a=input('>')
    if a=='done':
        break
    else:
        numbers.append(a)
p=map(int,numbers)
print(sum(p))
total = 0
number_of_inputs = 0

while True:
    number_string = input('Enter a number: ')

    try:
        total += float(number_string)
        number_of_inputs += 1
    except ValueError:
        break  # we weren't given a number, so exit the loop

# Now that we're outside of the loop, print out the total:
print('The total is:', total)

if number_of_inputs > 0:
    average = total / number_of_inputs
    print('The average is:', average)
else:
    print('The average cannot be calculated, as no inputs were given.')
total = 0
average = 0
count = 0

while True:     
    numbers = input('> ')

    if numbers == 'done': break

    try:     
        total = int(numbers) + total
        count = count + 1
    except:
        print('nope')

    try:
        average = total / count
    except:
        print('error')

print(total)
print(average)
print(count)