lol.txt は次のとおりです。
1,2,3\n
\n
4,5,6\n
\n
AwesomeSauce,12.3,10\n
私が使用しているコード:
import csv
NumberAdult = input("Please enter the number of adults: ")
NumberAdult = int(NumberAdult)
NumberChild = input("Please enter the number of children: ")
NumberChild = int(NumberChild)
n = 0
with open ("lol.txt",'rt', newline = '\n') as f:
csv_r = (line for line in csv.reader(f) if line)
for row in csv_r:
entries = [(name, float(price1), float(price2)) for name, price1, price2 in csv_r]
for index, entry in enumerate(entries):
price1 = float(entry[1])
price2 = float(entry[2])
print ("%i. %17s - %5.2f / %5.2f" % (index, entry[0], price1, price2))
choice = int(input("Which package would you like?: "))
packageChoice = (entries[choice])
for row in packageChoice:
name = entry[0]
AdultPrice = float(entry[1])
ChildPrice = float(entry[2])
price = AdultPrice*NumberAdult + ChildPrice*NumberChild
print(name, price)
出力:
大人の人数を入力して
ください: 2 子供の人数を入力してください: 1
0. 4 - 5.00 / 6.00
1. AwesomeSauce - 12.30 / 10.00
どのパッケージをご希望ですか?: 1
AwesomeSauce 34.6
これが意味することは、lol.txt の最初の行を無視していることです。これは、この行をデータではなくフィールド名として扱っているように見えるためです1,2,3\n
。csv.reader()
これを回避する方法はありますか?または何かを使用csv.dictreader()
して、ファイル自体とは無関係にフィールド名を割り当てますか?
編集:csv.reader()
気にしないでください。フィールド名として扱われません。したがって、問題はこのセクションにあるようです。
with open ("lol.txt",'rt', newline = '\n') as f:
csv_r = (line for line in csv.reader(f) if line)
for row in csv_r:
さて、ここで何をすべきかわかりません。これは、スクリプトを機能させるのに最も近いものです。ヒント、検索用語、何かありますか?
最終編集: 気にしないでください。すべて動作するようになりました! 忘れていたループがありました:
for row in csv_r:
entries = [(name, float(price1), float(price2)) for name, price1, price2 in csv_r]
これにより、最初の行がスキップされました。その行をもう一度見させてくれた freenode の #python からのダッシュに感謝します!
新しい問題:
import csv
NumberAdult = input("Please enter the number of adults: ")
NumberAdult = int(NumberAdult)
NumberChild = input("Please enter the number of children: ")
NumberChild = int(NumberChild)
n = 0
with open ("lol.txt",'rt', newline = '\n') as f:
csv_r = (line for line in csv.reader(f) if line)
entries = [(name, float(price1), float(price2)) for name, price1, price2 in csv_r]
for index, entry in enumerate(entries):
price1 = float(entry[1])
price2 = float(entry[2])
print ("%i. %17s - %5.2f / %5.2f" % (index, entry[0], price1, price2))
choice = int(input("Which package would you like?: "))
packageChoice = (entries[choice])
for row in packageChoice:
name = entry[0]
AdultPrice = float(entry[1])
ChildPrice = float(entry[2])
price = AdultPrice*NumberAdult + ChildPrice*NumberChild
print(name, price)
唯一の「オプション」は (オプションとして入力したものに関係なく) 2. です。これは、リストの最後の行であるためentries
です。
>>>
Please enter the number of adults: 2
Please enter the number of children: 1
0. 1 - 2.00 / 3.00
1. 4 - 5.00 / 6.00
2. AwesomeSauce - 12.30 / 10.00
Which package would you like?: 1
AwesomeSauce 34.6
>>>
さて、問題はここにあると確信しています:
csv_r = (line for line in csv.reader(f) if line)
entries = [(name, float(price1), float(price2)) for name, price1, price2 in csv_r]
for index, entry in enumerate(entries):
または、メニューの結果に対してこれと同様の別のセクションを作成する必要がありますが、わかりません。両方の実装に取り組み、トラブルシューティングを試みます。