我正在尝试缩短我的代码并拥有更多功能,但它无法正常工作。
继承我的代码(基本上)
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
答案 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类支持的属性或方法的任何引用。
安德鲁