Я пытаюсь сократить свой код и иметь больше функциональности, но он не работает правильно.
Вот мой код (в основном)
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
Вы хотите:
number = int(number)
В настоящее время "число" представляет собой строку (т.е. "1", а не 1), поэтому умножая ее на четыре, естественно, просто дает вам "1111". Использование int() даст вам целочисленное представление строки.
Ваше переменное число - это строка, а не int. Таким образом, это "умножение строки". Попробуйте ввести номер для int или float.
number = int (number)
number = float (number)
Проблема заключается в том, что когда пользователь вводит число (или что-то еще), этот вход сохраняется как строка. Поэтому, когда вы получаете пользовательский ввод, вы не получаете 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)
Приветствия
Я считаю, что ваш номер является строковым типом. Когда вы умножаете строку на число, она возвращает много строк, если вы делаете что-то вроде этого:
number4 = int(number) * 4
Он должен работать.
Собственно, dialogGetInput возвращает объект класса "Результат". У меня такая же сложность, потому что int() не принимает "Result" в качестве аргумента. Я не нахожу ссылки в SL4A на какие свойства или методы поддерживает класс Result.
Эндрю
Вот как ваш код должен быть для вашего ожидаемого результата:
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()
Я не знаю этого набора "дроидов", но я подозреваю, что он возвращает строку из 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:
s = 'foo'
i = int(s)
except ValueError, ex:
MessageBox('Try again!')
1,1
является действительным числом? Где ты видел это раньше?