Home > Back-end >  Printing the results from loop in HTML
Printing the results from loop in HTML

Time:09-22

I have a simple Python script that accepts user input as letters. Then it looks up a json dictionary for valid words that can be generated with provided letters and print valid words to screen.

I created simple website using pythonanywhere & flask. There is a textbox for input and user enter letters. I managed to make it worked until output part. What I try to do is to print output (valid words) to html page. I can only print the first string value in the loop.Please see screenshot

Any help would be appreciated.

Actually, script works as intended in local. I can get valid words using "print(kelime)" in the last part. Please see screenshot

My index.html for input and output

<form action="/index" method = "POST">
    <p>Harfler <input type = "text" name = "harfler" /></p>
   
    <p><input type = "submit" value = "Submit" /></p>
</form>
  
    <h3>{{harfler}}</h3>
    <h3>{{harfsayisi}}</h3>
    <h3>{{kelime}}</h3>
</form>

My script.py

from flask import Flask, request,render_template,json

app = Flask(__name__)

@app.route('/index', methods = ['POST', 'GET'])
def data():
    if request.method == 'GET':
        return render_template('index.html')

    if request.method == 'POST':
        harfler = request.form['harfler']

        #json dosyasını açıyoruz
        # = open the JSON file
        with open('mysite/gts5.json',encoding="utf8") as f:
            data = json.load(f)

        # harfler listesindeki her bir harfin sayısını hesaplıyorum
        # = calculating the number of each letter in the letters list
        harfler_harf_sayisi = {}
        for i in harfler:
            harfler_harf_sayisi[i] = harfler.count(i)
        harfsayisi=harfler_harf_sayisi

        #json dosyasındaki her bir kelimeyi kelimeler listesine ekliyorum. json dosyasindaki (yani sozlukteki) madde key'ine karsilik gelen her value bizim icin kelimedir.
        # = I'm adding each word in the json file to the words list. Each value corresponding to the item key in the json file (ie in the dictionary) is a word for us.
        kelimeler = []
        for i in range(len(data)):
            kelimeler.append(data[i]['madde'])

        #kelimeler listesindeki duplicate kayitlari ucuruyoruz
        # = we are removing duplicate records in the word list
        kelimeler = list(dict.fromkeys(kelimeler))

        #harflerdeki her harf ayni zamanda kelimede mevcut mu kontrolü burada yapiyoruz
        # = Here we check whether each letter in the letters is also present in the word.
        for kelime in kelimeler:
            hepsi_var = all([harf in harfler for harf in kelime])

            #her bir kelimedeki harf sayisini hesapliyorum
            # = calculate the number of letters in each word
            kelime_harf_sayisi = {}
            for i in kelime:
                kelime_harf_sayisi[i] = kelime.count(i)

            #harfler listesindeki her harf kelimede de varsa...
            # = If every letter in the list of letters is also in the word...
            if hepsi_var == True:

                #bu nokta çok kritik. burada kelimenin gecerli olabilmesi icin harflerdeki harf sayisinin kelimedeki harf sayisindan olması gerektigini soyluyoruz. ayrica kelime tek harften oluşuyorsa onu göz ardı ediyoruz.
                # = This point is very critical. Here we say that for the word to be valid, the number of letters in the letters must be the number of letters in the word. Also, if the word consists of only one letter, we ignore it.
                gecerli_kelime = all(harfler_harf_sayisi[k] >= kelime_harf_sayisi[k] for k in kelime_harf_sayisi) and (len(kelime_harf_sayisi) > 1)

                if gecerli_kelime == True:

                    print(kelime)
                    return render_template('index.html',harfler=harfler,harfsayisi=harfsayisi,kelime=kelime)
            else:
                continue

CodePudding user response:

OK, I figured it out myself. I'm posting here in case it helps someone.

I had to put all outputs in the loop into a new variable.

New code would be:

def harfgiris():

harfler = input("Harfleri girin?"   ' ')
print(list (harfler))
return harfler

def sonuc():
import json

#json dosyasını açıyoruz
with open('C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python39_64\gts5.json',encoding="utf8") as f:
    data = json.load(f)

# harfler listesindeki her bir harfin sayısını hesaplıyorum
harfler=harfgiris()
harfler_harf_sayisi = {}
for i in harfler:
    harfler_harf_sayisi[i] = harfler.count(i)

#json dosyasındaki her bir kelimeyi kelimeler listesine ekliyorum. json dosyasindaki (yani sozlukteki) 'madde' key'ine karsilik gelen her value bizim icin kelimedir.
kelimeler = []
for i in range(len(data)):
    kelimeler.append(data[i]['madde'])

#kelimeler listesindeki duplicate kayitlari ucuruyoruz
kelimeler = list(dict.fromkeys(kelimeler))

kelimelistesi=""
#harflerdeki her harf ayni zamanda kelimede mevcut mu kontrolü burada yapiyoruz
for kelime in kelimeler:
    
    hepsi_var = all([harf in harfler for harf in kelime])
    
    #her bir kelimedeki harf sayisini hesapliyorum
    kelime_harf_sayisi = {}
    for i in kelime:
            kelime_harf_sayisi[i] = kelime.count(i)
            
    #harfler listesindeki her harf kelimede de varsa...
    if hepsi_var == True:  

            #bu nokta çok kritik. burada kelimenin gecerli olabilmesi icin harflerdeki harf sayisinin kelimedeki harf sayisindan olması gerektigini soyluyoruz. ayrica kelime tek harften oluşuyorsa onu göz ardı ediyoruz.
            gecerli_kelime_sarti = all(harfler_harf_sayisi[k] >= kelime_harf_sayisi[k] for k in kelime_harf_sayisi) and (len(kelime_harf_sayisi) > 1)
            
            
            if gecerli_kelime_sarti == True:
                    
                    #konsola yazdırırken bunu da kullanabilirdik
                    #print(kelime)
                    
                    #olası tüm kelimeleri bir değişkene atıyoruz
                    kelimelistesi=kelimelistesi   "\n"   kelime
                   
    else:
        continue

#olası tüm kelimeleri yazdırıyoruz
print(kelimelistesi)

sonuc()
  • Related