Je me demandais comment je ne pouvais pas diviser cette chaîne pour un jeu qui m'était assigné. Le joueur est censé entrer une valeur x et y pour une grille 60x15.

answer = input('enter an x and y coordinate with a space between')

Mal faire mon x égal à 30 et mon y égal à 7

playerAnswer = []
answer = '30 7'
answer.split(' ')
playerAnswer.append((player[0], player[1]))

Quand je fais cela, je reçois playerAnswer pour être ['3', '0'] existe-t-il un moyen de faire du playerAnswer un ['30', '0']?

1
Abby Lacson 6 mars 2016 à 23:27

3 réponses

Meilleure réponse

Le problème est que vous n'utilisez pas la valeur de retour de split. str.split ne modifie pas une chaîne en place (les chaînes sont en fait immuables), mais renvoie une liste.

Démo:

>>> answer = '30 7'
>>> answer_split = answer.split(' ')
>>> answer
'30 7'
>>> answer_split
['30', '7']
>>> answer_split[0]
'30'
>>> answer_split[1]
'7'

Dans le cas où vous voulez des nombres réels, vous pouvez faire:

>>> answer_split = [int(x) for x in answer.split(' ')]
>>> answer_split
[30, 7]

Je ne sais pas exactement pourquoi vous indexez dans player au lieu du résultat de split lors de l'ajout à playerAnswer, c'est donc probablement un autre bogue.

Remarque: si vous souhaitez simplement diviser par n'importe quel espace, vous pouvez omettre l'argument ' ' à split.

1
timgeb 6 mars 2016 à 20:35

Le moyen le plus pythonique pour y parvenir est:

>>> x, y = map(int, input('enter an x and y coordinate with a space between').split())
>>> x
30
>>> y
7 

Venons-en maintenant au problème avec votre code:

playerAnswer.append((player[0], player[1]))

Remplacez player par answer car vous stockez les valeurs fractionnées dans la variable answer (je ne vois pas non plus de variable player dans le code que vous avez mentionné, donc je ne suis pas sûr mais je suis sûr que vous n'en avez pas besoin). Les lignes ci-dessous devraient fonctionner correctement.

playerAnswer.append((answer[0], answer[1]))

De plus, je ne pense pas que vous ayez besoin de 30 et 7 en tant que str. Pour le convertir en int, j'utilise map() fonction.

0
Moinuddin Quadri 6 mars 2016 à 20:44
a, b = [int(i) for i in answer.split()]
>>> a
30
>>> b
7

Ou, si vous voulez vraiment du texte:

playerAnswer = []
playerAnswer.append(tuple(i for i in answer.split()))

>>> playerAnswer
[('30', '9')]
0
Alexander 6 mars 2016 à 20:41