2014-04-25 3 views
0

Salut, donc je suis très très nouveau à la programmation alors s'il vous plaît pardonnez-moi si je ne suis pas capable de demander le bon jargon, mais je suis en train d'écrire un programme simple pour une mission dans laquelle je « m pour convertir les unités CGS en unités SITraiter plusieurs valeurs d'entrée en Python

par exemple:

if num == "1": #Gauss --> Tesla 
     A=float(raw_input ("Enter value: ")) 
     print "=", A/(1e4), "T" 

avec ce que je suis seulement capable de convertir une valeur à la fois. Existe-t-il un moyen de saisir plusieurs valeurs, éventuellement séparées par des virgules et d'effectuer le calcul sur chacune d'entre elles simultanément et cracher une autre liste avec les valeurs converties?

+0

Y at-il encore quelque chose qui manque dans les réponses? –

+0

J'ai essayé de modifier le code que vous avez mis pour le reste de mon programme et cela fonctionne, mais une fois que les valeurs sont converties, le programme se ferme. – Christeanne

+0

n'est-ce pas ce que vous vouliez? lire dans une liste séparée par des virgules et puis quitter ?? De toute façon ... J'ai ajouté un autre exemple sur la façon de répéter la même procédure encore et encore jusqu'à ce que l'utilisateur appuie simplement sur Entrée. –

Répondre

3

Vous pouvez lire dans une liste de nombres séparés par des virgules de l'utilisateur (avec des espaces éventuellement ajoutés), puis le diviser, dépouiller l'espace blanc excessif et faire une boucle sur la liste résultante, convertir chaque valeur, la mettre dans un nouvelle liste, puis enfin sortir cette liste:

raw = raw_input("Enter values: ") 
inputs = raw.split(",") 
results = [] 
for i in inputs: 
    num = float(i.strip()) 
    converted = num/1e4 
    results.append(converted) 

outputs = [] 
for i in results: 
    outputs.append(str(i)) # convert to string 

print "RESULT: " + ", ".join(outputs) 

plus tard, quand vous êtes plus à l'aise en Python, vous pouvez le rendre plus agréable et plus compact:

inputs = [float(x.strip()) for x in raw_input("Enter values: ").split(",")] 
results = [x/1e4 for x in inputs] 
print "RESULT: " + ", ".join(str(x) for x in results) 

ou même aller aussi loin que (non recommandé):

print "RESULT: " + ", ".join(str(float(x.strip())/1e4) for x in raw_input("Enter values: ").split(",")) 

Si vous voulez continuer à le faire jusqu'à ce que l'utilisateur entre rien, envelopper tout comme ceci:

while True: 
    raw = raw_input("Enter values: ") 
    if not raw: # user input was empty 
     break 
    ... # rest of the code 
1

Bien sûr! Vous devrez fournir une sorte de "marqueur" pour quand vous avez terminé, cependant. Que diriez-vous ceci:

if num == '1': 
    lst_of_nums = [] 
    while True: # infinite loops are good for "do this until I say not to" things 
     new_num = raw_input("Enter value: ") 
     if not new_num.isdigit(): 
      break 
      # if the input is anything other than a number, break out of the loop 
      # this allows for things like the empty string as well as "END" etc 
     else: 
      lst_of_nums.append(float(new_num)) 
      # otherwise, add it to the list. 
    results = [] 
    for num in lst_of_nums: 
     results.append(num/1e4) 
    # this is more tersely communicated as: 
    # results = [num/1e4 for num in lst_of_nums] 
    # but list comprehensions may still be beyond you. 

Si vous essayez d'entrer dans un tas de valeurs séparées par des virgules, essayez:

numbers_in = raw_input("Enter values, separated by commas\n>> ") 
results = [float(num)/1e4 for num in numbers_in.split(',')] 

enfer si vous voulez la liste à la fois, de construire un dictionnaire!

numbers_in = raw_input("Enter values, separated by commas\n>> ") 
results = {float(num):float(num)/1e4 for num in numbers_in.split(',')} 
for CGS,SI in results.items(): 
    print "%.5f = %.5fT" % (CGS, SI) 
    # replaced in later versions of python with: 
    # print("{} = {}T".format(CGS,SI)) 
Questions connexes