团体程序设计天梯赛题目集 L1-064 估值一亿的AI核心代码 Python正则表达式极简解法

题目描述

在这里插入图片描述
以上图片来自新浪微博。
本题要求你实现一个稍微更值钱一点的AI英文问答程序,规则是:

  • 无论用户说什么,首先把对方说的话在一行中原样打印出来;
  • 消除原文中多余空格:把相邻单词间的多个空格换成1个空格,把行首尾的空格全部删掉,把标点符号前面的空格删掉;
  • 把原文中所有大写英文字母变成小写,除了I
  • 把原文中所有独立的can youcould you对应地换成I canI could—— 这里“独立”是指被空格或标点符号分隔开的单词;
  • 把原文中所有独立的Ime换成you
  • 把原文中所有的问号?换成惊叹号!
  • 在一行中输出替换后的句子作为AI的回答。

输入格式

输入首先在第一行给出不超过10的正整数N,随后N行,每行给出一句不超过1000个字符的、以回车结尾的用户的对话,对话为非空字符串,仅包括字母、数字、空格、可见的半角标点符号。

输出格式

按题面要求输出,每个AI的回答前要加上AI:和一个空格。

输入样例

6
Hello ?
 Good to chat   with you
can   you speak Chinese?
Really?
Could you show me 5
What Is this prime? I,don 't know

输出样例

Hello ?
AI: hello!
 Good to chat   with you
AI: good to chat with you
can   you speak Chinese?
AI: I can speak chinese!
Really?
AI: really!
Could you show me 5
AI: I could show you 5
What Is this prime? I,don 't know
AI: what Is this prime! you,don't know

Python极简解法

本题是对若干个字符串进行一系列操作。由于Python对于字符串的处理极其灵活,搭配正则表达式库re能使代码更加简洁,因此选用了Python语言。
踩过的一些坑:

  1. \b的正则表达式匹配:\b是正则表达式规定的一个元字符,代表着单词的分界处。虽然通常英文的单词是由空格,标点符号或者换行来分隔的,但是\b并不匹配这些单词分隔字符中的任何一个,它只匹配一个位置。
  2. 第15和16行的字符串替换,在I前加了一个下划线,如果将下划线替换为其他内容(例如@, #等特殊字符)就会有一些测试点过不去。这应该也和正则表达式的匹配方式有关。

下面附上AC代码。
语言:Python 3

import re


n = int(input())
for i in range(n):
    s = input()
    print(s)
    print('AI: ', end='')
    s = re.sub(r'(\s+)', ' ', s)
    s = list(s.strip().replace(' !', '!').replace(' ,', ',').replace(' .', '.').replace(' ?', '?').replace(' \'', '\''))
    for i in range(len(s)):
        if s[i].isupper() and s[i] != 'I':
            s[i] = s[i].lower()
    s = ''.join(s)
    s = re.sub(r'(\bcan you\b)', '_I can', s)
    s = re.sub(r'(\bcould you\b)', '_I could', s)
    s = re.sub(r'(\bI\b)', 'you', s)
    s = re.sub(r'(\bme\b)', 'you', s)
    s = re.sub(r'(\?)', '!', s)
    s = re.sub(r'(\b_I\b)', 'I', s)
    print(s)

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,这段代码是用来统计输入数字中奇数和偶数的个数的。代码中使用循环遍历输入的数字,通过对2取模运算来判断数字是奇数还是偶数,然后分别对奇数和偶数的计数变量进行加一操作。循环结束后,输出奇数计数变量和偶数计数变量的值,中间用空格隔开。\[1\]\[2\]\[3\] 这段代码可以用来解决团体程序设计天梯赛-练习 L1-022 奇偶分家的问题。 #### 引用[.reference_title] - *1* [PTA团队天梯赛L1-022 奇偶分家](https://blog.csdn.net/m0_46492118/article/details/114481127)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [PAT团队程序设计天梯赛-习题L1-022 奇偶分家](https://blog.csdn.net/qq_38234015/article/details/81291913)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [团体程序设计天梯赛-练习 L1-022 奇偶分家 (10分)(C语言)](https://blog.csdn.net/Baridhu/article/details/109899606)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值