【问题标题】:Python integer issuesPython整数问题
【发布时间】:2011-09-11 01:10:54
【问题描述】:

编辑:已解决--此处的源代码: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)(不是 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'

这段代码 sn-p 是一个更大的程序的一部分,该程序设计用于从计算机控制 roku 播放器,到目前为止一切正常,但这是为了自动在搜索字段中输入,所以你没有不断滚动,直到找到一个字母并选择。 c1(row) 将是第 1 行第 x 行,如果你们中的任何人想要整个程序的源代码,我很乐意将其发送出去。无论如何感谢您的收听。

【问题讨论】:

  • 我知道问题出在哪里,但是您没有给我们足够的信息来给您一个有帮助的答案。 row 是如何设置的,Up()Down()Select() 到底是做什么的?
  • @user802303:Python 是强类型的。它不会将字符串视为整数。另外,time.sleep 按秒计算,所以第一个会休眠 250 秒。
  • @TokenMacGuy: row 是参数,我怀疑函数的作用并不重要。

标签: python string integer


【解决方案1】:

也许你的意思是

while row_down > 1:

(注意1 不带引号)。如果是这样,请使用c1(3) 而不是c1('3') 调用c1


此外,在 CPython(第 2 版,但不是第 3 版)中,整数可以与字符串相媲美,但答案可能不是您所期望的:

3 > '1'
# False

在将任何整数与任何字符串进行比较时,整数总是小于字符串,因为 (believe it or not!) i(如整数)在字母表中位于 s(如字符串)之前。


正如 TokenMacGuy 已经指出的那样,将整数与字符串相加会引发 TypeError:

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

这可能解释了您在调用c1('3') 时看到的错误。

【讨论】:

【解决方案2】:
>>> 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

【讨论】:

    【解决方案3】:

    我怀疑循环运行没有错误,因为您可以从字符中减去来更改它:“b - 1 = a”。 (阅读编辑)它也没有错误是因为,就像 Marcelo Cantos 在他的评论中所说的那样, first time.sleep 是 250 秒,而不是 0.250 秒。当您减去 ASCII 字符范围时,删除 time.sleep 时的错误可能会出现,因为没有 time.sleep,它会更快地通过循环。

    希望对你有帮助!

    编辑:实际上,我认为我所说的在 C 或其他东西中有效。在python中,它不起作用。不过,我说的其他内容可能会有所启发!

    【讨论】:

      猜你喜欢
      • 2023-04-04
      • 2019-05-03
      • 1970-01-01
      • 2023-03-13
      • 2023-03-28
      • 2020-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多