【问题标题】:Having trouble with multiplying a variable with a number将变量与数字相乘时遇到问题
【发布时间】:2011-05-12 17:30:06
【问题描述】:

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

这是我的代码(基本上)

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

【问题讨论】:

  • 你为什么声称1,1 是一个有效的号码?你以前在哪里见过这个?
  • S.Lott: 1,1 只是他的输出 -- droid.dialogCreateAlert(number,number + ' * 4 =' + number4)
  • @Daniel Brain:谢谢。这澄清了事情。可以改进这个问题以使其更清楚。

标签: python variables multiplication sl4a


【解决方案1】:

你想要:

number = int(number)

目前,“数字”是一个字符串(即“1”而不是 1),因此将其乘以 4 自然会得到“1111”。使用 int() 将为您提供字符串的整数表示。

【讨论】:

    【解决方案2】:

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

    number = int (number)
    
    number = float (number)
    

    【讨论】:

      【解决方案3】:

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

      number4 = int(number) * 4 
      

      它应该可以工作。

      【讨论】:

        【解决方案4】:

        问题是当用户输入一个数字(或任何东西)时,该输入被存储为一个字符串。因此,当你得到用户的输入时,你得到的不是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)
        

        干杯

        【讨论】:

          【解决方案5】:

          我不知道这个“机器人”套件,但我怀疑它正在从 dialogGetInput 返回一个字符串。如果你将 python 中的一个字符串乘以 N,你会得到该字符串 N 次。

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

          所以您的程序看到的是字符串“1”,而不是整数 1。您需要先将答案转换为整数:

          >>> s = '1' # 错误 >>> s * 4 '1111' >>> s = int('1') # 对 >>> s * 4 4 >>>

          此外,请准备好应对有人输入数字以外的内容(例如,拼写错误或试图成为混蛋并故意使您的程序崩溃的人)

          >>> s = 'foo' >>> 整数 回溯(最近一次通话最后): 文件“”,第 1 行,在 ValueError: int() 以 10 为底的无效文字:'foo' >>>

          始终尝试围绕数据转换:

          try:
             s = 'foo'
             i = int(s)
          except ValueError, ex:
             MessageBox('Try again!')
          

          【讨论】:

            【解决方案6】:

            以下是您的代码应如何实现您的预​​期输出:

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

            【讨论】:

              【解决方案7】:

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

              安德鲁

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2021-12-02
                • 1970-01-01
                • 2019-12-17
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2020-07-23
                • 1970-01-01
                相关资源
                最近更新 更多