【问题标题】:My 'combination generator' does not return anything after given input [duplicate]给定输入后,我的“组合生成器”不返回任何内容[重复]
【发布时间】:2021-04-06 03:56:51
【问题描述】:

我对 python 中更“中间”的概念相当陌生。回顾一下我“学到”的东西,我决定制作一个组合生成器。基本上,您提供一些输入,然后它应该返回它的每个组合。 (例如,我输入“mark”,它应该返回“kram”、“makr”等)

但我怀疑“组合”功能有问题,我无法完全弄清楚原因。

from itertools import combinations


def combo_generator():
    user_string = {}
    for l in input("Enter a string for combo: "):
        combo = combinations(user_string, 8)
        user_string[l] = 1

    if user_string[l] >= 8:
        print("Too much strings! Enter less than 10 letters.")
        combo_generator()

    else:
        print(list(combo))


combo_generator()

因为这里是损坏的输出:

Enter a string for combo: "mark"
[]
[]
[]
[]

任何帮助都可以。谢谢。

【问题讨论】:

  • 请阅读How to debug small programs。您还可以使用Python-Tutor,它有助于逐步可视化代码的执行。
  • 我会读的。谢谢
  • 确实有帮助!
  • 它有帮助。谢谢,我得完善我的代码。

标签: python python-3.x combinations


【解决方案1】:

input() 的返回值为str,当你调用for i in str 时,就像在for l in input("Enter a string for combo: "): 中一样,你分别处理每个字符。

正如 itertools 文档所指定的那样,The number of items returned is n! / r! / (n-r)! when 0 <= r <= n or zero when r > n.。您的n=1r=8,因此您观察到空数组。

我相信您可能期望input() 是一堆用空格分隔的单词,如果是这样,您可能想将代码更改为:

 for l in input("Enter a string for combo: ").split(" "):
     combo = combinations(user_string, 8)

但请记住,您的单词长度必须至少为 8 个字符(即使这样,组合起来也不是很酷。您可能需要查看combinations_with_repetition())。

【讨论】:

  • 好的,谢谢。
  • 这不准确。请注意,虽然 OP 正在执行 for l in input(),但他们仍然调用 combinations(user_string, 8)... 问题比这要简单得多:len(user_string) = 4 所以该字符串没有与 8 个元素的组合...
  • 类似问题的解决方案有效。我只需要在“字母检测器”上工作,以避免由于太多组合而导致任何崩溃。
猜你喜欢
  • 1970-01-01
  • 2021-10-15
  • 2016-08-10
  • 2013-02-18
  • 1970-01-01
  • 2019-04-13
  • 2015-07-27
  • 2020-06-07
  • 1970-01-01
相关资源
最近更新 更多