同学的一道题,这一看就该上暴力枚举啊!
思忖良久后,上网搜了一下大佬的解法,比自己想的妙多了,于是大体上参照着那份做了点注释。(但总感觉在切片上还可以更优),目前没什么更好的思路,先记下
虽然题目洋洋洒洒,但实际上就是:将一个六位数切割成几个整数,整数间可以加减乘除组合,如果有一种组合的值为100,则该六位数不lucky,输出False
from itertools import product
#product(list1,list2)就是依次从list1,list2中各取一个元素,俩元素组成一个tuple元组,再将所有元组组合成一个列表返回
def ck(input_number): #检查可能的组合结果里有没有100
def p_r(input_number): #计算可能的结果
#yield类似return,就是返回一个值,并且记住这个返回的位置,下次迭代从这个位置开始
yield int(input_number)
for i in range(1,len(input_number)):
#切片,题目里说了不可以改变输入字符串的顺序
for (x,y) in product(p_r(input_number[:i]),p_r(input_number[i:])):
yield from (x+y,x-y,x*y)
if y !=0: #检查一下y是否为0,因为如果分母为0 程序会崩
yield x/y
return True if 100 not in p_r(input_number) else False
if __name__ =='__main__':
a='y'
while a=='y': #这里只是为了方便测试
ticket_number=input("请输入ticket number:") #python3默认input的是string
if (len(ticket_number)==6): #检查输入数字是否是6位,题目里说明了是6位
print(ck(ticket_number)) #输出结果
else:
print("输入错误")
a=input("是否继续输入,y or n:")