【问题标题】:Python assert not working: limit user enter only stated numbers but assert not workingPython断言不起作用:限制用户仅输入规定的数字但断言不起作用
【发布时间】:2021-03-05 19:17:37
【问题描述】:

这里是初学者。我尝试通过输入 6 个数字来创建彩票游戏。下面的代码尝试检查用户输入的数字:首先,它是否是整数;其次是否在规定的范围内。但是,ValueError 对 int 的检查有效,但 assert 对数字范围的检查无效。

def buy_lottery_ticket():
    global credit
    credit -= 5
    while True:
        try:
            entered_numbers = input('Enter your 6 favorites numbers!(1 ~ 20): ')
            entered_numbers_list = entered_numbers.split(',')
            ticket_numbers = {int(n) for n in entered_numbers_list}
            print(ticket_numbers)
            return ticket_numbers
            assert 0 < entered_numbers_list < 21
        except ValueError:
            print("Not an integer! Please enter an integer.")
        except AssertionError:
            print("Please enter an integer between 1 and 20")
        else:
            break

感谢您的意见和帮助。提前致谢。

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    您正在尝试在 return 语句之后检查 6 个数字和范围值。这是做同样事情的一种方法。

    另外,在您的代码中,您有credit -= 5。不确定您首先在哪里设置值。你可能想调查一下。我已经注释掉了那行代码。

    def buy_lottery_ticket():
        global credit
        #credit -= 5
        while True:
            entered_numbers = input('Enter your 6 favorites numbers!(1 ~ 20): ')
            try:    
                entered_numbers_list = entered_numbers.split(',')
                ticket_numbers = {int(n) for n in entered_numbers_list}
                if len(ticket_numbers) > 6:
                    print ('You must enter only 6 unique numbers')
                    continue
                elif len(ticket_numbers) < 6:
                    print ('You must enter at least 6 unique numbers')
                    continue
                if min(ticket_numbers) < 1 or max(ticket_numbers) > 20:
                    print ("Please enter an integer between 1 and 20")
                    continue
                print(ticket_numbers)
                return ticket_numbers
            except ValueError:
                print("Not an integer! Please enter an integer.")
    
    print (buy_lottery_ticket())
    

    这个输出将是:

    Enter your 6 favorites numbers!(1 ~ 20): 5,7,15,17,3,8,9
    You must enter only 6 unique numbers
    Enter your 6 favorites numbers!(1 ~ 20): 5,7,15,17,3
    You must enter at least 6 unique numbers
    Enter your 6 favorites numbers!(1 ~ 20): 5,7,15,17,3,15
    You must enter at least 6 unique numbers
    Enter your 6 favorites numbers!(1 ~ 20): 5,7,15,17,3,8
    {3, 5, 7, 8, 15, 17}
    {3, 5, 7, 8, 15, 17}
    

    【讨论】:

    • 如果这解决了问题,别忘了点赞。谢谢
    【解决方案2】:

    return 之后的任何内容都不会执行(除非 return 语句引发错误)。 另外,要获取列表等对象的长度,请使用len 函数。

    assert 0 < entered_numbers_list < 21
    return ticket_numbers
    

    希望这会有所帮助。

    【讨论】:

    • 我认为@sybrg 不小心忘记调用他/她所指的 len 函数。 :-)
    • 很高兴了解“退货后不会执行”的更多信息。但是,代码更新后的错误“TypeError: '
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-30
    • 2022-11-10
    • 1970-01-01
    • 2014-07-16
    • 2012-12-02
    • 2020-01-10
    相关资源
    最近更新 更多