使用循环添加切片编号

时间:2012-10-25 20:14:24

标签: python loops slice

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

num=input("Enter your number: ")

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

print....

4 个答案:

答案 0 :(得分:1)

你想用循环来做,你走了:

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

然而,使用列表理解更加pythonic

答案 1 :(得分:1)

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

答案 2 :(得分:0)

>>> num=input()
12345678
>>> sum(map(int,num[:8][1::2]))
20

此处num[:8][1::2]仅返回sum()所需的数字,num[:8]确保在计算中仅使用指向7的elemnets,并[1::2]返回1,3,5,7

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

答案 3 :(得分:0)

似乎您想要从用户输入中对奇数位数求和。用循环来做:

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