python与添加逗号和毕达哥拉斯

时间:2013-10-14 04:06:07

标签: python python-2.7

def FuncE():
    for x in range(1,11):
        print str(2*x-1) + ",",


def FuncF():
    n = 7
    c = "1"
    for x in range(0, 9-1):
        print str(x*c) + ', ',


def FuncG():
    for a in range(1,51):
       for b in range(a + 1,51):
           for c in range(b + 1,51):
               if (a*a + b*b == c*c):
                       print  "\t\t\t",a,b,c

我正在使用idle(python GUI)然后在python(命令行)中工作

对于FuncE 需要打印1,3,5,7,9,11,13,15,17,19,但当我尝试它时,它出现像1,3,5,7,9,11,13,15,17,19 ,附加逗号

我需要FuncF打印出1,11,111,1111,11111,111111111111,但这里的问题是它出现了,1,11,111,1111,11111,111111111111,我不知道我想要一个逗号开始或结束。我需要他们脱掉。

然后是FuncG 我试图通过使用毕达哥拉斯数字使其工作,但只使用一个“如果”命令 并且当出来时也不希望在列中出现两次相同的数字 当我尝试它时出现了:

3 4 5

4 3 5

5 12 13

6 8 10

7 13 17

8 6 10

。 。

。 。

等等

2 个答案:

答案 0 :(得分:0)

def odd_numbers(n):
    return ','.join([str(2*i-1) for i in range(1,n)])


def groups_of_ones(n):
    return ','.join([str("1"*i) for i in range(1,n)])


def pythagorean_numbers(n):
    import itertools
    all_groups = set([])
    for a, b, c in itertools.combinations(range(1,b)):
        group = tuple(sorted([a,b,c]))
        if a*a + b*b == c*c and group not in all_groups:
            all_groups.add(group)
    return all_groups

print odd_numbers(11) # prints 1,3,5,7,9,11,13,15,17,19
print groups_of_ones(8) # prints 1,11,111,1111,11111,111111,1111111
for a,b,c in pythagorean_numbers(51):
    print "\t\t\t", a, b, c

在这个答案中,我向你展示了python字符串的join方法(查看" python string join"在谷歌上获取更多帮助)。这就是你在FuncE和FuncF中尝试做的事情。

我还将您的函数重命名为描述该函数的名称(称为自我文档)。

我还在毕达哥拉斯函数中添加了一个集合来存储以前看到的数字组。我还向您展示了itertools.combinations函数,这是一种更简单的方法来执行您正在进行的三重循环。使用这种方法,您可能不需要我添加的and group not in all_groups,但我这样做是为了告诉您如何确保您还没有看过这组数字。

最后,我没有在函数中打印,而是返回了函数创建的值。

答案 1 :(得分:-1)

完成后可以打印字符串吗?

my_string = ""
   for x in range(0, 9-1):
      my_string += str(x)
      if x != 7:
         my_string += ", "
print my_string

当您在print对象之后使用逗号字符打印某些内容时,python会自动插入空格。如果你想解决这个问题,你需要一次打印一个字符串,使用字符串插值或类似的东西。

你需要对问题的FuncG部分更清楚一点,我不理解你的问题。