Python中的PygLatin程序使用字符串切片

时间:2016-02-20 19:38:08

标签: python

我有一个像这样的Python代码,

var start = new Date(2013, 2, 13, 22, 0, 0);
var end = new Date(2013, 2, 13, 23, 0, 0);

while (start < end) {
    var newDate = start.setMinutes(start.getMinutes() + 5);
    start = new Date(newDate);

    db.getCollection("_User").find().forEach(function (myDoc) {
        var a = db.Data.find({user: myDoc.username, "_created_at": {$lt: start}}).sort({" _created_at": -1}).limit(1);
        if (a.length() > 0) {
            print(a[0]["battery"])
        }
    });

    print(start)
}

变量“new_word”的输出应为“ythonpay”,但现在new_word包含“pythonpay”。谁能让我知道我在这里做的错误是什么。

3 个答案:

答案 0 :(得分:0)

你说new_word[1:]但你没有做任何事情。将其更改为new_word = new_word[1:]Slicing使用您决定的任何项目创建列表的副本。在您的情况下,它会创建除第一个项目之外的所有项目的列表。但是,它不会更改原始列表,因此您需要为其分配new_word

答案 1 :(得分:0)

您没有将切片new_word[1:]的结果分配给任何内容。您可以在前一行上进行切片,例如:

new_word = word[1:]+first+pyg

你使用的是什么版本的python,Python3引入了一种新的解包语法,这使得这很容易:

first, *word = original.lower()
new_word = word+first+pyg

无需切片,因为*赋值已将字符串分开。

答案 2 :(得分:0)

问题在于索引和正在打印的内容。

在你的代码中new_word = word+first+pyg返回原始单词本身作为第一部分,你需要它包含除第一个字母之外的所有字符串。您可以通过使用word[1:]来实现,即在字符串的第一个(或第0个)索引之后的所有字符。

pyg = 'ay'

original = raw_input('Enter a word:')

if len(original) > 0 and original.isalpha():
    word = original.lower()
    first = word[0]
    # Here we take all the letters after the first letter.
    rest = word[1:]
    new_word = rest + first + pyg
    print new_word
else:
    print 'empty'

以上将输出&#34; ythonpay&#34;对于python。