あなたの問題は、の不適切な使用ですinput
。input
と同等ですeval(raw_input())
。このeval()
呼び出しでは、プログラム内のグローバルおよびローカルのコンテキストでPythonソースコードとして入力したテキストを評価しようとしますが、この場合は明らかに望ましくありません。入力した文字列が定義されていないことを報告するランタイムエラーが発生しないことに驚いています。
raw_input
代わりに使用してみてください:
def data_exp(nr, nc):
data=numpy.zeros((nr, nc))
print data
for i in range(0, nr):
for j in range (0, nc):
data[i, j]=input('Insert values: ')
numpy.savetxt(str(raw_input('Insert the name of the file (ex: "a.txt"): ')), data)
return data
編集:
上記のコードは、ipythonセッションで機能しています。それを機能させることができない場合は、他の何かが間違っています:
In [7]: data_exp(2,2)
[[ 0. 0.]
[ 0. 0.]]
Insert values: 1
Insert values: 2
Insert values: 3
Insert values: 4
Insert the name of the file (ex: "a.txt"): a.txt
Out[7]:
array([[ 1., 2.],
[ 3., 4.]])
In [8]: data_exp??
Type: function
Base Class: <type 'function'>
String Form: <function data_exp at 0x2ad3070>
Namespace: Interactive
File: /Users/talonmies/data_exp.py
Definition: data_exp(nr, nc)
Source:
def data_exp(nr, nc):
data=numpy.zeros((nr, nc))
print data
for i in range(0, nr):
for j in range (0, nc):
data[i, j]=input('Insert values: ')
numpy.savetxt(str(raw_input('Insert the name of the file (ex: "a.txt"): ')), data)
return data
In [9]: _ip.system("cat a.txt")
1.000000000000000000e+00 2.000000000000000000e+00
3.000000000000000000e+00 4.000000000000000000e+00