Python:raw_input 的奇怪行为
Python: Strange behaviour of raw_input
当我使用 raw_input 时,下面的代码提供了一个意想不到的答案。任何人都可以向我解释发生了什么以及如何解决它吗?
import numpy as np
response = raw_input("What is your move? ")
response=np.array(response)
changingPositions=np.flatnonzero(response)
print changingPositions
response=np.array([0,1,0])
changingPositions=np.flatnonzero(response)
print changingPositions
执行是:
What is your move? [0,1,0]
[0]
[1]
预期的答案是
[1]
raw_input
returns 一个字符串,实际上 np.flatnonzero(np.array('adfsgh'))
也会产生 array([0])
。所以只需制作一个整数列表:
In [1]: import numpy as np
In [2]: response = raw_input("What is your move? ")
What is your move? 0,1,0
In [3]: positions = np.array(map(int, response.split(',')))
In [4]: changing_positions = np.flatnonzero(positions)
In [5]: changing_positions
Out[5]: array([1])
response 是一个 string 元素。但是你想要一个 list。
因此您需要将用户输入解析为列表。您应该使用 input()
而不是 raw_input()
,它解析用户输入,或者使用 eval(raw_input())
(eval()
将字符串解析为元素...
但是我建议用try..except包围这个函数,检查用户输入是否有效,如果输入仍然无效也循环:
import numpy as np
isValid = False
while !isValid:
try:
response = input("What is your move? ")
isValid = True
except:
print("Input is not valid!!")
response=np.array(response)
changingPositions=np.flatnonzero(response)
print changingPositions
response=np.array([0,1,0])
changingPositions=np.flatnonzero(response)
print changingPositions
当我使用 raw_input 时,下面的代码提供了一个意想不到的答案。任何人都可以向我解释发生了什么以及如何解决它吗?
import numpy as np
response = raw_input("What is your move? ")
response=np.array(response)
changingPositions=np.flatnonzero(response)
print changingPositions
response=np.array([0,1,0])
changingPositions=np.flatnonzero(response)
print changingPositions
执行是:
What is your move? [0,1,0]
[0]
[1]
预期的答案是
[1]
raw_input
returns 一个字符串,实际上 np.flatnonzero(np.array('adfsgh'))
也会产生 array([0])
。所以只需制作一个整数列表:
In [1]: import numpy as np
In [2]: response = raw_input("What is your move? ")
What is your move? 0,1,0
In [3]: positions = np.array(map(int, response.split(',')))
In [4]: changing_positions = np.flatnonzero(positions)
In [5]: changing_positions
Out[5]: array([1])
response 是一个 string 元素。但是你想要一个 list。
因此您需要将用户输入解析为列表。您应该使用 input()
而不是 raw_input()
,它解析用户输入,或者使用 eval(raw_input())
(eval()
将字符串解析为元素...
但是我建议用try..except包围这个函数,检查用户输入是否有效,如果输入仍然无效也循环:
import numpy as np
isValid = False
while !isValid:
try:
response = input("What is your move? ")
isValid = True
except:
print("Input is not valid!!")
response=np.array(response)
changingPositions=np.flatnonzero(response)
print changingPositions
response=np.array([0,1,0])
changingPositions=np.flatnonzero(response)
print changingPositions