将变量乘以数字时遇到问题

时间:2011-05-12 17:30:06

标签: python variables multiplication sl4a

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

继承我的代码(基本上)

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

7 个答案:

答案 0 :(得分:5)

你想:

number = int(number)

目前,'number'是一个字符串(即'1'而不是1),所以将它乘以4自然只给你'1111'。使用int()将为您提供字符串的整数表示。

答案 1 :(得分: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)

干杯

答案 2 :(得分:2)

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

number = int (number)

number = float (number)

答案 3 :(得分:1)

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

number4 = int(number) * 4 

它应该有用。

答案 4 :(得分:0)

我不知道这个'droid'套件,但我怀疑它是从dialogGetInput返回一个字符串。如果将python中的字符串乘以N,则会得到该字符串N次。

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

所以你的程序看到STRING'1',而不是整数1.您需要先将答案转换为整数:

>>> s = '1' # wrong
>>> s * 4
'1111'
>>> s = int('1') # right
>>> s * 4
4
>>>

另外,要准备好处理某人以外的其他东西(例如拼写错误或有人试图成为一个混蛋并故意让你失败的程序)。

>>> s = 'foo'
>>> int(s)
Traceback (most recent call last):
  File "", line 1, in 
ValueError: invalid literal for int() with base 10: 'foo'
>>>

始终使用try:

包围数据转换
try:
   s = 'foo'
   i = int(s)
except ValueError, ex:
   MessageBox('Try again!')

答案 5 :(得分: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()  

答案 6 :(得分:0)

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

安德鲁