Как я могу получить первую букву из нескольких слов и * оставшихся букв? - PullRequest
0 голосов
/ 13 октября 2018

Попытка создать игру в догадки.

У меня есть CSV-файл с 2 столбцами.Первый содержит имена исполнителей, второй содержит названия песен

Я хочу отображать произвольное имя исполнителя, а затем первую букву каждого слова в названии песни, например

Led Zeppelin -S ******* t * H *****

До сих пор я был в состоянии получить его, чтобы выбрать случайного исполнителя из файла и отобразить как исполнителя, так и название песни

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 всегда говорит «неправильно, пожалуйста, попробуйте еще раз», даже если я вставил правильный ответ.

Я не просто смотрюдля кого-то, чтобы сделать это для меня;если бы вы могли объяснить, где я ошибся, я был бы признателен.

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

С такими проблемами, начните сначала с наименьшего бита и работайте изнутри.

Как взять одно слово и отобразить первую букву со звездочками для остальных?

>>> 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() чтобы превратить его в список отдельных слов.Задача для вас: как собрать результаты в новую строку заголовка?

0 голосов
/ 13 октября 2018

Чтобы ответить на заголовок вашего ОП:

Вы можете использовать str.split () и срез строки в сочетании с выражением генератора и 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***
...