0

ループから発生した一連の数値を取得して、それらをファイル内の別々の行に書き込むのに苦労しています。私が今持っているコードは、ループの各行からのデータが必要な場合に、まったく同じデータを 5 行出力します。それが理にかなっていることを願っています。

    mass_of_rider_kg = float(input('input mass of rider in kilograms:'))
mass_of_bike_kg = float(input('input mass of bike in kilograms:'))
velocity_in_ms = float(input('input velocity in meters per second:'))
coefficient_of_drafting = float(input('input coefficient of drafting:'))


a = mass_of_rider_kg
while a < mass_of_rider_kg+20:
    a = a + 4
    pAir = .18*coefficient_of_drafting*(velocity_in_ms**3)  
    pRoll = .001*9.8*(a+mass_of_bike_kg)*velocity_in_ms
    pSec = pAir+pRoll
    print(pSec)
    myfile=open('BikeOutput.txt','w')
    for x in range(1,6):
        myfile.write('data:' + str(a) + str(mass_of_bike_kg) + str(velocity_in_ms) + str(coefficient_of_drafting) + str(pSec) + "\n")
    myfile.close()  
4

3 に答える 3

0

うーん - あなたのコードにいくつかの小さなエラーがあります -

最初に while ループで "w" を使用してファイルを開き、それを閉じることは、各反復に対応する行をファイルに書き込みたい場合にはお勧めできません。w+ フラグで十分かもしれません。しかし、繰り返しますが、for ループ内で開いたり閉じたりするにはコストが高すぎます。

簡単な戦略は-

ファイルを開き、反復を実行してファイルを閉じます。

上記の InspectorG4dget のソリューションで説明したように、それに従うことができます - 私が見る 1 つのキャッチを除いて - 彼は再び with 内でオープンを行っています (その結果は不明です)

これは少し良いバージョンです - うまくいけば、これはあなたが望むことをします.

mass_of_rider_kg = float(input('input mass of rider in kilograms:'))
mass_of_bike_kg = float(input('input mass of bike in kilograms:'))
velocity_in_ms = float(input('input velocity in meters per second:'))
coefficient_of_drafting = float(input('input coefficient of drafting:'))
with open('BikeOutput.txt', 'w') as myfile:
    a = mass_of_rider_kg
    while a < mass_of_rider_kg+20:
        a = a + 4
        pAir = .18*coefficient_of_drafting*(velocity_in_ms**3)  
        pRoll = .001*9.8*(a+mass_of_bike_kg)*velocity_in_ms
        pSec = pAir+pRoll
        print(pSec)
        myfile.write('data: %.2f %.2f %.2f %.2f %.2f\n' %  ( a, mass_of_bike_kg, velocity_in_ms,coefficient_of_drafting, pSec))

with の使用に注意してください。ファイルを明示的に閉じる必要はありません。それはwithによって処理されます。また、文字列を追加するのではなく、上記のように書式設定オプションを使用して文字列を生成することをお勧めします。

于 2013-10-04T03:27:59.563 に答える
0

これでできるはず

with open('BikeOutput.txt','w') as myfile:
    while a < mass_of_rider_kg+20:
        a = a + 4
        pAir = .18*coefficient_of_drafting*(velocity_in_ms**3)  
        pRoll = .001*9.8*(a+mass_of_bike_kg)*velocity_in_ms
        pSec = pAir+pRoll
        print(a, '\t', pSec)
        myfile=open('BikeOutput.txt','w')
        myfile.write('data:' + str(a) + str(mass_of_bike_kg) + str(velocity_in_ms) + str(coefficient_of_drafting) + str(pSec) + "\n")
于 2013-10-04T03:03:40.813 に答える
0

書き込みループでは、繰り返しは x です。ただし、 x はループのどこにも使用されていません。あなたが望むかもしれません:

        myfile.write('data:' + str(x) + str(mass_of_bike_kg) + str(velocity_in_ms) + str(coefficient_of_drafting) + str(pSec) + "\n")
于 2013-10-04T03:04:03.993 に答える