Целочисленные проблемы Python - PullRequest
1 голос
/ 11 сентября 2011

РЕДАКТИРОВАТЬ: РЕШЕНО - ИСТОЧНИК КОД ЗДЕСЬ: http://matthewdowney20.blogspot.com/2011/09/source-code-for-roku-remote-hack.html

Заранее спасибо за чтение и, возможно, ответ на этот вопрос. Итак, у меня есть фрагмент кода, который выглядит следующим образом (команды Down () Select () и Up () все предопределены):

def c1(row):
   row_down = row
   row_up = row
   while row_down > '1':
       Down()
       row_down = row_down - 1
       time.sleep(250)
   Select()
   time.sleep(.250)
   while row_up > '1':
       Up()
       row_up = row_up - 1
       time.sleep(250)

Поэтому, когда я запускаю это с помощью c1 ('3') или c1 (3) (не jut 3, это делает любое число), он перестает отвечать, без ошибок или чего-либо еще, но выполняет первую команду Down (), и это, кажется, не проходит row_down = row_down - 1. Так что я думаю, что, возможно, он застрял на time.sleep (.250), потому что он не выполняет Select (), поэтому, если я удаляю time.sleep (.250) из кода, я получаю ошибку, подобную этой:

Traceback (most recent call last):
  File "test.py", line 338, in <module>
    c1('3')
  File "test.py", line 206, in c1
    row_down = row_down - 1
TypeError: unsupported operand type(s) for -: 'str' and 'int'

этот фрагмент кода является частью более крупной программы, предназначенной для управления проигрывателем roku с компьютера, и до сих пор все работало, кроме этого, то есть автоматизации ввода текста в поле поиска, чтобы вам не приходилось постоянно прокрутите, пока не найдете письмо и выберите. c1 (строка) будет столбец 1 строка x, если кто-то из вас хотел бы исходный код программы для всех, я был бы рад отправить его. В любом случае, спасибо за прослушивание.

Ответы [ 3 ]

4 голосов
/ 11 сентября 2011

Возможно, вы имели в виду

while row_down > 1:

(примечание 1 написано без кавычек).Если это так, вызовите c1 с c1(3), а не c1('3').


Кроме того, в CPython (версия 2, но не версия 3) целые числа сравнимы со строками, но ответ не в том, чтовы можете ожидать:

3 > '1'
# False

При сравнении любого целого числа с любой строкой целое число всегда меньше строки, потому что ( верите или нет! ) i (как в целом числе)предшествует s (как в строке) в алфавите.


Как уже указывал TokenMacGuy, добавление целых чисел со строками вызывает ошибку TypeError:

'3' - 1
# TypeError: unsupported operand type(s) for +: 'int' and 'str'

Это можетобъясните ошибку, которую вы видите при звонке c1('3').

1 голос
/ 11 сентября 2011
>>> x = raw_input('enter a number: ')
enter a number: 5
>>> x
'5'
>>> type(x)
<type 'str'>
>>> x + 5
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects
>>> type(int(x))
<type 'int'>
>>> int(x) + 5
10
>>> 

(если вы используете python3, используйте input вместо raw_input)

0 голосов
/ 11 сентября 2011

Я подозреваю, что цикл работает без ошибок, потому что вы можете вычесть из символа, чтобы изменить его: "b - 1 = a". (прочитайте, отредактируйте), это также не ошибка, потому что, как сказал Марсело Кантос в своем комментарии, первый тайм-аут длится 250 секунд, а не 0,250 секунд. Ошибка при удалении time.sleep может появляться, когда вы вычитаете из диапазона символов ASCII, так как он проходит через цикл намного быстрее без time.sleep.

Надеюсь, это поможет!

Редактировать: На самом деле, я думаю, что то, что я сказал, работает в Си или что-то. В питоне это не работает. Другие вещи, которые я сказал, могут пролить немного света!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...