Wątek przeniesiony 2022-03-04 16:39 z Kosz przez Riddle.

Miejsca powtarzających się liter

0

Symulator wisielca
Program wybiera losowe słowo z listy, przykładowo wylosowane słowo to okno. Użytkownik odgaduje, że w słowie występuje litera o. Próbowałem wykorzystać funkcje find ale ona tylko informuje o miejscu pierwszej litery z danego słowa jednocześnie ignorując kolejne te same znaki. Proszę o nakierowanie czy jest jakaś funkcja, którą mógłbym wykorzystać aby program informował o wszystkich takich samych literach ze słowa? Czy powinienem może próbować rozwiązać to poprzez iterowanie od zerowego indeksu słowa do ostatniego?

Z góry dzięki i pozdrawaim

2

Pokaz co już masz.

0

Ja bym poszedł w takim kierunku.

Tworzysz stringa, który odwzorowuje "ukryte" litery. np okno to będzie coś w stylu _ _ _ _

word_to_guess = "".join("_" for letter in choosen_word)

Zakładam, że masz tam jakiegoś inputa w którym podajesz litery, więc odkrywanie poniższych pól można zrobić np w taki sposób (załóżmy, że wpisana litera to o )

for index in range(len(choosen_word)):
    if choice[index] == "o":
        word_to_guess = word_to_guess[:index] + "o" + word_to_guess[index+1:]

W pythonie masz takie fajne coś, co nazywa się slicing. Dzieki temu, przy pomocy indexów, można modyfikować stringi, listy itp.

Kiedy wyprintujez word_to_guess to otrzymasz o_ _o

0

Aktualnie mam cos takiego, wykrozystana funkcja find informuje tylko o 1 znaku ze slowa ignorujac jednoczesnie kolejne, takie same znaki. Na ten moment sproboje wykorzystac podpowiedzi uzytkownika @ledi12, któremu dziekuje za czesta pomoc.

import random
from collections import Counter


lista = ('piec', 'kuchenka', 'karton', 'auto', 'krzeslo', 'fotel', 'biurko', 'cukier')
losowe = random.choice(lista)
# counts = Counter(losowe)
print(losowe)

# ILE SLOWO MA LITER
def znaki(losowe):
    lcount = dcount = 0
    for c in losowe:
        if c.isdigit():
            dcount += 1
        elif c.isalpha():
            lcount += 1
    return lcount, dcount

litery, digity = znaki(losowe)
print("Ilosc znakow w slowie", losowe, "to", litery)

while True:
    a = input("Podaj litere, ktora wedlug Ciebie znajduje sie w slowie: ")
    if a in losowe:
        print("Tak, podana przez Ciebie litera znajduje się na miejscu:", losowe.find(a),"podana przez Ciebie litera znaduje sie: razy w slowie, sproboj odgadnac kolejna litere")
        b = input("Jeśli chcesz spróbować odgadnąć hasło wpisz 'zgaduje', jeśli chcesz dalej odgadywać litery wpisz 'dalej' ")
        if b == 'zgaduje':
            c = input("Podaj hasło: ")
            if c == losowe:
                print("Zgadłeś! Szuakne słowo to:", losowe)
                break
        if b == 'dalej':
            continue
0
kudatyxd napisał(a):

Aktualnie mam cos takiego, wykrozystana funkcja find informuje tylko o 1 znaku ze slowa ignorujac jednoczesnie kolejne, takie same znaki. Na ten moment sproboje wykorzystac podpowiedzi uzytkownika @ledi12, któremu dziekuje za czesta pomoc.

https://stackoverflow.com/questions/4664850/how-to-find-all-occurrences-of-a-substring

0

wystarczy przeiterować się po słowie i sprawdzać czy aktualna litera jest równa literze podanej przez użytkownika, w Pythonie da się to zrobić w jednej linijce

1 użytkowników online, w tym zalogowanych: 0, gości: 1