私はPythonには新しく学習目的のために小さなサイコロのゲームスクリプトを作成しました。スクリプトの出力にはサイコロとロール数。Python I/OエラーValueError:クローズファイルの入出力操作
小さな数字では10個のロールなどで5個のサイコロと書いてありますが、テストでは999個のサイコロを999個のロールに渡しました.1億のレコードが返されますが、エラーが発生しました。感謝しています。
Pythonでプログラムの一貫性をテストする方法やベンチマークを定義する方法はありますか?
#! python
import random
diceno = int(raw_input("Please enter # of dice (an integer): "))
rollno = int(raw_input("Please enter # of rolls (an integer): "))
min = 1
max = 6
#checks
if diceno < 0 or diceno == 0:
print 'No dice to roll'
elif rollno < 0 or rollno == 0:
print 'No rolling'
else:
print '======================================='
for rollid in range(0, rollno):
for diceid in range(0, diceno):
print 'Roll #', rollid+1, 'Dice #', diceid+1,'->', random.randrange(min,max,1)
サンプル出力
Please enter # of dice (an integer): 2
Please enter # of rolls (an integer): 2
=======================================
Roll # 1 Dice # 1 -> 5
Roll # 1 Dice # 2 -> 4
Roll # 2 Dice # 1 -> 4
Roll # 2 Dice # 2 -> 2
エラー注:
Roll # 79 Dice # 240 Traceback (most recent call last):
File "", line 1, in runfile('C:/Users/Niru/Documents/Python Scripts/diceroller.py', wdir='C:/Users/Niru/Documents/Python Scripts')
File "C:\Anaconda2\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 699, in runfile execfile(filename, namespace)
File "C:\Anaconda2\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 74, in execfile exec(compile(scripttext, filename, 'exec'), glob, loc)
File "C:/Users/Niru/Documents/Python Scripts/diceroller.py", line 17, in print 'Roll #', rollid+1, 'Dice #', diceid+1,'->', random.randrange(min,max,1)
File "C:\Anaconda2\lib\site-packages\ipykernel\iostream.py", line 317, in write self._buffer.write(string)
ValueError: I/O operation on closed file
出力は質問に属し、コメントではありません。 – Prune
あなたのエラーは、ファイルに対するI/O操作ですが、あなたのコードにはファイル操作はありません。ファイルI/Oを実行するコードの一部がありますか? –
また、完全なエラーメッセージを出力する必要があります。出力のすぐ上に数行の出力があります。 999、999を入力として、コードはうまく動作します。 – Prune