2015-01-08 4 views
-4

Я создаю скрипт python для поиска ETA файлов при загрузке в Интернет. Я сделал грубую работу, я попытался сделать это на python. В основном программа просит ввести размер файла и скорость загрузки. Но я застрял!Как разделить переменную на число в python?

Сценарий таков: .. (в процессе)

print "UPLOADING TIME COVERTER" 
print 
print " Please enter the file size in mb" 
size = raw_input() 
# for e.g 237mb 
print 
print "Please enter the current uploading speed in kb /sec" 
speed = raw_input() 
# for e.g 60kb/sec 
print 
A = speed * 60 
# speed is changed into minutes 
B = (A/1024) 
#KB is changed in MB 
C = (B/size) 
print "your eta is %r hours" %(C)` 

Ошибка я получаю это:

Traceback (most recent call last): 
    File "uploadingeta.py", line 14, in <module> 
    B = (A - 1024) 
TypeError: unsupported operand type(s) for -: 'str' and 'int'. 

Я искал Google и везде, но не смог решение.

+2

'raw_input' возвращает строку. Вам нужно преобразовать его в 'int' или' float', прежде чем делать математику со значением. –

+0

как это сделать? Я новичок в этом. :( –

+1

size = int (raw_input()) - будьте осторожны, что это вызовет исключение, если вход не может быть преобразован в ошибку int –

ответ

0

Вот несколько кодов для разбора и чтения. Модифицируйте в соответствии.

import re 

mb_match = re.compile(r'^([0-9])+[Mm][Bb]?$').match 
kb_match = re.compile(r'^([0-9])+[Kk][Bb]?$').match 
b_match = re.compile(r'^([0-9])+[Bb]?$').match 

def parse_size(text): 
    text = text.strip() 
    match = mb_match(text) 
    if match: 
    return int(match.group(1)) * 1024 * 1024 

    match = kb_match(text) 
    if match: 
    return int(match.group(1)) * 1024 

    match = b_match(text) 
    if match: 
    return int(match.group(1)) 

    raise ValueError('Invalid input') 


while True: 
    text = raw_input('Enter file size...') 
    try: 
    file_size_bytes = parse_input(raw_input('Enter file size: ')) 
    break 
    except ValueError as e: 
    print(e) 

while True: 
    text = raw_input('Enter upload speed size...') 
    try: 
    upload_speed = parse_input(raw_input('Enter file size: ')) 
    break 
    except ValueError as e: 
    print(e) 

#file_size_bytes 
#upload_speed 
+0

в строке 27 'NameError: name 'parse_input' не определен.' Как это определить? –

0

Вы не можете разделить str и int. вам придется бросить его в междунар такой, как

Int (скорость)

вы также можете добавить код в файл для отладки, такие как

печати (тип (скорость))

это скажет вам тип данных переменной, который полезен для решения всех видов проблем.

0

использование speed = int(raw_input)

Причина ваш код дает вам ошибку, потому что, когда вы используете необработанный ввод, он записывает входные данные как строки, так что в этом случае вам придется бросить его с помощью Int().

Возможно, вы уже видели другие ответы, но, надеюсь, мои могут немного объяснить проблему.