【问题标题】:Adding slicing numbers using a loop使用循环添加切片数字
【发布时间】:2012-10-16 02:31:00
【问题描述】:

我想知道如何使用循环在 Python 中添加这些数字?谢谢

num=input("Enter your number: ")

ansAdd= int(str(num)[7])+int(str(num)[5])+int(str(num)[3])+int(str(num)[1])

print....

【问题讨论】:

    标签: python loops slice


    【解决方案1】:

    你想用循环来做,给你:

    ansAdd = 0
    for x in [7,5,3,1]:
      ansAdd += int(str(num)[x])
    

    不过,使用列表推导更符合 Python 风格

    【讨论】:

    • for x in [7,5,3,1]: print 1.7 * int(str(num)[x])。我建议你找到一个好的 Python 教程并完成它。
    【解决方案2】:
    >>> num=input()
    12345678
    >>> sum(map(int,num[:8][1::2]))
    20
    

    这里num[:8][1::2] 只返回sum() 所需的数字,num[:8] 确保只有索引达到7 的元素用于计算,[1::2] 返回1,3,5,7

    >>> num[:8][1::2]
    >>> '2468'
    

    【讨论】:

      【解决方案3】:

      您似乎想对用户输入的奇数位求和。用循环来做到这一点:

      num_str = raw_input("Enter your number: ")
      ansAdd = 0
      for digit in num_str[1::2]:
          ansAdd += int(digit)
      

      [1::2] 的语法是 python 的 string slicing -- 三个数字由 : 分隔,表示开始索引、停止索引和步骤。省略的值告诉 python 尽可能多地抓取。)

      有一种更好的方法可以不使用传统循环:

      num_str = raw_input("Enter your number: ")
      ansAdd = sum(int(digit) for digit in num_str[1::2])
      

      在 python 2 中,input 将输入的文本作为 python 代码执行并返回结果,这就是为什么您必须使用 str 将整数转回字符串的原因。

      在 python 2 中使用input 被认为存在安全风险,因为您的脚本的用户可以输入任何有效的 python 代码,并且它将被执行,没有任何问题。在 python 3 中,raw_input 已重命名为 input,并删除了旧的 input(改用 eval(input()))。

      【讨论】:

        【解决方案4】:
        >>> s = '01234567'
        >>> sum(map(int, s[1::2]))
        16
        

        这是它的工作原理:

        s[1::2] 从索引1 开始到字符串末尾逐个2 截取一段字符串。有关切片的更多信息,请参阅 Python 教程的 Strings 部分。

        map 接受一个函数和一个 iterable(字符串是可迭代的)并将函数应用于每个项目,返回结果列表。这里我们使用map 将每个字符串数字转换为int

        sum 接受一个可迭代对象并将其相加。

        如果您想在没有 summap 内置函数、没有切片和显式 for 循环的情况下执行此操作:

        >>> s = '01234567'
        >>> total = 0
        >>> for i in range(1, len(s), 2):
        ...     total += int(s[i])
        ...
        >>> total
        16    
        

        【讨论】:

          猜你喜欢
          • 2018-06-21
          • 1970-01-01
          • 2017-07-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多