2016-09-12 13 views
-1

私はコードワークの問題があります。私はPythonを初めて使っています(それを使用するのは24時間未満です)。 私はダイヤモンドの問題を解決しています:Pythonの奇妙なループ2.7

タスク:

あなたが印刷されたことを文字列に必要な、アスタリスク(「*」)文字を使用して 画面上にひし形が表示されます。正確な出力形式については、提供されたテスト ケースを参照してください。

印刷方法から返される図形は、ダイヤモンドのように に似ています。ここで、入力として提供された数字は、中間の行に印刷された*の数を表します。上と下の行は中央に となり、中央の行よりも2 *少なくなります。各行の2 *の による縮小は、図の上下に に1つの*が印刷されるまで続きます。

入力が偶数または負数の場合はnullを返します(偶数または負数のダイヤモンドを印刷する場合は )。

例については、提供されたテストケースを参照してください。

パイソン注

プリントは、Pythonの予約語であるため、Pythonの学生は (N)メソッドの代わりにダイヤモンドを実装し、無効 入力するためのNoneを返してはなりません。

マイコード:

def diamond(n): 
    retorno = " *\n" 
    if n%3 == 0: 
     for i in range(n,0,-2): 
      retorno += i * "*" 
      print(retorno + str(i)); 
    #return retorno 

テストケース:

expected = " *\n" 
expected += "***\n" 
expected += " *\n" 
test.assert_equals(diamond(3), expected) 

出力します。varの初期化から最初の "*" はどのように来

* 
***3 
* 
****1 

forループのように繰り返しますか?

+0

あなたはあなたのメソッドを2回も呼び出さないでしょうか?最初のスニペットは何も返さない。どんな場合でもあなたのテストは真実ではありません。 –

+0

私はテストが合格しないことは知っていますが、最初の "*"がforループの中にあるように繰り返しているのだろうか、また私はcodewars.comのオンラインインタプリタを使っているのですか? –

+0

ところで、どんな出力も印刷されていないはずです。それは文字列を作成して返します。 –

答えて

2

[OK]を、私は正確にステップして、スクリプトステップで何が起こっているのか、あなたを説明しましょう:

(1)def diamond(n): 
(2) retorno = " *\n" 
(3) if n%3 == 0: 
(4)  for i in range(n,0,-2): 
(5)   retorno += i * "*" 
(6)   print(retorno + str(i)) 
  1. ライン1、N:あなたの「行数」とコードで

    = 3

  2. ライン2、N = 3、retorno = "* \ n"
  3. ライン5、N = 3、I = 3、retorno = "* \ n ***"
  4. 線6、n個= 3、i = 3、retorno = "* \ n ***"、 "* \ n *** 3"
  5. 行5、n = 3、i = 1、retorno = "* \ n ****"
  6. ライン6、N = 3、I = 1、retorno = "* \ N ****"、あなたは "* \ nは**** 1"

だから最終的にはあなたがプリントを持って印刷します2回:

* 
***3 
* 
****1 

また、Pythonでは ";"を使用しないでください。入力番号が奇数かどうかをテストする場合は、n%2 == 1を使用する必要があります。

2

あなたは、(i = 3)

retorno = " *\n" 

を持っており、最初の反復後に追加:

retorno = " *\n***" # printed 
# * 
#*** 

ませ改行が追加されませんでした。 2回目の繰り返しの後 (I = 1):

retorno = " *\n****" # printed 
# * 
#**** 

2印刷retornosは、あなたが見る、まさにです。

1

繰り返しはありません。それは* \ nとして生きていきます。最初にループを '***'にすると* \ n ***、次回は '*'を追加して* \ n ****になります、したがって出力:

* 
*** 

* 
**** 

注意はまた、そのn個の%3が奇数番号をテストするための方法ではありません、あなたがしたいのn%2 == 1。