2016-11-09 2 views
1

Итак, у меня возникла проблема при попытке преобразовать переменную t в float, и она дает мне ошибку, говоря: «невозможно преобразовать строку в float:» с пробелом как ложным.Python ValueError: не удалось преобразовать строку в float:

def FtoC(a): 
    a=(t-32)*1.8 
    return a 
def FtoK(a): 
    a=(a-32)*1.8+273 
    return ta 
def CtoF(a): 
    a=a*1.8+32 
    return a 
def CtoK(a): 
    a=a+273 
    return t 
def KtoC(a): 
    a=a-273 
    return a 
def KtoF(a): 
    a=(a+459.67)*5/9 
    return a 
######################################################## 
import re 
t=input() 
while True: 
    if t=='end': 
      break 
    tl=list(t) 
    t=re.findall('\d+', t) 
    t=''.join(t) 
    t=float(t) 
    if tl[-1]!='C' or tl[-1]!='K' or tl[-1]!='F' or t>200 or t<-100: 
     print("Wrong") 
    else: 
     if tl[-1]=='C': 
      print("%.2f" % t,'C',CtoF(t),'F',CtoK(t),'K') 
     if tl[-1]=='K': 
      print("%.2f" % t,'K',KtoC(t),'C',KtoF(t),'F') 
     if tl[-1]=='F': 
      print("%.2f" % t,'F',FtoC(t),'C',FtoK(t),'K') 
    t=input() 

Я тестировал с печатью команд и между ними он печатает значение с плавающей точкой только в порядке, но в если команды он показывает ошибку, так что он просто печатает «Wrong» каждый раз. Когда я извлекаю:

if tl[-1]!='C' or tl[-1]!='K' or tl[-1]!='F' or t>200 or t<-100: 
      print("Wrong") 

Код работает ЮС штраф. Где проблема?

Я запуск программы на частный университет платформу, и это то, что она возвращает:

Non-zero exitcode 1 
*** Program stderr output following *** 
Traceback (most recent call last): 
    File "my_code.py3", line 28, in 
    t=float(t) 
ValueError: could not convert string to float: 

При использовании Python он просто печатает «Wrong», без каких-либо ошибок.

+3

Опубликовать полное сообщение с обратной связью пожалуйста. – Selcuk

+0

вы никогда не будете сопоставлять любые отрицательные числа с вашим методом ... –

+2

Как в стороне, почему вы обнаруживаете 't> 200' как условие ошибки без учета единиц? 15 ° C ≈ 59 ° F ≈ 288 Кельвин. – Chris

ответ

1

Ваша проблема не в преобразовании в поплавок, а в вашем состоянии.

напишите таблицу истинности, и вы найдете свою ошибку.

В качестве побочного примечания это довольно запутанно, используя отрицание в состоянии, если это абсолютно необходимо.

попробуйте использовать условие:

allowed_scales = ["C", "K", "F"] 
if tl[-1] in allowed_scales and -100<t<200: 
    # do your work here 
else: 
    print("wrong") 

У вас также есть проблемы с вашим регулярным выражением вырезания любых минус знаков, так что вы никогда не получите отрицательную температуру.

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

while True: 
    # in python 2: 
    t = raw_input() 
    # in python 3: 
    t = input() 
    if t=='end': 
      break 
    try: 
     t=float(t[:-1]) # -1 to cut off the scale type 
    except ValueError: 
     print("Not valid input. try again.") 

    allowed_scales = ["C", "K", "F"] 
    if tl[-1] in allowed_scales and -100<t<200: 
     if tl[-1]=='C': 
      print("%.2f" % t,'C',CtoF(t),'F',CtoK(t),'K') 
     if tl[-1]=='K': 
      print("%.2f" % t,'K',KtoC(t),'C',KtoF(t),'F') 
     if tl[-1]=='F': 
      print("%.2f" % t,'F',FtoC(t),'C',FtoK(t),'K') 
    else: 
     print("wrong") 

Работа с пользовательским вводом всегда сложна, поскольку они всегда могут вводить все, что им нужно в коробке. использование try-except будет обрабатывать большинство ошибок пользователя в этом случае.

+0

Большое спасибо. Я давно не начинал изучать Python и программирование в целом, поэтому спасибо, что указал на мою ошибку. Я также немного изменил код для включения негативов, я просто использовал строки вместо списков. Мне все еще нужно немного поработать над кодом, но это было мое самое большое беспокойство. –

+0

Нет проблем. Удачи. – Tom

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