手机_NOI导刊2010普及(10)

很坑的换行符,烦了我一个多周

题目传送门

题目描述

一般的手机的键盘是这样的:

手机键盘
手机键盘

要按出英文字母就必须要按数字键多下。例如要按出x就得按9两下,第一下会出w,而第二下会把w变成x。0键按一下会出一个空格。

你的任务是读取若干句只包含英文小写字母和空格的句子,求出要在手机上打出这个句子至少需要按多少下键盘。

输入输出格式

输入格式:

一行一个句子,只包含英文小写字母和空格,且不超过200个字符。

输出格式:

一行一个整数,表示按键盘的总次数。

输入输出样例

输入样例#1:

test

输出样例#1:

8

输入样例#2:

i have a dream

输出样例#2:

23

这道题对于c++来说也许不难,但是对于Python来说却有点坑。因为:

这题数据的行尾是windows,你处理一下。     ———— lin_toto

        洛谷的评测机为Linux环境,(\r\n)

        而通常情况下我们解释器的环境为Windows,(\n)

所以要处理数据行尾(如果您使用Linux请自行尝试)

果断选择字典做(也许有点长)。

# -*- coding: utf-8 -*-
Keyboard = {
    'a':'1',
    'b':'2',
    'c':'3',
    'd':'1',
    'e':'2',
    'f':'3',
    'g':'1',
    'h':'2',
    'i':'3',
    'j':'1',
    'k':'2',
    'l':'3',
    'm':'1',
    'n':'2',
    'o':'3',
    'p':'1',
    'q':'2',
    'r':'3',
    's':'4',
    't':'1',
    'u':'2',
    'v':'3',
    'w':'1',
    'x':'2',
    'y':'3',
    'z':'4',
    ' ':'1',
    }
sen = input()
#不能用sen = sen.strip()
sen = sen[:-1]
s = 0
for every_char in sen:
    n = int(Keyboard[every_char])
    s += n
print(s)

我们使用 sen = sen[:-1] 来处理掉数据末尾的空行,不然。。会很感人的

这个图中的内容爽了我一个多周呢

为什么不能使用strip()?

因为strip()会去除行头和行尾指定的字符(默认为空格或换行符)或字符序列

而第一个字符有可能是空格

好了,解释完毕。

代码写得很精干也很正确。    ————老猿Python
发布了58 篇原创文章 · 获赞 40 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/baidu_41248654/article/details/96143280