【问题标题】:How can i make my Python Code more compact?如何让我的 Python 代码更紧凑?
【发布时间】:2020-06-24 20:21:38
【问题描述】:

如何使我的 Python 代码更紧凑?
任何帮助都会非常有用

print("Welcome to my program")
# This program tells if a number form 1 - 10 is even or odd
try:
    del_number = int(input("Input a number 1 - 10: "))
    if del_number == 2 or del_number == 4 or del_number == 6 or del_number == 8 or del_number == 10:
        print("The number you have entered is an even number")
    elif del_number > 10:
        print("Not a valid number")
    else:
        print("The number you have entered is a odd number")
except:
    print("You have entered a letter/letters not a number 1 - 10")

【问题讨论】:

  • 顺便说一句,将您的异常处理限制为except ValueError。您的异常应该是狭窄的,以避免意外抑制意外错误和隐藏错误。

标签: python python-3.x


【解决方案1】:

你可以缩短偶数校验

print("Welcome to my program")
# This program tells if a number form 1 - 10 is even or odd
try:
    del_number = int(input("Input a number 1 - 10: "))
    if del_number in (2 , 4, 6, 8, 10):
        print("The number you have entered is an even number")
    elif del_number > 10:
        print("Not a valid number")
    else:
        print("The number you have entered is a odd number")
except ValueError:
    print("You have entered a letter/letters not a number 1 - 10")

或者使用低位来决定偶数/奇数(也许从列表中选择名称)

print("Welcome to my program")
# This program tells if a number form 1 - 10 is even or odd
try:
    del_number = int(input("Input a number 1 - 10: "))
    if not 1 < del_number <= 10:
        print("Not a valid number")
    else:
        category = ["even", "odd"][del_number & 1]
        print(f"The number you have entered is a {category} number")
except ValueError:
    print("You have entered a letter/letters not a number 1 - 10")

考虑到这一点,您可以将异常处理限制在整数转换本身,以减少您在以后的代码中意外掩盖错误的机会。假设后面的测试中的一个错误也引发了ValueError。直到现场的愤怒报告你才会知道。

print("Welcome to my program")
# This program tells if a number form 1 - 10 is even or odd
try:
    del_number = int(input("Input a number 1 - 10: "))
except ValueError:
    print("You have entered a letter/letters not a number 1 - 10")
else:
    if not 1 < del_number <= 10:
        print("Not a valid number")
    else:
        category = ["even", "odd"][del_number & 1]
        print(f"The number you have entered is a {category} number")

【讨论】:

  • 如果您使用条件表达式而不是可迭代索引,我认为它会是 pythonic"odd" if del_number &amp; 1 else "even"
  • 这是另一种方式,但不是更多pythonic,恕我直言。我的方法适用于超过 1 位的类别,比如包含 8 个条目和 del_numbers &amp; 3 的列表。索引到列表是正常的。我明白你在说什么,有些人更喜欢你的方法。
  • "说一个有 8 个条目的列表和del_numbers &amp; 3" 哇,这真的让我大吃一惊。对于这种情况来说会很棒。但是,我仍然觉得它令人困惑,因为如果此表达式的计算结果为 True 等,我总是不得不停下来思考选择哪一个。
  • @Asocia - 是的,不同的观点。我在位域的低级 C 中度过了太多年。我梦想着比特领域(或者也许是地狱般的噩梦)。我只是将其视为类别选择,但您对真/假的看法同样有效。
  • 哈哈哈,我可以想象,因为你也选择了del_numbers &amp; 1 而不是del_numbers % 2 == 1 :)
【解决方案2】:

您可以使用模运算符 % 而不是那么多串联的 or。有关操作员的信息,请阅读here

这是要替换的代码行:

if del_number == 2 or del_number == 4 or del_number == 6 or del_number == 8 or del_number == 10:

这将是替代品:

elif del_number % 2 == 0:

if 更改为elif 的原因是我们首先要确保号码是&lt;= 10。因此,我们的第一个条件if 将测试数字是否为&gt; 10。如果它通过了该标准,则带有模运算符的 elif 部分。总而言之:

try:
    del_number = int(input("Input a number 1 - 10: "))
    if del_number > 10 or del_number < 0:
        print("Not a valid number")
    elif del_number % 2 == 0:
        print("The number you have entered is an even number")
    else:
        print("The number you have entered is a odd number")
except:
    print("You have entered a letter/letters not a number 1 - 10")

【讨论】:

  • 不完全是。第一个语句只接受 1-10 范围内的偶数,而第二个语句接受 any 偶数。
  • 并且您需要将&gt; 10 比较移到其上方以首先捕获溢出情况。
  • 我可以轻松解决将 elif 放入并将 &gt;10 切换为 if 的第一个条件的问题。感谢您的建议,编辑答案!
【解决方案3】:

你可以用更紧凑的方式来制作它

if del_number in range(2, 11, 2):  # [2, 4, 6, 8, 10]
    print("The number you have entered is an even number")

if del_number % 2 == 0:
    print("The number you have entered is an even number")

如果你想检查del_number是偶数还是奇数

【讨论】:

    【解决方案4】:

    让我们这样试试吧:

    print("Welcome to my program")
    # This program tells if a number form 1 - 10 is even or odd
    try:
        del_number = int(input("Input a number 1 - 10: "))
    except:
        print("You have entered a letter/letters not a number 1 - 10")
    
    if del_number % 2 == 0 and del_number <= 10:
        print("The number you have entered is an even number")
    elif del_number > 10:
        print("Not a valid number")
    else:
        print("The number you have entered is a odd number")
    

    【讨论】:

      【解决方案5】:

      我会这样做

      print("Welcome to my program")
      # This program tells if a number form 1 - 10 is even or odd
      try:
          del_number = int(input("Input a number 1 - 10: \n"))
          if del_number % 2 == 0 and 1 < del_number < 10 :
              print("The number you have entered is an even number")
          elif del_number > 10 or del_number < 1:
              print("Not a valid number")
          else:
              print("The number you have entered is a odd number")
      except:
          print("You have entered a letter/letters not a number 1 - 10")
      

      【讨论】:

        【解决方案6】:
        print("Welcome to my program")
        # This program tells if a number form 1 - 10 is even or odd
        del_number = int(input("Input a number 1 - 10: "))
        try:
            {
                0: lambda: print("The number you have entered is an even number"),
                1: lambda: print("The number you have entered is an odd number")
            }[del_number % 2 if 0 < del_number <= 10 else None]()
        except:
            print("You have entered a letter/letters not a number 1 - 10")
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-06-29
          • 1970-01-01
          • 1970-01-01
          • 2015-01-26
          • 2022-01-15
          • 2013-09-06
          • 2020-10-10
          • 1970-01-01
          相关资源
          最近更新 更多