Top.Mail.Ru
Ответы
Аватар пользователя
10мес
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+4

Тема: программирование на python.

Здравствуйте! Писал код игры "виселицы" на python. Мне кажется он не очень. Как сделать код лучше? Вот он:

1234567891011121314151617181920212223242526272829303132333435
 from random import randint 
 
words = ["python", "java", "javascript", "rust"]    # Список слов 
word_secret = words[randint(0, 3)]    # Случайное слово 
word = word_secret    # Переменная для хранения неизменённого случайного слово 
attempts = 5    # Попытки 
letters = ["_" for _ in range(len(word_secret))]    # зашифрованное слово 
 
 
# Функция для обновления зашифрованного слова 
def update_encrypted_word(letters_func, word_secret_func, letter_user_func): 
    letters_func.pop(word_secret_func.find(letter_user_func)) 
    letters_func.insert(word_secret_func.find(letter_user_func), letter_user_func) 
    word_secret_func = (word_secret_func[:word_secret_func.find(letter_user_func)] + "_" + word_secret_func[word_secret_func.find(letter_user_func) + 1:]) 
    return [letters_func, word_secret_func] 
 
 
# Цикл будет работать пока пользователь не введёт все буквы слова 
while "".join(letters) != word: 
    letter_user = input("\nВведите букву: ") 
 
    if letter_user in word_secret:    # Есть ли в слове буква пользователя 
        letters, word_secret = update_encrypted_word(letters, word_secret, letter_user)[0], update_encrypted_word(letters, word_secret, letter_user)[1] 
        print(f"Вы угадали {word_secret.find(letter_user) + 1} букву!") 
        print("".join(letters)) 
    else:    # Если в слове нет буквы пользователя 
        attempts -= 1 
        print(f"\nУ вас осталось {attempts} попыток!") 
    if attempts == 0:    # Проверка на 0 попыток 
        print("~У вас закончились попытки!~") 
        print("~Вы проиграли!~") 
        break 
 
print(f'\nЗагаданное слово было - "{word}"!')    # Выводим загаданное слово 
 
По дате
По рейтингу
Аватар пользователя
Оракул
10мес
  • А если пользователь ввел букву, которую уже ранее вводил, что делать при этом?

  • А если там несколько одинаковых букв, например в java? У тебя он только одну внесет. И то программа внесла первую 'a', но вывела текст, что нашел следующую, т.е. 4-ую по счету.


Не проще проверять наличие буквы таким способом, что за сложности учудил:

1234
 if letter_user in word_secret:
   for i in range(len(word_secret)):
      if letter_user = word_secret[i]:
         letter[i] = letter_user   

Итого пока:

123456789101112131415161718192021222324
 from random import randint  
  
words = ["python", "java", "javascript", "rust"]    # Список слов  
word_secret = words[randint(0, 3)]    # Случайное слово  
attempts = 5    # Попытки  
letters = ["_" for _ in range(len(word_secret))]    # зашифрованное слово  
 
# Цикл будет работать пока пользователь не введёт все буквы слова  
while "".join(letters) != word_secret:  
    letter_user = input("\nВведите букву: ")  
  
    if letter_user in word_secret:    # Есть ли в слове буква пользователя  
        for i in range(len(word_secret)): 
            if letter_user == word_secret[i]: 
                letters[i] = letter_user   
    else:    # Если в слове нет буквы пользователя  
        attempts -= 1  
        print(f"\nУ вас осталось {attempts} попыток!")  
    if attempts == 0:    # Проверка на 0 попыток  
        print("~У вас закончились попытки!~")  
        print("~Вы проиграли!~")  
        break  
  
print(f'\nЗагаданное слово было - "{word}"!')    # Выводим загаданное слово 
Аватар пользователя
10мес

Слишком многа букав больше 3 букав не понимать. А если серьезно, то на фоне названий переменных не видно операций над ними, вам может и понятно, но для другого он трудно читаемый. И изучайте библиотеки, изобретать велосипед не лучшее решение

Аватар пользователя
Профи
10мес

Переписать в ООП стиле

Аватар пользователя
Ученик
10мес

ну вместо списка можно в интернете базу какую нибудь со словами найти

Аватар пользователя
Гуру
10мес

Это случаем не нейросеть писала?