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