Возникли проблемы с умножением переменной на число

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
  • 0
    Почему вы утверждаете, что 1,1 является действительным числом? Где ты видел это раньше?
  • 0
    S.Lott: 1,1 - это просто его вывод - droid.dialogCreateAlert (число, число + '* 4 =' + число4)
Показать ещё 1 комментарий
Теги:
variables
multiplication
sl4a

7 ответов

5

Вы хотите:

number = int(number)

В настоящее время "число" представляет собой строку (т.е. "1", а не 1), поэтому умножая ее на четыре, естественно, просто дает вам "1111". Использование int() даст вам целочисленное представление строки.

2

Ваше переменное число - это строка, а не int. Таким образом, это "умножение строки". Попробуйте ввести номер для int или float.

number = int (number)

number = float (number)
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)

Приветствия

1

Я считаю, что ваш номер является строковым типом. Когда вы умножаете строку на число, она возвращает много строк, если вы делаете что-то вроде этого:

number4 = int(number) * 4 

Он должен работать.

0

Собственно, dialogGetInput возвращает объект класса "Результат". У меня такая же сложность, потому что int() не принимает "Result" в качестве аргумента. Я не нахожу ссылки в SL4A на какие свойства или методы поддерживает класс Result.

Эндрю

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()  
0

Я не знаю этого набора "дроидов", но я подозреваю, что он возвращает строку из 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!')

Ещё вопросы

Сообщество Overcoder
Наверх
Меню