关于python:如何从多个单词和其余字母中获取第一个字母?

How can I get the first letter from multiple words and * the remaining letters?

尝试创建一个猜测游戏。

我有一个包含两列的csv文件。第一个包含艺术家姓名,第二个包含歌曲标题

我希望能够显示一个随机的艺术家名称,然后显示歌曲标题中每个词的第一个字母,例如。

齐柏林-S******T*H*****

到目前为止,我已经能够让它从文件中选择一个随机的艺术家,并显示艺术家和歌曲标题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import random
import time

filesize = 11251
offset = random.randrange(filesize)
words = []
print("Welcome to the music guessing game")
def randomsong():
    file = open("musicFile.csv","r")
    file.seek(offset)
    file.readline()
    line =file.readline()
    data = line.split(",")
    print (data[0], data[1])
    song = data[1]
    song = str(song)
    print(song)
    guesses = 2
    Score = 0
    song = song.lower()

while guesses != 0:
    yourguess = input ("Guess the name of the song")
    if yourguess == song:
        print ("Well Done!")
    else:
        print ("Incorrect, try again")
        guesses = guesses -1
print("Game Over!!!")

randomsong()

用户应该可以尝试猜测歌曲。

我知道上面的代码再次打印了艺术家、歌曲标题和歌曲标题,我只是在测试它,以确保它选择了我想要的。

另一个问题是:if语句总是说"不正确,请再试一次",即使我输入了正确的答案。

我不仅仅是在找人帮我做这件事;如果你能解释我哪里做错了,我会很感激的。


对于这样的问题,首先从最小的位开始,然后从内到外工作。

我该如何用一个词来显示第一个带星号的字母?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
>>> word = 'Hello'
# Use indexing to get the first letter at position 0
>>> word[0]
'H'
# Use indexing to get the remaining letters from position 1 onwards
>>> word[1:]
'ello'
# Use len to get the length of the remaining letters
>>> len(word[1:])
4
# Use the result to multiply a string containing a single asterisk
>>> '*' * len(word[1:])
'****'
# put it together
>>> word[0] + '*' * len(word[1:])
'H****'

所以现在你知道你可以用word[0] + '*' * len(word[1:])得到一个单词的结果,把它变成一个函数:

1
2
def hide_word(word):
    return word[0] + '*' * len(word[1:])

现在,如果有多个单词组成的字符串,可以使用.split()将其转换为单个单词的列表。挑战:你如何把结果放回一个新的标题字符串?


要回答您的操作标题:

您可以使用生成器表达式和str.join()在concjunction中使用str.split()和字符串切片:

1
2
3
4
5
6
7
8
9
def starAllButFirstCharacter(words):
    # split at whitespaces into seperate words
    w = words.split()

    # take the first character, fill up with * till length matches for
    # each word we just split. glue together with spaces and return
    return ' '.join( (word[0]+"*"*(len(word)-1) for word in w) )

print(starAllButFirstCharacter("Some song with a name"))

输出:

1
S*** s*** w*** a n***