鱼C论坛

 找回密码
 立即注册
查看: 8219|回复: 65

[技术交流] Python:每日一题 170

[复制链接]
发表于 2018-3-24 10:43:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 冬雪雪冬 于 2018-3-26 19:43 编辑

我们的玩法做了一下改变:

1. 楼主不再提供答案。
2. 请大家先独立思考,再参考其他鱼油的解答,这样才有助于自己编程水平的提高。开始阶段是看不到其他人的回帖的,等答题完成,开始评分时再取消限制。
3. 鼓励大家积极答题,奖励的期限为出题后24小时内。
4. 根据答案的质量给予1~3鱼币的奖励。

题目:
前面几道题对初学者有点难度,这次来一道简单的,希望更多的鱼油参与。
建立一个函数mysum,参数为不确定个数的正整数、负整数或零,返回一个字符串为各个数字加法的算式和结果,例如:
print(mysum(-7, 12,83, -99, 22, 0, 1))
输出:
-7+12+83-99+22+0+1=12
注意:-99前不要加号,如果实在不会写,也可以先写成+-99

提示,函数的参数数量不确定,可以使用收集参数。

由于本题比较简单,只奖励前33名答对的鱼油。

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-24 10:59:29 From FishC Mobile | 显示全部楼层
  1. #!/usr/bin/python
  2. def mysum(*args):
  3.         total = sum(args)
  4.         s = '+'.join([str(i) for i in args])+'='+str(total)
  5.         s = s.replace('+-','-')
  6.         return s

  7. print(mysum(-7, 12,83, -99, 22, 0, 1))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 3 反对 0

使用道具 举报

发表于 2018-3-24 11:05:45 | 显示全部楼层
本帖最后由 新手·ing 于 2018-3-24 11:18 编辑
  1. def solution(*args):
  2.     return '+'.join([str(x) for x in args]).replace('+-', '-')+'='+str(sum(args))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-24 11:06:53 | 显示全部楼层
  1. def mysum(*args):
  2.     x=''
  3.     for arg in args:
  4.         x+='%+d'%arg
  5.     return x+'='+str(eval(x))
  6. print(mysum(-7, 12,83, -99, 22, 0, 1))
  7.    
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-24 11:10:05 | 显示全部楼层
  1. def mysum(*params):
  2.         list1 = list(params)
  3.         result = 0

  4.         for i in range(len(list1)-1):
  5.                 print(list1[i],end='')
  6.                 if list1[i+1] >= 0:
  7.                         print('+',end='')
  8.                 result += list1[i]

  9.         temp = list1[len(list1)-1]
  10.         result = result + temp
  11.         print(temp,end='')
  12.        
  13.         print('=',end='')
  14.         return result
  15. if __name__ == '__main__':
  16.         print(mysum(-7, 12,83, -99, 22, 0, 1))


复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-24 11:45:21 | 显示全部楼层
本帖最后由 晓屁屁 于 2018-3-24 12:41 编辑
  1. def mysum(*num):
  2.     list1=''

  3.     count = 0
  4.     for i in range(len(num)):
  5.         count += num[i]
  6.         if i ==0 and num[i]>=0:
  7.             list1 += str(num[i])
  8.         if num[i] <0:
  9.             list1+=str(num[i])
  10.         elif num[i]>=0:
  11.             list1+= '+'
  12.             list1+=str(num[i])
  13.     list1+='='
  14.     list1+=str(count)
  15.     return list1

  16. print(mysum(-1,0,-1,-2,-2,-3,-4,5,1))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-24 12:22:02 | 显示全部楼层
def mysum(*args):
    list1=[]
    list2=[]
    sum=0
    for arg in args:
        list1.append(arg)
        list2.append('%+-d')
        sum = sum+arg
    a=''.join(list2)
    print(a%tuple([i for i in args]),end=' ')
    print('= %d'%sum)

mysum(-7, 12,83, -99, 22, 0, 1)

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-24 13:03:19 | 显示全部楼层
本帖最后由 125zl 于 2018-3-24 13:04 编辑

def mysum(*str1):
    str2 = ''
    num = 0
    for i in range(len(str1)):
        if str1 > 0 and i == 0:
            str2 += str(str1)
            num += str1
        elif int(str1) >= 0:
            str2 += '+' + str(str1)
            num += str1
        elif str1 < 0:
            str2 += str(str1)
            num += str1
        if i == len(str1) - 1:
            str2 += '=' + str(num)
    return(str2)
print(mysum(-7, 12,83, -99, 22, 0, 1))

点评

str1 > 0 有问题  发表于 2018-3-26 19:48
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-24 13:05:01 | 显示全部楼层
  1. def mysum(*params):
  2.     sum = 0
  3.     temp_str = ''
  4.     length = len(params)
  5.     for each in params:
  6.         sum += each
  7.     for i in range(length-1):
  8.         if params[i+1] < 0:
  9.             temp_str += str(params[i])
  10.         else:
  11.             temp_str += str(params[i]) + '+'
  12.     temp_str += str(params[-1]) + '=' + str(sum)
  13.     return temp_str
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-24 13:31:27 | 显示全部楼层
  1. from functools import reduce
  2. def mysum(*args):
  3.     return reduce(lambda x,y:str(x) +'+' + str(y),list(args)).replace('+-','-') + '=' + str(reduce(lambda x,y:x+y,list(args)))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-24 13:57:49 | 显示全部楼层
  1. '''
  2. 建立一个函数mysum,参数为不确定个数的正整数、负整数或零,
  3. 返回一个字符串为各个数字加法的算式和结果,例如:
  4. print(mysum(-7, 12,83, -99, 22, 0, 1))
  5. 输出:
  6. -7+12+83-99+22+0+1=12
  7. '''
  8. def mysum(*n):
  9.     showstr=''
  10.     s=0
  11.     for i in n:
  12.         showstr=showstr+str(i)+'+'
  13.         s=s+i
  14.     showstr=showstr.replace('+-','-')
  15.     return showstr[:-1]+'='+str(s)
  16. print(mysum(-7, 12,83, -99, 22, 0, 1))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-24 14:57:52 | 显示全部楼层
本帖最后由 wyf345491656 于 2018-3-25 13:48 编辑
  1. def mysum(*nums):
  2.     num_sum = 0
  3.     str_sum = str(nums[0])
  4.     for i in range(0, len(nums)):
  5.         if not isinstance(nums[i], int):
  6.             return ('参数输入错误')
  7.         num_sum += nums[i]
  8.     for i in range(1, len(nums)):
  9.         if nums[i] < 0:
  10.             str_sum += str(nums[i])
  11.         else:
  12.             str_sum += '+' + str(nums[i])
  13.     return ('%s = %d' % (str_sum, num_sum))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-24 15:12:30 | 显示全部楼层
本帖最后由 8306最硬 于 2018-3-24 15:31 编辑
  1. def mysum( *n ):
  2.     num= ''.join( '{}{}'.format('+' * (i >= 0), i) for i in n )
  3.     return  '{}={}'.format(num, sum(n))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-24 15:28:26 | 显示全部楼层
def mysum(t):
    num_sum=0
    for i in range(len(t)):
        num_sum+=t[i]
    print(num_sum)
    return num_sum

点评

要用搜集参数否则无法接收n个参数。还要打印算式。  发表于 2018-3-26 19:51
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-24 16:49:45 | 显示全部楼层
本帖最后由 the0503 于 2018-3-24 17:57 编辑
  1. def mysum(*a):
  2.     lst=[]
  3.     s = 0
  4.     for n in a:
  5.         s += n
  6.         if n>= 0:
  7.             lst.append(str(n))
  8.             lst.append('+')
  9.         else:
  10.             lst.pop()
  11.             lst.append(str(n))
  12.             lst.append('+')

  13.     lst.pop()
  14.     lst.append('=')
  15.     print("".join(lst),end='')
  16.     return s
  17. print(mysum(1,5,-3,0,11,25))
复制代码


输出:
1+5-3+0+11+25=39

  1. def str2list(b): #字符串转为列表
  2.     c = len(b)
  3.     lst = []
  4.     i = 0
  5.     for l in range(c):
  6.         d=''
  7.         if b[l] == ',':
  8.             for m in range(i,l):
  9.                 d += b[m]
  10.             lst.append(d)
  11.             i = l+1
  12.         elif l == (c-1):
  13.             for m in range(i,l+1):
  14.                 d += b[m]
  15.             lst.append(d)
  16.     return lst

  17. a=input('输入要进行计算的数列,以逗号隔开:')
  18. lst1 = str2list(a)
  19. lst2 = []
  20. s = 0
  21. if lst1[0][0] == '-': #第一个若为负数,避免报错
  22.     lst2 = ['']

  23. for i in lst1:  #生成计算表达式,并求和
  24.     if i[0] == '-':
  25.         lst2.pop()
  26.         lst2.append(i)
  27.         lst2.append('+')
  28.     else:
  29.         lst2.append(i)
  30.         lst2.append('+')
  31.     s += int(i)

  32. lst2.pop()
  33. lst2.append('=')
  34. print(''.join(lst2),end='')
  35. print(s)
复制代码


第二种方式,用户自己输入数字列表,生成计算表达式并给出和

点评

方法1如果第一个数是负数报错  发表于 2018-3-26 19:55

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-24 17:17:44 | 显示全部楼层
def mysum(*list1):
    pol = ''     #声明返回的表达式,初始为空
    sum1 = 0     #定义总和,初始为0
    #print(list1)
    for i in range(len(list1)):     #依次判断正负来确定表达式形式
        if list1[i] >= 0 and i != 0:
            pol += '+'+str(list1[i])
            sum1 += list1[i]
        elif list1[i] <0 and i != 0:
            pol += str(list1[i])
            sum1 += list1[i]
        else:      #对第一个参数特殊处理
            pol +=str(list1[i])
            sum1 += list1[i]
    pol += '='+str(sum1)
    return pol      #在最终表达式里加上总和
print(mysum(-1,0,2,5,-9,10))

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-24 17:47:50 | 显示全部楼层
  1. def mysum(*num):
  2.     str1 = ''
  3.     count = 0
  4.     sum = 0
  5.     for i in num:
  6.         count += 1
  7.         if i < 0 and count > 1:
  8.             str1 = str1[:-1] + str(i) + '+'
  9.         else:
  10.             str1 += str(i) + '+'
  11.         sum += i
  12.     return str1[:-1] + '=' + str(sum)


  13. print(mysum(-7, 12, 83, -99, -22, 0, -1))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-24 19:18:58 | 显示全部楼层
本帖最后由 冰封雪舞 于 2018-3-24 19:24 编辑

def mysum(*canshu):
    b=len(canshu)
    d=''
    e=0   
    for c in range(0,b):
        k=str(canshu[c])
        e+=int(k)
        if c==0 and k[0]!='-':
            d+=k           
        elif k[0]=='-':            
            d+=k            
        else:         
            
            d+= '+'
            d+=k            
    bbb=d+'='+str(e)
    return bbb
print(mysum(1,2,3,4,5,-6,-28,-29))

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-24 20:34:45 | 显示全部楼层
def mysum(*num):
    for i in num[:len(num)-1]:
        print(str(i),str('+'),end='')

    print(str(num[len(num)-1]),str('='),end='')
    print(sum(num))


mysum(-7, 12, 83, -99, 22, 0, 1)

-7 +12 +83 +-99 +22 +0 +1 =12

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-24 21:42:30 | 显示全部楼层
  1. def mysum(*data):
  2.     s = 0
  3.     st = ''
  4.     for a in data:
  5.         s += a
  6.         if a < 0:
  7.             st += str(a)
  8.         else:
  9.             st = st + '+' + str(a)
  10.     return '%s = %d' % (st, s)
  11. print(mysum(-7, 12,83, -99, 22, 0, 1))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 20:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表