2017-10-26 16 views
1
def numberToText(number): 
    if number == 1: 
     return('one') 
    elif number == 2: 
     return('two') 
    elif number == 3: 
     return('three') 
    elif number == 4: 
     return('four') 
    elif number == 5: 
     return('five') 
    elif number == 6: 
     return('six') 
    elif number == 7: 
     return('seven') 
    elif number == 8: 
     return('eight') 
    elif number == 9: 
     return('nine') 
    elif number == 10: 
     return('ten') 

def tenGreenBottles(): 
    print ("How many bottles to start with?") 
    bottles = int(input()) 
    for i in range (bottles, 0, -1): 
     print "%g green bottles, hanging on the wall" %numberToText(i) 
     print "%g green bottles, hanging on the wall" %numberToText(i) 
     print "and if one green bottle, should accidentally fall" 
     bob = i - 1 
     print "there'd be %g green bottles." %numberToText(bob) 
     print 

私はこのコードをしばらく使用していますが、Forループで何をしても、文字列の代わりにNaNが出力されます。関数numberToTextは、Forループを使用して文字列の書式を指定するときに意図したとおりに機能します。Python forループは、文字列出力の代わりにNaNを返します。

+1

これは実行しているコードとまったく同じですか?もしそうなら、インデントが悪いために複数の構文エラーが発生するはずです。これはPythonでは非常に重要です。実際に実行していることがわかるように、コードのインデントを修正してください。 –

+0

numberToTextが間違ってインデントされました! –

+0

私は '%d'に変更した時点で、" undefined "と表示されます。 – Adam

答えて

2

あなたは代わりに、これを試してみてください:

print "{} green bottles, hanging on the wall".format(numberToText(i)) 

Pythonでは、当初は(我々はここで何を言ってるのかである)、文字列の補間を実行するための一般的な方法をformat

を推薦するための私の推論を書式文字列(%s%d、または%gなど)と、文字列とその中に挿入されるものの間の書式演算子を使用することでした。

ただし、補間したいものの種類には正しい書式文字列を使用する必要があります。

は、例えば、別の文字列に文字列を挿入するために、あなたは%s使用:

>>> print "%s green bottles, hanging on the wall" % "fifteen" 
fifteen green bottles, hanging on the wall 

をしかし、あなたは番号を持っている場合は、補間したい、あなたは一般的に%d使用します。

>>> print "%d green bottles, hanging on the wall" % 15 
15 green bottles, hanging on the wall 

間違えた場合、エラーが発生します:

>>> print "%d green bottles, hanging on the wall" % "15" 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: %d format: a number is required, not str 
>>> print "{} green bottles, hanging on the {}".format(20, "balcony") 
20 green bottles, hanging on the balcony 

あなたは、文字列の補間をより快適に、あなたが試すことができます:あなたは、文字列の補間を実行するための新しい、より強力な方法である、あなたは、Pythonに新しいしているので、私はちょうど代わりformatを使用することをお勧めしますように思えましたformatでさらに高度な作業を行う文字列補間を実行するために、おそらく%を再度使用する必要はありません。私はちょうどに焦点を当てて、覚えてお勧めします。format

+0

壁紙に「%numberToText(i)」とぶら下がっている「印刷」%sの緑色のボトルは、トリックも同様に行います(つまり、「%g」ではなく「%s」)。 – Sebastian

+1

@Sebastianそうです。しかし、なぜそれを 'format()'で使うのですか? – roganjosh

+0

壁紙に「print」{}緑色のボトルを貼り付けました。「format」(numberToText(i)) 'これは私を助けました。 '%s'ま​​たは' {} 'の使用の違いをまだ理解していません。 format' – Adam

関連する問題