1

こんにちは、初心者の質問があります。

次のコードを印刷するように設定するにはどうすればよいですか。

1/30 + 2/29 + 3/28..........30/1

分子が増加 \ 分母が減少

私は次のものを持っています:

for i in range(1,31):
    v = i
for j in range(30,0,-1):
    t = j
    print(v/t)

しかし、プリント

1.0
1.0344827586206897
1.0714285714285714
1.1111111111111112
1.15384615384.........

どうすれば入手できますか1/30 + 2/29 + 3/28.....

どうぞよろしくお願いいたします。

4

5 に答える 5

3

必要なループは 1 つだけです。分母は常に 31 から分子を引いたものです。

r = 0
for i in range(1,31):
    r += i / (31 - i)
print(r)
于 2013-04-02T04:01:40.963 に答える
1

ここで起こっていることは、数値が出力される前に浮動小数点数に評価されているということです。評価せずに出力したいので、それらを文字列に挿入する必要があります。次の行は、変数を評価せずに出力に挿入する方法を示しています。

print "%d/%d" % (v,t)

print 関数の文字列をフォーマットする方法については、http://docs.python.org/release/2.5.2/lib/typesseq-strings.htmlを参照してください。

ただし、print 関数は自動的に新しい行を挿入するため、これでも各結果が別々の行に表示されます。次のループを使用して文字列を作成できます (減算によって分母を取得できるため、2 つではなく 1 つのループにきちんとパックできることに注意してください)。

string = ''
for i in range(1,31):
    string += "{}/{} + ".format(i, 31-i)
print string

これにより、「1/30 + 2/29 + ... + 30/1 +」が得られますが、これには最後のプラス記号と周囲のスペースが含まれます。これを修正するには、最後の行を次のように変更します

print string[:-3]

これらの最後の文字を削除します。

format 関数の使用方法については、http://docs.python.org/2/library/string.html#formatstringsを参照してください。

于 2013-04-02T04:01:52.370 に答える
1
print (" + ".join(["%s/%s"%(num,denom)for num,denom in zip(range(1,31),range(30,0,-1))]))

少なくとも思う

まとめて圧縮する(1,2,3...,30)(30,29,28...,1)、新しいタプルになります((1,30),(2,29),...,(30,1))

次に、これを反復して、各分子と分母を文字列に入れ、次のようなリストを作成します。これをフォーマット文字列で行いますが、代わり"%s/%s"%numerator,denominatorに使用する方が良い形式ですが、それは別の話です"%d/%d"

["1/30","2/29",...,"30/1"]

' + '次に、接着剤として使用してこのリストに参加するだけです

于 2013-04-02T04:02:03.093 に答える
1

数値ではなく文字列が必要だと思いますよね?

s = ''
for j in range(30, 0, -1):
    s += "{}/{} + ".format(31-j, j)
print s[:-2]

このドキュメントを読んで、それを理解してください。基本的に、2 組の中括弧をプレースホルダーとして使用して文字列をフォーマットし、最初のスロットに値 31-j を渡し、2 番目のスロットに j を渡します。

確かにもっと洗練された方法がありますが、これは手早く汚い方法です。

于 2013-04-02T04:03:15.523 に答える