2016-04-11 4 views
0

Le code ci-dessous fournit une réponse inattendue lorsque j'utilise raw_input. Quelqu'un peut-il m'expliquer ce qui se passe et comment le résoudre?Python: Comportement étrange de 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 

L'exécution est:

What is your move? [0,1,0] 
[0] 
[1] 

La réponse attendue est

[1] 

Répondre

2

raw_input retourne une chaîne, en fait np.flatnonzero(np.array('adfsgh')) produit array([0]) aussi. Il suffit donc de faire une liste des ints:

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]) 
1
réponse

est un élément de chaîne . Mais vous voulez une liste. Vous avez donc besoin d'analyser l'entrée utilisateur dans une liste. Vous devez utiliser input() au lieu de raw_input(), qui parse l'entrée d'utilisateur, ou utiliser eval(raw_input()) (eval() contenant une chaîne à un élément ...

, mais je suggère d'entourer cette fonction avec try..except, pour vérifier si l'utilisateur l'entrée est valide, et aussi la boucle si l'entrée est toujours invalide: