光头小淘七 发表于 2022-11-17 16:03:40

简化程序

a=input()
a=eval(a)
def apple():
    for i in a:
      for j in a:
            for k in a:
                for h in a:
                  for g in a:
                        print(i,j,k,h,g)
apple()
感觉程序太麻烦了,而且不能满足题目中说的只列出“其他可能”,最后希望程序可以列举不止五个,按照用户的输入来定

tommyyu 发表于 2022-11-17 16:08:00

https://www.bilibili.com/video/BV1zB4y1Q7zv/

光头小淘七 发表于 2022-11-17 16:10:57

tommyyu 发表于 2022-11-17 16:08
https://www.bilibili.com/video/BV1zB4y1Q7zv/

不能满足题目中说的只列出“其他可能”,最后希望程序可以列举不止五个,按照用户的输入来定{:5_92:}

tommyyu 发表于 2022-11-17 16:18:03

本帖最后由 tommyyu 于 2022-11-17 16:19 编辑

>>> import itertools
>>> def apple():
      a = eval(input())
      b = int(input('请输入次数:'))
      for i in itertools.product(*( * b)):
            for j in i:
                print(j, end = ' ')
            print()

      
>>> apple()

请输入次数:3
1 1 1
1 1 2
1 1 3
1 2 1
1 2 2
1 2 3
1 3 1
1 3 2
1 3 3
2 1 1
2 1 2
2 1 3
2 2 1
2 2 2
2 2 3
2 3 1
2 3 2
2 3 3
3 1 1
3 1 2
3 1 3
3 2 1
3 2 2
3 2 3
3 3 1
3 3 2
3 3 3

光头小淘七 发表于 2022-11-17 16:24:39

for i in itertools.product(*( * b)):
这个代码能解释一下吗

光头小淘七 发表于 2022-11-17 16:35:42

tommyyu 发表于 2022-11-17 16:18


感觉您好像误解我的话了,这个程序和图中所写的不是一个题,我的意思是可以输入或者
你看这样输入进去不一定是五个元素,也可以是三个。不是额外加输入次数

jhq999 发表于 2022-11-17 16:40:32

光头小淘七 发表于 2022-11-17 16:35
感觉您好像误解我的话了,这个程序和图中所写的不是一个题,我的意思是可以输入或者
...

字符可以重复吗?例如 1、2、3
1、1、1算其中的一个答案吗?

tommyyu 发表于 2022-11-17 16:40:44

本帖最后由 tommyyu 于 2022-11-17 16:44 编辑

def apple():
    a = eval(input())
    b = 5
    for i in itertools.product(*( * b)):
      for j in i:
            if tuple(sorted(i)) == tuple(sorted(set(i))):
                print(j, end = ' ')
      print()这样就是原题的效果

光头小淘七 发表于 2022-11-17 16:41:31

jhq999 发表于 2022-11-17 16:40
字符可以重复吗?例如 1、2、3
1、1、1算其中的一个答案吗?

不能哦

光头小淘七 发表于 2022-11-17 16:42:39

tommyyu 发表于 2022-11-17 16:40
这样就是原题的效果

for i in itertools.product(*( * b)):
能解释一下吗

tommyyu 发表于 2022-11-17 16:46:45

光头小淘七 发表于 2022-11-17 16:42
能解释一下吗

*b就是 ,其中有 b 个 a

itertools.product(*( * b)) 中,*( * b) 就是 *,而itertools.product( *( * b) )就是itertools.product( * ),其中这个 * 是解包,就变成了 itertools.product(a, a, a, ...)

tommyyu 发表于 2022-11-17 16:49:15

刚刚的代码有一个错误{:10_266:}

这个是改完的:def apple():
    import itertools
    a = eval(input())
    b = 5
    for i in itertools.product(*( * b)):
      if tuple(sorted(i)) == tuple(sorted(set(i))):
            for j in i:
                print(j, end = ' ')
            print()

jackz007 发表于 2022-11-17 17:05:22

本帖最后由 jackz007 于 2022-11-17 17:07 编辑

      这个代码用递归实现,楼主可以测试
def foo(s , g):
    if s:
      for x in s:
            s1 = '' . join(s . split(x))
            foo(s1 , g + x)
    else : print(g)

s = input()
foo(s , '')

光头小淘七 发表于 2022-11-17 17:06:17

1

tommyyu 发表于 2022-11-17 16:46
*b就是 ,其中有 b 个 a

itertools.product(*( * b)) 中,*( * b) 就是 *[ ...

怎么回事

tommyyu 发表于 2022-11-17 17:07:39

光头小淘七 发表于 2022-11-17 17:06
怎么回事

出现了bug{:10_266:}
def apple():
    import itertools
    a = eval(input())
    b = 5
    for i in itertools.product(*( * b)):
      if tuple(sorted(i)) == tuple(sorted(set(i))):
            for j in i:
                print(j, end = ' ')
            print()
这个已经试过,没有任何问题了

光头小淘七 发表于 2022-11-17 17:17:27

if tuple(sorted(i)) == tuple(sorted(set(i))):
这行是什么意思{:10_266:}
又什么作用啊,感觉用处不大,但是我删掉后程序的运行结果全变了

tommyyu 发表于 2022-11-17 17:20:43

光头小淘七 发表于 2022-11-17 17:17
这行是什么意思
又什么作用啊,感觉用处不大,但是我删掉后程序的运行结果全变了

判断有没有重复

光头小淘七 发表于 2022-11-17 17:25:56

tommyyu 发表于 2022-11-17 17:20
判断有没有重复

大佬,你忘了去掉它本身了,题目说的是要给出其他可能,要把输入的那种情况剔除

光头小淘七 发表于 2022-11-17 17:26:52

光头小淘七 发表于 2022-11-17 17:25
大佬,你忘了去掉它本身了,题目说的是要给出其他可能,要把输入的那种情况剔除

我真的不太会   麻烦您了{:10_254:}

tommyyu 发表于 2022-11-17 17:33:36

光头小淘七 发表于 2022-11-17 17:25
大佬,你忘了去掉它本身了,题目说的是要给出其他可能,要把输入的那种情况剔除

是不是这个意思>>> def apple():
    import itertools
    a = eval(input())
    b = 5
    if tuple(sorted(set(a))) != tuple(sorted(a)):
          print('输入错误!')
    for i in itertools.product(*( * b)):
      if tuple(sorted(i)) == tuple(sorted(set(i))):
            for j in i:
                print(j, end = ' ')
            print()
页: [1] 2
查看完整版本: 简化程序