如何从多个单词中得到第一个字母,然后再从*个剩余字母中得到*

时间:2018-10-13 10:34:24

标签: python loops split

尝试创建一个猜谜游戏。

我有一个包含2列的CSV文件。第一个包含歌手姓名,第二个包含歌曲标题

我希望能够显示一个随机的歌手姓名,然后显示歌曲标题中每个单词的首字母,例如

齐柏林飞艇-S ******* t * H *****

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

import tkinter as tk
from tkinter import ttk

root = tk.Tk()

def on_click(event):
    ent2.config(foreground='black')
    if ent2.get() == "Click & type...":
        event.widget.delete(0, tk.END)
    else:
        ent2.config(foreground='black')

myvar = tk.StringVar()
myvar.set("Click & type...")

ent1 = ttk.Entry(root)
ent1.grid()

ent2 = ttk.Entry(root, textvariable=myvar)
ent2.config(foreground='gray')
ent2.bind("<Button-1>", on_click)
ent2.bind("<FocusIn>", on_click)
ent2.grid()

root.mainloop()

用户应该可以尝试并猜出这首歌。

我知道上面的代码正在再次打印艺术家和歌曲名称以及歌曲名称,我正在对其进行测试以确保它选择了我想要的内容。

单独的问题:即使我输入正确的答案,IF语句也总是说“不正确,请重试”。

我不仅在寻找某人为我做这件事;如果您能解释我哪里出了问题,我将不胜感激。

2 个答案:

答案 0 :(得分:1)

要回答您的OP标题:

您可以将str.split()string-slicing与生成器表达式和str.join()结合使用:

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"))

输出:

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

答案 1 :(得分:1)

遇到这样的问题,首先从最小的位开始,然后由内而外地进行工作。

我该如何选择一个单词,其余显示第一个带有星号的字母?

>>> 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:])获得单个单词的结果,并将其转换为函数:

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

现在,如果您有一个包含多个单词的字符串,则可以使用.split()将其变成单个单词的列表。您面临的挑战:如何将结果重新组合到新的标题字符串中?