2016-03-14 3 views
-5

У меня следующее сообщение об ошибке сообщил:неподдерживаемый тип операнда (ов) для -: 'INT' и 'ул'

unsupported operand type(s) for -: 'int' and 'str' 

с этим кодом:

def main(): 

# step 1 
print "LOAD CASE BASE" 
# using csv 
# into array of classes 
# filepath = 'C:\\Users\\standalone\\Dropbox\\PYTHONDEV\\Scripts\\BCO6004\\CASEBASE.txt' 
filepath = 'C:\Users\Trip Admin\Documents\Python Scripts\IntelSysAssignment\CASEBASE.txt' 
casebase = readCSVintoList(filepath) 

for case in casebase: 
    print case 
    print case[1] 
    c1 = Camera(case[0], case[1], case[2], case[3]) # overwritten, so store in an array of cases 
    print c1.get_special_features(), c1.get_optical_sensor_resolutions(), c1.get_optical_sensor_size(), c1.get_optical_zoom() 


# step 2 
print "GET USER INPUT" 
#2special_features =    input("Enter the camera's special_features: ") 
optical_zoom =     int(input("Enter the camera's optical_zoom: ")) 
optical_sensor_size =   int(input("Enter the camera's optical_sensor_size: ")) 
optical_sensor_resolutions = int(input("Enter the camera's optical_sensor_resolutions: ")) 
unknowncase = Camera("special_features", optical_zoom, optical_sensor_size, optical_sensor_resolutions) 


# step 3 
print "CALCULATE SIMILARITY" 
similarity = unknowncase.similarity(c1) 


# step 4 
print "PRINT OUT RESULT" 
print similarity 

class Camera(object): 


def __init__(self, special_features="", optical_zoom=0, optical_sensor_size=0, optical_sensor_resolution=0): 
    self.special_features = special_features     # e.g. Serial Shot Mode 
    self.optical_zoom = optical_zoom       # e.g. 5x, or 8x 
    self.optical_sensor_size = optical_sensor_size    # e.g. 1/2.3 
    self.optical_sensor_resolution = optical_sensor_resolution # e.g. 16.1MP, or 20.1MP 


def get_special_features(self): 
    return self.special_features 

def get_optical_zoom(self): 
    return self.optical_zoom 

def get_optical_sensor_size(self): 
    return self.optical_sensor_size 

def get_optical_sensor_resolutions(self): 
    return self.optical_sensor_resolution 


def similarity(self, camera): 
    sim = (self.optical_zoom - camera.optical_zoom)/10         # between 0 and 10 
    sim = sim + (self.optical_sensor_size - camera.optical_sensor_size)/3    # between 0 and 3 
    sim = sim + (self.optical_sensor_resolution - camera.optical_sensor_resolution/25) # between 0 and 25 
    return sim/3 

Я проверил другие сообщений и здесь, и добавил ввод ввода на входе, как показано выше, но я все еще получаю ошибку.

+2

Похоже, здесь много кода, что не имеет отношения к вопросу; попробуйте создать [короткий пример] (http://sscce.org/) проблемы. –

+0

След, сбрасываемый с исключением, не написан для удовольствия. Он содержит полезную и полезную информацию ... – glglgl

+0

Ошибка не требует пояснений - вы не можете вычитать строку из целого. С небольшим усилием вы сможете найти линию, в которой возникает проблема, и исследовать аргументы вычитания даже без нашей помощи. –

ответ

1

int() бросок должен быть DonT здесь

c1 = Camera(case[0], case[1], case[2], case[3]) 

Например,

c1 = Camera(int(case[0]), int(case[1]), int(case[2]), int(case[3])) 

Или

c1 = Camera(*[int(x) for x in case[0:4]) 

Глядя дальше, я предполагаю, что это должно быть float(...) вместо int(...)

+0

спасибо за предложение. Хотя я теперь получаю ошибку недействительный литерал для int() с базой 10: «прекрасный цвет», указывающий на эту строку? – TripVoltage

+1

спасибо, мой плохой, глядя на файл было несколько типов string, float и int! – TripVoltage