2015-11-18 3 views
0

Я создаю список, в котором я принимаю значения и преобразую их в float. Однако, если пользователь вводит символ A-Z/a-z, я должен изменить это значение на 0.0 и указать место, где значение было изменено. Здесь у меня проблемы. Я не совсем уверен, как найти значения и изменить их на 0.0, если они не являются числовыми. Вот мой код до сих пор:PYTHON: Изменение элемента списка из строки в float

def main(): 
    # Creating the list 
    num_list = [] 
    val = input("Enter a number or 0 to stop: ") 

    while val != '0': 
     num_list += [val] 
     val = input("Enter a number or 0 to stop: ") 
    #The list before values are changed to floats  
    print("Before: ", num_list) 

    try: 
     if val.isdigit(): 
      newnumlist = [] 
      for val in list: 
       newnumlist.append(float(val)) 
     print(newnumlist) 
    except ValueError: 

main() 

После моего утверждения try я продолжаю получать TypeError. Нужно ли использовать переменную, такую ​​как i, чтобы изменить значения для float? И в моем, кроме тела, нужна ли мне переменная? Как мне найти алфавитные символы в моем списке, чтобы их изменить?

Заранее спасибо.

+0

Где бы вы хотели хранить информацию о местоположении? вы бы делали элемент чем-то вроде '(0.0, index)', если 'val' не является числом? –

ответ

2

(1) изменить

for val in list: 

к

for val in num_list: 

(2) изменение

except ValueError: 

к

except ValueError: 
    pass 

(или что вы хотите, чтобы программа выполняла в случае ValueError).

Это будет работать:

try: 
    newnumlist = [] 
    for val in num_list: 
     if val.isdigit(): 
      newnumlist.append(float(val)) 
     else: 
      newnumlist.append('0.0') 
    print(newnumlist) 
except ValueError: 
    pass 

Однако, у меня есть ощущение, что вы пытаетесь узнать о исключения так попробовать (каламбур) это:

newnumlist = [] 
for val in num_list: 
    try: 
     newnumlist.append(float(val)) 
    except ValueError: 
     newnumlist.append('0.0') 

print(newnumlist) 

Благодаря ekhumoro!

+0

Для ValueError, однако, как бы изменить алфавитные символы на поплавок? Я бы использовал метод replace, я полагаю, но как бы я мог определить, какие символы не являются числовыми? – Joshua

+1

В первом примере «try/except» является избыточным, поскольку 'isdigit' защищает от ошибок значений. Во втором примере 'try/except' должен идти * внутри * цикла (т. Е. Он просто заменяет проверку' isdigit'). – ekhumoro

+0

isdigit не работает для десятичных знаков –

-1

Вы не можете использовать isdigit, чтобы проверить, является ли строка плавающей точкой. Вы должны сделать это себя и затем отобразить список с помощью этой функции:

def parse(string): 
    try: 
     return float(string) 
    except Exception: 
     raise TypeError 

old_list = ["3.2","2.1"] 
new_list = [parse(i) for i in old_list] 


одна линия (без попробовать/за исключением):

new_list = list(map(float,old_list)) 
# or other style 
new_list = [float(i) for i in old_list] # certainly faster 

Его точно так же (конечно, медленнее):

new_list = [] 
for i in old_list: 
    new_list += [float(i)] # or [parse(i)] 
+0

Функция 'parse()' выключена. Даже если выбрасывать исключение было правильным делом (это не так), «бросить» это не вещь. – TigerhawkT3

+0

Омг ... я просто сделал потрясающий язык микширования ^^. Thx вы. Пересмотренный. –

Смежные вопросы