我将如何最好地简化这段代码>包括valueErrors

时间:2018-04-06 04:18:20

标签: python python-3.x

免责声明:noob在这里。我目前正在大学学习Python,不仅在学校编写代码,还为了好玩。我目前正在编写一个生成代码的行星(我用小基础语言完全编写)并将其用于Python语言。由于我对Python的经验不足,我遇到了一个小问题,但这对你们来说可能很容易。请告诉我如何改进这段代码,以便以最简单的方式工作。另外,我想指出,我希望用户输入1到12个行星之间的数字来生成。此外,如果用户只按def num_planets(): try: valid = ("1","2","3","4","5","6","7","8","9","10","11","12") count = int(input("How many planets would you like to generate? ")) if count != valid: import random count = random.randint(1,12) print("Given the invalid user input, the random valid integer,",count,"was selected.") except ValueError: import random count = random.randint(1,12) print("Given the invalid user input, the random valid integer,",count,"was selected.") num_planets() ,输入1-12号码范围之外的号码,或输入除号码以外的任何号码,我希望程序只选择一个随机数。下面的代码也是我想要它的方式,但它看起来很邋and和矫枉过正......

knitr

1 个答案:

答案 0 :(得分:0)

首先,我认为它的工作方式不符合您的预期,因为count != valid正在将inttuple字符串进行比较。因此,条件始终为True(因此您的代码将始终生成随机值)。

您需要将valid转换为tuple个整数,然后使用in operation检查int值是否属于tuple

像这样:

valid = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
count = int(input("How many planets would you like to generate? "))
if count not in valid:
    # use a random value

其次,为了避免重复,您可以将随机化器代码放在方法中。

像这样:

def use_random_value():
    import random
    count = random.randint(1, 12)
    print("Given the invalid user input, the random valid integer,", count, "was selected.")


def num_planets():
    try:
        valid = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
        count = int(input("How many planets would you like to generate? "))
        if count not in valid:
            use_random_value()
    except ValueError:
        use_random_value()


num_planets()

最后,try/catch的{​​{1}}已经足够“简单”,因为它遵循EAFP [1] [2]模式。它显然会尝试将输入值转换为int(..),如果失败,您可以轻松处理错误。