Python3求解字符串滤值与百元买百鸡算法

[本文出自天外归云的博客园]

第一题:给你一个字符串,打印出来前后没有空格,单词之间只有一个空格的字符串。

第二题:公鸡3元/只,母鸡4元/只,小鸡1元3只,给你money元一共多少种买法。

普通版解法如下:

def print_str(str, ret=[]):
    for i in range(len(str)):
        if i == 0:
            ret.append(str[i])
        else:
            if str[i - 1] == " " and str[i] == " ":
                pass
            else:
                ret.append(str[i])
    print("".join(ret).strip())


def calc(money, count=0):
    for i in range(1, money // 3 + 1):
        for j in range(1, (money - i * 3) // 4 + 1):
            count += 1
            # print(f"公鸡{i}只 母鸡{j}只 小鸡{(money-i*3-j*4)*3}只")
    print(f"共有{count}种买法")
    return count


if __name__ == '__main__':
    print_str("   I     love    Netease   ")
    calc(100)

Pythonic版解法如下,一个算法一行:

print_str = lambda str: print("".join([str[i] if i == 0 else str[i] for i in range(len(str)) if not (str[i - 1] == " " and str[i] == " ")]).strip())
calc = lambda money, count=0: print(f"共有{len([(i,j,(money-i*3-j*4)*3) for i in range(1, money // 3 + 1) for j in range(1, (money - i * 3) // 4 + 1)])}种买法")

if __name__ == '__main__':
    print_str("   I     love    Netease   ")
    calc(100)

对于第一题,大师兄后来给我一个更简单的解法:

print(" ".join("   I  love Netease   ".strip().split()))

果然思路的优先级是更高的,一个好的思路有时候比好的实现优先级应该更高才对。

再来一个不用内置函数解决的方法:

str = "     I     love   Netease   "
new_str = ""
for i in range(len(str)):
    if len(new_str)==0:
        if str[i]==" ":
            pass
        else:
            new_str += str[i]
    else:
        if new_str[::-1][0] != " ":
            new_str += str[i]
        else:
            if str[i] != " ":
                new_str += str[i]
if new_str[::-1][0] == " ":
    new_str = new_str[:-1]
print(new_str)

 

转载于:https://www.cnblogs.com/LanTianYou/p/9267535.html

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值