2017-03-19 63 views
1

我想在elif语句中将数字添加到if语句中。我如何将它们加在一起得到结果输出?如何将列表和整数一起添加/组合到列表(Python)中?

def sorting(tup1, tup2): 
    output = [] 
    sumVal = 0 
    wholeTup = tup1 + tup2 
    for i in range(0, len(wholeTup)): 
     if i % 2 == 0 or i == 0: 
     word = wholeTup[i].title() 
     output.append(word) 
     output.sort()  
     elif i % 2 != 0: 
     sumVal = sumVal + wholeTup[i] 
    return output 

print(sorting(("Bob",21,"kelly",21), ("morgan",10,"Anna",2))) 

输出应该是这个样子:

["Anna", "Bob", "Kelly", "Morgan", 54] 

他们按字母顺序排列的名字和所有他们的年龄加在一起的。

我知道if语句会给我输出的这一部分:

["Anna", "Bob", "Kelly", "Morgan"] 

而且elif的语句将把这部分:

54 

我如何结合这两个在一起吗?是否有可能将if语句和elif语句的输出结合起来?

+1

所以,你想排序在* even *索引的元组中的名称,并总结年龄? –

+0

如果你准确解释了输出的标准是什么,它实际上会有帮助吗?不得不通过运行代码和排除故障来猜测和解决问题并不是很有趣。 – idjaw

+0

你显示的代码有什么问题? –

回答

1

你可以简单地将行添加:刚刚return语句之前

output.append(sumVal) 

在程序中添加元组的奇怪的部分的总和,如:

def sorting(tup1, tup2): 
    output = [] 
    sumVal = 0 
    wholeTup = tup1 + tup2 
    for i in range(0, len(wholeTup)): 
     result = " " 
     if i % 2 == 0 or i == 0: 
      word = wholeTup[i].title() 
      output.append(word) 
      output.sort()  
     elif i % 2 != 0: 
      sumVal = sumVal + wholeTup[i] 
    output.append(sumVal) # append the total age to the final result 
    return output

不过你代码是不合格,un pythonic和低效*。一些想法:

  • 您一直对列表进行排序,而将其排序为后处理步骤效率更高;
  • 您可以简化if;和
  • 不需要检查elif,简单的else就足够了,因为elif中的条件与if语句中的条件完全相反。

你可以改变整个程序分成两个语句与发电机

def sorting(tup1, tup2): 
    wholeTup = tup1 + tup2 
    return sorted(wholeTup[i] for i in range(0,len(wholeTup),2)) + \ 
     [sum(wholeTup[i] for i in range(1,len(wholeTup),2))]

这里sorted(..)会赶上发电机wholeTup[i] for i in range(0,len(wholeTup),2)的所有元素,并构建与分类元素的list。这里发生器将发出所有放置在均匀位置的元素。

另一方面,sum(..)将总结发生器wholeTup[i] for i in range(1,len(wholeTup),2)产生的元素,并生成年龄总和(位于奇数位置的元素)。我们构造一个带有该结果的单例表[..],并且附加到sorted(..)调用的结果中。这是我们return的最终结果。

+0

如果某个人的姓名中有一个“无”而不是整数,该怎么办? – aj2929

+0

@ aj2929:这两个程序都会报错。在这种情况下应该发生什么? –

+0

会在这种情况下尝试/除了工作吗?就像尝试这个..除了TypeError,做这个,而不是@WillemVanOnsem – aj2929