【问题标题】:check in while loop for only numbers in list [duplicate]仅检查列表中的数字的while循环[重复]
【发布时间】:2018-04-22 13:42:38
【问题描述】:

我是 python 新手,想知道如果列表只包含数字,我如何使用 while 循环检查... else: print("sorry only numbers allowed")

numbers = [34, 39, 110, 303, 889, 223, 982, 7676]

def getsSumVersionTwo(listOfStuff):
    sumNumbers = 0
    for x in listOfStuff:
        sumNumbers += x
        return sumNumbers
print(getsSumVersionTwo(numbers))
getsSumVersionTwo(numbers)

【问题讨论】:

  • return 应该在循环之外。此外,您可以只使用 bultin sum 函数。
  • @GilMatzov:不要更改问题海报的代码。即使是糟糕的代码也应该被保留为糟糕的代码。否则回答问题的人无法判断提问者的技能,在最坏的情况下,您会犯下不可重现的错误。修正文本中的语法、错别字、奇怪的措辞等当然没问题
  • @LonelyNeuron 我更改了函数将返回摘要并使其打印得更好的“返回语句”。他问我离开的基地一样。但在我再次改变之前我会三思而后行
  • @GilMatzov 我知道修复这些小细节很诱人,但这并不总是有意义;)

标签: python python-3.x list while-loop


【解决方案1】:

假设“数字”是指整数,请使用:

all(isinstance(n, int) for n in numbers)

正如你在这个例子中看到的:

>>> numbers = [34, 39, 110, 303, 889, 223, 982, 7676]
>>> all(isinstance(n, int) for n in numbers)
True

【讨论】:

  • 您也可以将其扩展为floats,使用以下内容:all(isinstance(n, int) or isinstance(n, float) for n in numbers)
  • @ErickShepherd:或者更好:all(isinstance(n, (int, float)) for n in numbers)
  • @CristiFati 我什至不知道isinstance() 可以接受types 的元组!感谢您的提示!
【解决方案2】:
def getSum(l):
    try:
        res = 0
        for i in l:
            res += i
        return res
    except:
        print('Only numbers')

或者

def getSum(l):
    try:
        return sum(l)
    except:
        print('Only numbers')

【讨论】:

    【解决方案3】:
    numbers = [34, 39, 110, 303, 889, 223, 982, 7676]
    
    for x in numbers:
        if not str(x).isdigit():
            print("sorry only numbers allowed")
    

    【讨论】:

      【解决方案4】:

      您将什么类型定义为“数字”?整数,长 你可以这样做:

      numbers = [34, 39, 110, 303, 889, 223, 982, 7676]
      numbers_type = (long, int) # add more types like double float, complex
      

      然后检查:

      if all(isinstance(n, numbers_type) for n in numbers):
             return sum
      else:
           print("sorry only numbers allowed")
           raise ValueError("sorry only numbers allowed")
      

      【讨论】:

        【解决方案5】:

        如果您想允许所有数字类型(int、float 等),您可以检查列表中的每个元素,如果它是 Number 的实例(因为 python 中的每个数字类型都继承自Number)。

        from numbers import Number
        
        def only_contains_numbers(collection):
            for n in collection:
                if not isinstance(n, Number):
                    return False
        
            return True
        

        【讨论】:

          【解决方案6】:

          这是单行解决方案:

          a = any(type(i) not in(int,long) for i in numbers)
          if a is True:
              print("sorry only numbers allowed")
          

          【讨论】:

            猜你喜欢
            • 2017-05-19
            • 2015-04-24
            • 2023-03-28
            • 1970-01-01
            • 2022-07-21
            • 1970-01-01
            • 2017-10-07
            • 1970-01-01
            • 2018-11-27
            相关资源
            最近更新 更多