1

Pythonを始めてわずか5日で、CodeAcademyを通じて学びます。私は他の言語の知識がありません(Rubyの知識はほとんどありません!)。

このコードで何が間違っているのですか?


Q:数値が3で割り切れる場合by_threeなど、2番目の関数を呼び出す関数を記述します。次に、から取得した結果を返す必要があります。については、その関数はから渡された数の3乗を返す必要があります。(数値を立方体にすることは、それを3乗することと同じです)。cube"False"cubecubeby_three

したがって、たとえば、by_three9を取り、それが3で均等に割り切れると判断し、それをキューブに渡します。キューブは729(9 ** 3の結果)を返します。ただし、4を取得した場合by_threeは、戻っFalseてそのままにしておく必要があります。

最後に、by_three3つの別々の回線で11、12、および13を呼び出します。

ANS:

def by_three(n):
    orig_num = n
    if (isinstance(orig_num, int) and orig_num%3 == 0 ):
        cube(orig_num)
    else:
        print "False"

def cube(orig_num):
    cube = orig_num**3
    print cube
    return

by_three(11)
by_three(12)
by_three(13)

上記のコードを実行すると、次のようになります。なぜこれらの値がこのように表示されるのですか?

False
1728
False
==> None
False
False
1728
Oops, try again.
4

3 に答える 3

1

なぜあなたが奇妙な結果を見ているのか私には言えません。コードをインタープリターにコピーすると、次のように表示されます。

>>> def by_three(n):
...     orig_num = n
...     if (isinstance(orig_num, int) and orig_num%3 == 0 ):
...         cube(orig_num)
...     else:
...         print "False"
... 
>>> def cube(orig_num):
...     cube = orig_num**3
...     print cube
...     return
... 
>>> by_three(11)
False
>>> by_three(12)
1728
>>> by_three(13)
False

ただし、この問題は、作成している問題よりもはるかに単純だと思います。質問の書き方がかなり悪いのでわかりにくいですが、これが私の答えです。

def by_three(n): return False if n % 3 else cube(n)

def cube(n): return n**3

by_three(11)
by_three(12)
by_three(13)

そして、これはインタプリタでどのように見えるかです:

>>> def by_three(n): return False if n % 3 else cube(n)
... 
>>> def cube(n): return n**3
... 
>>> by_three(11)
False
>>> by_three(12)
1728
>>> by_three(13)
False
于 2012-11-23T05:53:07.417 に答える
1

cubeまず、実際にを返すように関数を変更する必要がありますcube。また、一時的な結果を保存せずにをcube返すだけで、メソッドを簡略化することもできます。cube

def cube(orig_num):
    return orig_num**3   # Just return the cube

次に、by_three関数で「False」を出力するのではなく、それを返す必要があります。また、value返されたcube関数を返します。-

def by_three(n):
    if (isinstance(n, int) and n % 3 == 0):
        return cube(n)  # Added return here
    else:
        return False  #Changed print to return.

このメソッドを単純化して、single行のreturnステートメントだけにすることもできます。で値を渡す場合は、try-exceptインスタンスをチェックする代わりにブロックを使用する必要があります:-isinstancefunction

def by_three(n):
    try:
        return cube(n) if n % 3 == 0 else False
    except TypeError, e:
        return False

次に、メソッドを呼び出すときに、取得した結果を出力します。-

print by_three(11)
print by_three(12)
print by_three(13)
于 2012-11-23T05:54:17.777 に答える
0

あなたのcubeメソッドでは、実際には何も返していません。ブロック内の最後のステートメントを返すRubyとは異なり、返す内容を明示的に指定する必要があります。また、値の防御コピーを作成する必要もありません。さらに、名前を再利用することはできません。そうしないcubeと、メソッド定義が破壊されてしまいます。

def cube(orig_num):
    return orig_num ** 3

次に、呼び出し元のメソッドで値を返す必要があります。これは演習として残しておきます。ここから理解するのは難しいことではありません。

第三に、あなた(一種)は、数値が整数であるか浮動小数点であるかを心配する必要はありません。浮動小数点数には不正確さがありますが、値を3で完全に割り切れないようにする必要があります。

于 2012-11-23T05:57:40.573 に答える