尝试创建一个猜谜游戏。
我有一个包含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语句也总是说“不正确,请重试”。
我不仅在寻找某人为我做这件事;如果您能解释我哪里出了问题,我将不胜感激。
答案 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()
将其变成单个单词的列表。您面临的挑战:如何将结果重新组合到新的标题字符串中?