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****' |
所以现在你知道你可以用
1 2 | def hide_word(word): return word[0] + '*' * len(word[1:]) |
。
现在,如果有多个单词组成的字符串,可以使用
要回答您的操作标题:
您可以使用生成器表达式和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*** |
号