【问题标题】:Stop appending ints to a list after a specified sum is reached达到指定总和后停止将整数附加到列表
【发布时间】:2020-09-11 11:03:16
【问题描述】:

我希望创建一个循环来获取最大总和,然后不断要求用户输入一个数字,直到达到最大总和。但是我想这样做,以便输入“”会破坏代码,并且用户仍然可以在达到最大总和后输入数字,但它们不会附加到 numList 列表中。谢谢!

maxSum = int(input("Max sum: "))

numInput = 0
numList = []

while numInput != "":
    numInput = int(input("Enter a number: "))
    numList.append(numInput)
    if sum(numList) > maxSum:
        raise StopIteration

【问题讨论】:

  • 你为什么是raise StopIteration?我想你只是想要break
  • 一旦你到达终点,继续输入数字有什么意义,即numList中的值总和大于maxSum,它将不再被附加,并且除非您更改最后一个 if 语句的逻辑,否则您不会看到这些额外的数字。但就像提到的第一条评论一样,只需 break
  • @FishingCode 这是作业的一部分
  • 好的,所以。你读入一个整数,如果列表总和已经达到阈值,你不想将它添加到列表中。换句话说:如果列表总和达到阈值,您希望将其添加到列表中。那么,if... 之后会发生什么?

标签: python python-3.x


【解决方案1】:

您可以将此条件添加到 while sum(numList) < maxSum 并且我创建了一个用于获取用户输入的函数,它会一直询问用户输入,直到用户输入有效输入。

maxSum = int(input("Max sum: "))

numList =  []

def valid_input():
    while True:
        num = input("Enter a number: ")
        if num.isnumeric() or num == '':
            return num
        else:
            print('Enter valid number: ')

while sum(numList) < maxSum:
    numInput = valid_input()
    if numInput != '':
        numList.append(int(numInput))
    else:
        break

【讨论】:

  • 您的解决方案没有解决问题的其他部分(空字符串)。
【解决方案2】:

尝试包含某种标志或仅使用 `break':

maxSum = int(input("Max sum: "))

numInput = 0
numList = []

while True:
  numInput = int(input("Enter a number: "))
  numList.append(numInput)
  if sum(numList) > maxSum and numInput != "":
     break
# using a flag
v = True
while v:
  numInput = int(input("Enter a number: "))
  numList.append(numInput)
  if sum(numList) > maxSum and numInput == "":
     v = False

【讨论】:

  • numInput != "" 始终为真,因为numInt 是一个数字。此外,int() 将在非数字输入时失败。
  • if sum(numList) &gt; maxSum and numInput == "": 我认为你应该使用or
猜你喜欢
  • 1970-01-01
  • 2015-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多