我正在获取程序的输出但不是以所需的方式?

时间:2016-09-09 20:22:43

标签: python python-2.7 python-3.x ipython

编写一个Python函数,接受一个字符串作为输入。 该函数必须返回字符串中出现的数字0-9的总和,忽略所有其他字符。如果字符串中没有数字,则返回0。

我的代码:

user_string = raw_input("enter the string: ")
new_user_string = list(user_string)
addition_list = []
for s in new_user_string:
    if ( not s.isdigit()):
        combine_string = "".join(new_user_string)
        print ( combine_string)
    else:
        if ( s.isdigit()):
            addition_list.append(s)
            test = "".join(addition_list)
            output = sum(map(int,test))
            print ( output )

输出应为:

Enter a string: aa11b33
8

我的输出:

enter the string: aa11b33
aa11b33
aa11b33
1
2
aa11b33
5
8

3 个答案:

答案 0 :(得分:4)

这看起来很像家庭作业......

getsum = lambda word: sum(int(n) for n in word if n.isdigit())

getsum('aa11b33')
Out[3]: 8

getsum('aa')
Out[4]: 0

解释这是如何逐件工作的:

  1. 如果n.isdigit()仅由一个或多个数字组成,则函数True将返回n,否则返回false。 (Documentation
  2. 语法for n in word将遍历可迭代word中的每个项目。由于word是一个字符串,因此python将每个字符视为一个单独的项目。
  3. 操作sum(int(n) for n in word...)将每个字符转换为int并获取所有字符的总和,而后缀if n.isdigit()会过滤掉所有非数字字符。因此,最终结果将只取字符串word中所有单个数字字符的总和。
  4. 语法lambda x: some expression using x构造一个匿名函数,该函数将一些值x作为参数,并返回冒号后表达式的值。为了给这个函数一个名字,我们可以把它放在赋值语句的右边。然后我们可以像普通函数一样调用它。通常最好使用普通的def getsum(x)函数定义,但是lambda表达式有时候很有用,如果你有一个一次性的函数,你只需要用作函数的参数。通常在python中,如果你能找到一种避免它们的方法,那就更好了,因为它们不被认为是非常易读的。
  5. 这是一个完整的例子:

    def sumword(word):
        return sum( int(n) for n in word if n.isdigit() )
    
    word = raw_input("word please: ")
    print(sumword(word))
    

答案 1 :(得分:1)

应该是

user_string = raw_input("enter the string: ")
new_user_string = list(user_string)
addition_list = []
for s in new_user_string:
    if ( not s.isdigit()):
        combine_string = "".join(new_user_string)
    else:
        if ( s.isdigit()):
            addition_list.append(s)
            test = "".join(addition_list)

output = sum(map(int,addition_list))
print output

你得到的输出有两个原因。

  1. 在if语句中,您告诉它打印最初输入的字符串,当它遇到非数字时。当你查看输出时,这是非常有意义的 - 字符串在看到a时打印,字符串在看到第二个a时打印,字符串不打印,不打印(对于那些)然后字符串是最后一次用b打印。
  2. 您正在打印输出,因为for循环在列表中递增,这意味着每次打印总计。在for循环外移动输出变量和print语句可以解决问题。

答案 2 :(得分:0)

Python关心缩进:

user_string = raw_input("enter the string: ")
new_user_string = list(user_string)
addition_list = []
for s in new_user_string:
    if ( not s.isdigit()):
        combine_string = "".join(new_user_string)
        #print ( combine_string)
    else:
        if ( s.isdigit()):
            addition_list.append(s)
            test = "".join(addition_list)
            output = sum(map(int,test))
print ( output )   #<------ change here 

还删除了你的内部打印声明,因为它不是你的输出。