【问题标题】:Python Returns none instead of True or FalsePython 返回 none 而不是 True 或 False
【发布时间】:2019-07-03 18:47:30
【问题描述】:

我正在创建一个名为 isSiete() 的函数,它将接受来自 txt 文件的整数,其中包含 5000 个随机数。

如果数字的第二列数字(“十”列)是“7”,则返回 True,否则返回 False。

def isSiete(num):
    numString = str(num)
    numList = list(numString)
    numSum = 0
    for i in numList:
        if ('0' + i)[-2] == '7':
            return True
        else:
            return False

我希望输出为 True,但我每次都得到 False。 我尝试了以下测试编号

isSiete(7777) 西特(4774) isSiete(672)

【问题讨论】:

  • 为什么会有循环?
  • @Evgeny。 String 已经是一个序列,而不是一个列表。序列是您可以索引的具有长度的东西。列表是列表类的一个实例。
  • '0'+i 并没有像你想象的那样做;尝试使用调试器。
  • numString = str(num), numList = list(numString), for i in numList 表示i 始终为一个字符,'0' + i 始终为两个字符,('0' + i)[-2] 始终为'0'
  • 这只会检查一次.....然后从函数返回。这是你想做的吗?

标签: python python-3.x


【解决方案1】:

根本不用担心字符串;两次除以 10 的速度要快一个数量级。

def isSiete(num):
    return num // 10 % 10 == 7

随着num 的大小增加,算法会变慢,但当num 是17 位数字时,这仍然更快。

【讨论】:

  • 就是这样!!我想我的语法搞砸了。这也有效,尝试: return str(num)[-2] == '7' except IndexError: pass
【解决方案2】:

您的('0' + i)[-2] 始终等于字符'0'

例如,假设numList == ['A', 'P', 'P', 'L', 'E'] 假设inumList的一个元素,比如'P'

然后'0' + i == "0P"

[-2] 获取倒数第二个字符
"0P"[-2] == "0"

请注意,P 是什么并不重要。倒数第二个字符 '0' + i 总是 '0'

('0' + i)[-2] == '7' 将始终返回 False


我鼓励您了解“模运算符”(%)

x % 10 是 x 除以 10 的余数。 例如74 % 10 == 4

一般x % yx除以y的余数

要从数字中提取特定数字,请执行以下操作:

def extract_digit(number, position):
    """
    position == 1 ......if you want the ones place
    position == 2 ......if you want the tens place
    position == 3 ......if you want the hundredths place
    position == 4 ......if you want the thousanths place
    and so on...
    """ 
    small_places = number % (10**position)
    digit = small_places //(10**(position - 1))
    return digit

例如,假设你想要123456789的百位:

123456789 % 1000 == 789      
789 // 100 == 7

作为最终结果,我们有:

def isSiete(num):
    return extract_digit(num, 2) == 7

【讨论】:

    【解决方案3】:

    您可以简单地使用转换后的字符串来检查您的条件,因为 python 中的字符串用作字符数组:

    def isSiete(num):
        numString = str(num)
        tensPosition = len(numString) - 2
    
        if tensPosition >= 0 and numString[tensPosition] == '7':
            return True
        else:
            return False
    

    【讨论】:

      【解决方案4】:

      我不确定您是否需要帮助来调试您的代码,或者您是否需要一些有关有效解决方案的帮助。

      如果您想要一个解决方案:这里有一个有效的 sn-p 可以帮助您实现您想要的。

      def is_siete(num):
          """
          Asserts that the tens of a number is 7. Returns False if not.
          """
          num_as_str = str(num)
      
          try:
      
              second_num_as_str = num_as_str[-2]
              second_num_as_int = int(second_num_as_str)
      
              if second_num_as_int == 7:
                  return True
      
              return False
      
          except IndexError:
              return False
      
      
      if __name__ == "__main__":
          print(is_siete(7777))  # True
          print(is_siete(4774))  # True
          print(is_siete(672))  # True
          print(is_siete(17))  # False
          print(is_siete(7))  # False
      
      

      【讨论】:

      • 这可以在一行中完成return len(str(num)) > 1 and str(num)[-2] == '7'
      • 确实如此。不错。
      • 您好,我一直在寻找解决方案,我从这里所有乐于助人的人那里找到了解决方案!也感谢您的工作解决方案!
      猜你喜欢
      • 1970-01-01
      • 2021-03-21
      • 2023-03-20
      • 2021-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-20
      相关资源
      最近更新 更多