调试python函数

问题描述:

我有麻烦让我的函数工作。我的功能需要是一个接受*Asterisk字符的参数,并且会在随后的行中打印出1个星号,3个星号,5个任意奇数。所以第一行将有1次,2次3次,等等。该参数将接受任何奇数int调试python函数

我尝试:

def arrowHead(n): 
    spaces = n/2 
    for x in range(1, n+2, 2): 
     string_ln = '' 
    for num in range(spaces): 
     string_ln = string_ln + ' ' 
    for num2 in range(x): string_ln = string_ln + '*' 
     spaces = spaces - 1 
     print string_ln 
     final_string = '' 
    for x in range(n/2): 
     final_string = final_string + ' ' 
     final_string = final_string + '*' 
    for x in range(3): 
     print final_string 
+0

这功课吗? – mVChr

+1

你还没有告诉我们什么不起作用。 – Aesthete

+0

@mVChr不,它的样本测试问题我在星期一的测试之前就要完成了。 –

不是你的问题不清楚,但如果你要打印星奇数次,去与这个

def arrowHead(n): 
    print '*' * (2*n-1) 

更新: -

>>> def arrow(n,flag=1): 
    if flag<n: 
     print (' '*(arrow(n,flag+1))+' * '*(n-(2*flag-1))) 
    return 2*flag-1 

>>> arrow(10) 




      * 
      * * * 
     * * * * * 
     * * * * * * * 
    * * * * * * * * * 
+0

谢谢!但是,我怎样才能让箭头看起来像钻石,而不是一个pryamind?就像它是箭头(9),你将有一个ast。第一行,第二行,第三行,第二行和第一行中的第一行? –

+0

@queensmatin: - 更新了答案......... – user1655481

你不能用这种方式打印箭头,因为你不能在空格之间打印字符!

你可以尝试这样的事情?

def arrow(n): 
    for x in range(n+1): 
    print (' '*n)+(' *'*x) 
    n -= 1 

>> arrow(7) 
>> 
     * 
     * * 
    * * * 
    * * * * 
    * * * * * 
    * * * * * * 
* * * * * * * 
+0

哇,非常感谢!我明白我做错了什么。最后一个问题,我怎么能让箭头看起来像一颗钻石而不是一颗镰刀呢? –

+0

我很肯定你可以从这里弄清楚,我给你的代码是3行,你需要做相反的事情。如果这个答案对于原始问题是正确的,那么接受它,并在需要时询问另一个问题。 – Aesthete

+0

是否有一个原因是它是歪斜而不是没有额外空间的'('*'* x)'? –

如果要调试Python脚本,可以使用pdb。例如,在系统的shell或命令行:

python -m pdb yourscript.py 

然后你可以通过你的脚本中使用n(其中跳过函数调用),s(其步入函数调用)步骤,打印使用p yourvarname的变量状态,并使用其他几个命令(尝试使用help查看它们,然后help somecommand查看详细帮助)。