1

我正在尝试缩短我的代码并拥有更多功能,但它无法正常工作。

这是我的代码(基本上)

def times4():  
    number = droid.dialogGetInput('Input', 'Enter a number between 1 and 10').result  
    number4 = number * 4  
    if number == '1':  
        droid.dialogCreateAlert(number,number + ' * 4 =' + number4)  
        droid.dialogSetPositiveButtonText('Ok')  
        droid.dialogShow()  
        droid.dialogGetResponse()  

我明白了:

1,1 * 4 = 1111

当我想得到这个时:

1,1 * 4 = 4
4

7 回答 7

6

你要:

number = int(number)

目前,“数字”是一个字符串(即“1”而不是 1),因此将它乘以 4 自然会得到“1111”。使用 int() 将为您提供字符串的整数表示。

于 2011-05-12T17:34:46.333 回答
3

您的变量编号是字符串而不是 int。所以它做了一个“字符串乘法”。尝试将数字转换为 int 或 float。

number = int (number)

number = float (number)
于 2011-05-12T17:40:56.593 回答
2

我相信您的号码是字符串类型。当您将一个字符串乘以一个数字时,如果您执行以下操作,它会返回许多相同的字符串:

number4 = int(number) * 4 

它应该工作。

于 2011-05-12T17:35:24.013 回答
2

问题是当用户输入一个数字(或任何东西)时,该输入被存储为一个字符串。因此,当您获得用户的输入时,您并没有获得1- 相反,您获得的是'1'.

>>> '1' * 4
'1111'

>>> 1 * 4
4

解决方法是改变

number = droid.dialogGetInput('Input', 'Enter a number between 1 and 10').result

number = int(droid.dialogGetInput('Input', 'Enter a number between 1 and 10').result)

干杯

于 2011-05-12T17:36:17.923 回答
0

以下是您的代码应如何用于您的预期输出:

def times4():  
    result = droid.dialogGetInput('Input', 'Enter a number between 1 and 10').result
    number = int(result)

    if number >= 1 and number <= 10:
        number4 = number * 4  
        droid.dialogCreateAlert('%i' % number, '%i * 4 = %i' % (number, number4))  
        droid.dialogSetPositiveButtonText('Ok')  
        droid.dialogShow()  
        droid.dialogGetResponse()  
于 2011-05-12T17:52:30.843 回答
0

实际上,dialogGetInput 返回一个“Result”类的对象。我遇到了类似的困难,因为 int() 不接受“结果”作为参数。对于 Result 类支持的属性或方法,我在 SL4A 中没有找到任何参考。

安德鲁

于 2011-05-23T15:32:37.100 回答
0

我不知道这个“机器人”套件,但我怀疑它正在从 dialogGetInput 返回一个字符串。如果你将 python 中的一个字符串乘以 N,你会得到该字符串 N 次。

>>> s = 'foo'
>>> 小*4
'foofoofoofoo'
>>>

因此,您的程序看到的是 STRING '1',而不是整数 1。您需要先将答案转换为整数:

>>> s = '1' # 错误
>>> s * 4
'1111'
>>> s = int('1') # 对
>>> s * 4
4
>>>

另外,准备好处理有人输入数字以外的东西(例如,一个错字或试图成为一个混蛋并故意让你的程序崩溃的人)

>>> s = 'foo'
>>> 整数
回溯(最近一次通话最后):
  文件“”,第 1 行,在
ValueError: int() 以 10 为底的无效文字:'foo'
>>>

始终尝试围绕数据转换:

try:
   s = 'foo'
   i = int(s)
except ValueError, ex:
   MessageBox('Try again!')
于 2011-05-12T17:40:08.867 回答