Возникли проблемы с умножением переменной на число - PullRequest
1 голос
/ 12 мая 2011

Я пытаюсь сократить свой код и получить больше функциональности, но он не работает правильно.

Вот мой код (в основном)

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 ]

5 голосов
/ 12 мая 2011

Вы хотите:

number = int(number)

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

2 голосов
/ 12 мая 2011

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

number = int (number)

number = float (number)
2 голосов
/ 12 мая 2011

Проблема в том, что когда пользователь вводит число (или что-либо еще), этот ввод сохраняется в виде строки.Поэтому, когда вы получаете ввод от пользователя, вы не получаете 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 голос
/ 12 мая 2011

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

number4 = int(number) * 4 

Это должно работать.

0 голосов
/ 23 мая 2011

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

Andrew

0 голосов
/ 12 мая 2011

Вот как должен выглядеть ваш код для ожидаемого вывода:

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 голосов
/ 12 мая 2011

Я не знаю этот набор 'droid', но я подозреваю, что он возвращает строку из dialogGetInput.Если вы умножаете строку в Python на N, вы получаете эту строку N раз.

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

Итак, ваша программа видит строку «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!')
...