как сделать код задать другой вопрос и сохранить последний - PullRequest
0 голосов
/ 10 февраля 2019

Я делаю проект в школе, который просит меня провести музыкальную викторину на python, которая читает файл, отображает первые буквы каждого слова песни и исполнителя (например, Дейва Ф.Ф.).В моем файле у меня есть список из 10 названий песен, где python выбирает случайную строку и выполняет отображение.Он должен быть из файла (мой блокнот). У пользователя должно быть 2 шанса угадать название песни, а если нет, то игра заканчивается.Проблема, с которой я столкнулся, заключается в том, что я не могу заставить свой код задать другой вопрос и сохранить последний заданный вопрос, чтобы он не задавал его снова (например, если первый вопрос - Дэйв и Ф.Ф., я хочу, чтобы он больше не приходил),Я также был бы признателен, если бы мне показали, как заставить Python отображать таблицу лидеров.Могут ли ответы быть полным кодом с улучшениями, так как я не очень разбираюсь в отступах и размещении кода в нужном месте.

Я уже предоставил пользователю 2 шанса, чтобы получить правильную песню, и если они этого не делают, программа заканчивается, но не зацикливается на начале.

import random

with open("songlist.txt", "r") as songs_file:
    with open("artistlist.txt", "r") as artists_file:
        songs_and_artists = [(song.rstrip('\n'), artist.rstrip('\n'))
                             for (song, artist) in zip(songs_file,     artists_file)]

random_song, random_artist = random.choice(songs_and_artists)
songs_intials = "".join(item[0].upper() for item in random_song.split())


print("The songs' initials are", songs_intials, "and the name of the artist is", random_artist)


nb_tries_left = 3
guess = input("Guess the name of the song! ")
nb_tries_left -= 1

finished = False
while not finished:
    answer_found = (guess == random_song)
    if not answer_found:
        guess = input("Nope! Try again! ")
        nb_tries_left -= 1
    elif answer_found:
        print("The songs' initials are", songs_intials, "and the name of the artist is", random_artist)

    finished = (answer_found or nb_tries_left <= 0) 

if answer_found:

Песни 'инициалы - LT, а имя исполнителя - Fredo. Угадай название песни!Вот так Инициалы песен - LT, а имя исполнителя - Fredo Well done!

Затем Python не задает другого вопроса, и я не знаю, будет ли он снова таким.

намеренно неправильно его выводит:

The songs' initials are CS and the name of the artist is 50 Cent
Guess the name of the song! candysong
Nope! Try again! carpetshop
Nope! Try again! coolsong
Sorry, you've had two chances. Come back soon!
>>> 

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Чтобы задать более одного вопроса в каждой игре, вы должны сделать что-то вроде этого:

with open("songlist.txt", "r") as songs_file:
        with open("artistlist.txt", "r") as artists_file:
            songs_and_artists = [(song.rstrip('\n'), artist.rstrip('\n'))
                            for (song, artist) in zip(songs_file,     artists_file)]

def getSongAndArtist():
    randomIndex = random.randrange(0, len(songs_and_artists))
    return songs_and_artists.pop(randomIndex)


while(len(songs_and_artists) > 0):
    random_song, random_artist = getSongAndArtist()
    #play game with the song

Вы сохраняете список песен в списке питонов и высовываете случайный случай в каждом раунде до тех пор, покатак как у вас есть больше песен для игры.

Для списка лидеров вы должны спросить имя пользователя, прежде чем начать игру, сохранить список имен пользователей и их счет, а затем выбрать лучшие.Вы также должны выяснить, как набрать пользователей

0 голосов
/ 10 февраля 2019

Сначала Вы хотите получить 2 уникальные песни.Для этого вы можете использовать random.sample.В вашем случае это

indexes = random.sample(range(len(songs_and_artists)), 2) # 2 random songs (sampling without replacement)
# song 1
random_song, random_artist = songs_and_artists[indexes[0]]
# song 2
random_song, random_artist = songs_and_artists[indexes[1]]

. Кроме того, я рекомендую вам добавить свой код в функцию и использовать его с каждой выбранной песней.

...