2016-04-06 3 views
0

J'essaye d'obtenir une seule ligne d'entrée contenant une chaîne et trois nombres flottants pour que python 2.7 puisse effectuer certaines moyennes, etc.python 2.7 stocker un flottant et une chaîne de la même ligne raw_input

ex. entrée: Tom 25 30 20

J'ai essayé:

name, score1, score2, score3 = raw_input().split() 
score1, score2, score3 = [float(score1),float(score2),float(score3)] 

mais il renvoie une erreur "invalide littérale" en raison de la chaîne. De plus, mon code me semble encombrant, y aurait-il un moyen plus simple d'y parvenir?

Nous vous remercions de votre aide!

+3

Vos fonctions de code bien exactement comme écrit, il ne jette pas d'erreur. – kindall

Répondre

2

Vous pouvez refactoriser cela un peu, mais ce que vous avez fonctionne et n'est pas si encombrant ou mauvais.

>>> user_input = raw_input('Enter your name and three numbers: ').strip().split() 
Enter your name and three numbers: Tom 25 30 20 
>>> name = user_input[0] 
>>> scores = map(float, user_input[1:]) 
>>> name 
'Tom' 
>>> scores 
[25.0, 30.0, 20.0] 

En procédant ainsi, consiste à utiliser une liste (avec comme scores[0] indices, scores[1]) au lieu des variables avec des noms comme n1, n2 (ce qui suggère toujours à moi, vous devriez utiliser une liste). L'utilisation de map avec float signifie que vous n'avez pas besoin d'écrire float(var) trois fois.

Vous pouvez également considérer strip() sur votre entrée utilisateur. C'est généralement une bonne idée, d'autant plus que vous divisez implicitement les espaces.

+0

Également un commentaire sur l'erreur littérale invalide. Vous pouvez vérifier si votre chaîne contient des caractères non imprimables et les supprimer avant de les convertir en flottant: 'print repr (user_input)' – fips

+0

Ouais c'est quelque chose de différent et nous avons besoin de plus d'infos de OP. Rien posté dans la question devrait causer cela, AFAIK. –

+1

Merci à tous pour l'aide supplémentaire. J'entrais dans une chaîne où il attendait int avant cela, je ne l'ai tout simplement pas compris. Python est mon premier effort dans la programmation, seulement depuis quelques mois maintenant! – cslewis

0

Vous pouvez résoudre votre problème comme celui-ci:

input = raw_input("Give me the input [name number number number]: ").split(" ") 
name = input[0] 
floats = map(float, input[1:]) 
print "I'm your name ", name 
print "I'm your floats ", floats 
print "I'm a sample average ", sum(floats)/len(floats) 

Vous pouvez obtenir tout flotteur avec:

floats[i]