SkyRose
Megapat
- Katılım
- 26 Haziran 2019
- Mesajlar
- 6.069
- Makaleler
- 5
- Çözümler
- 59
Merhaba. İlk önce kodları paylaşayım.
Kodlar bu şekilde. Eğer kafa karıştırıcı olduysa sadece hataya sebep olan kısmı da ayrıca bir daha koyayım;
PyQt5 ile arayüze sahip basit mi basit bir quiz uygulamasının scoreboard bölümünü yapıyordum. Her soru doğru bilindiğinde kullanıcıya 10 puan eklenecek ve kullanıcının yeni puanı da ekranda gösterilecekti.
Score'un hiçbir soru çözülmeden önce default bir değere sahip olması gerekiyordu (Variable referenced before assignment hatası almamak için), ben de fonksiyonun en başına "scor = 0" diye girdim. Fakat böyle olunca da her başa döndüğünde kullanıcının puanı 0'a resetleniyordu ve puan da artamıyordu. Bunu önlemek için "score = 0"'ı kaldırınca da hata alıyorum.
Score'u fonksiyonun daha üstünden tanımlayıp başlangıç harici bir daha kullanmamayı denedim ama yine "Local variable referenced before assignment" hatası aldım.
scor = 0 tanımlamasını if bloğu ile uygun belli başlı koşulların altına koyduğumda da (Böylece scor = 0'ı istediğim zaman kullanıp istediğim zaman devre dışı bırakabilecektim) yine hata aldım. Bunu nasıl çözebilirim?
Demin kodun okunabilirlik olarak biraz zayıf olduğunu fark ettim. Çok tecrübeli olmadığımdan elimden bu kadar geldi, eğer anlaşılmadıysa yeniden açıklayabilirim.
Python:
import sys
import random
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox, QLabel
from PyQt5.QtGui import *
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtGui import QIcon
class Verbs():
def __init__(self, name, type, point):
self.type = type
self.name = name
self.point = point
like = Verbs("Like", "both", 10)
admit = Verbs("Admit", "gerund", 10)
advise = Verbs("Advise", "both", 10)
appreciate = Verbs("Appreciate", "gerund", 10)
avoid = Verbs("Avoid", "gerund", 10)
consider = Verbs("Consider", "both", 10)
delay = Verbs("Delay", "gerund", 10)
forgive = Verbs("Forgive", "gerund", 10)
prevent = Verbs("Prevent", "gerund", 20)
recommend = Verbs("Recommend", "both", 10)
report = Verbs("Report", "gerund", 10)
appear = Verbs("Appear", "infinitive", 10)
agree = Verbs("Agree", "infinitive", 20)
arrange = Verbs("Arrange", "infinitive", 10)
hope = Verbs("Hope", "infinitive", 10)
mean = Verbs("Mean", "both", 10)
offer = Verbs("Offer", "infinitive", 10)
expect = Verbs("Expect", "infinitive", 10)
command = Verbs("Command", "infinitive", 20)
bring = Verbs("Bring", "infinitive", 20)
remember = Verbs("Remember", "both", 10)
stop = Verbs("Stop", "both", 10)
tryf = Verbs("Try", "both", 10)
forget = Verbs("Forget", "both", 10)
regret = Verbs("Regret", "both", 10)
refuse = Verbs("Refuse", "infinitive", 10)
accuse = Verbs("Accuse", "gerund", 10)
adj = Verbs("*Adjective'lerden sonra gelen", "infinitive", 10)
prep = Verbs("*Preposition'lardan sonra gelen", "gerund", 10)
deny = Verbs("Deny", "gerund", 10)
learn = Verbs("Learn", "infinitive", 10)
help1 = Verbs("Help", "both", 10)
mind = Verbs("Mind", "gerund", 10)
promise = Verbs("Promise", "infinitive", 20)
chose = Verbs("Choose", "infinitive", 10)
wait = Verbs("Wait", "infinitive", 10)
prepare = Verbs("Prepare", "infinitive", 10)
afford = Verbs("Afford", "gerund", 10)
risk = Verbs("Risk", "gerund", 30)
verblist = [like, admit, advise, appreciate, avoid, consider, delay, forgive, prevent, recommend, report, appear, agree, arrange, hope,
mean, offer, expect, command, bring, remember, tryf, forget, regret, refuse, accuse, adj, prep, deny,
learn, help1, mind, promise, chose, wait, prepare, afford, risk]
random.shuffle(verblist)
class MyWindow(QMainWindow):
def __init__(self):
super(MyWindow, self).__init__()
self.setWindowTitle("Quiz")
self.setGeometry(300, 300, 330, 250)
self.initUI()
self.setStyleSheet("background-color: paleturquoise;")
self.setWindowIcon(QIcon(r"C:\Users\-kullanıcı adım-\Desktop\efektler\b.png"))
def initUI(self):
self.lbl_name = QtWidgets.QLabel(self)
self.lbl_name.setText("WELCOME!")
self.lbl_name.move(130, 10)
self.lbl_name2 = QtWidgets.QLabel(self)
self.lbl_name2.setText("SCORE:")
self.lbl_name2.move(15, 180)
self.lbl_name2.setFont(QFont('Times', 12))
self.score = QtWidgets.QLabel(self)
self.score.setText(f"{0}")
self.score.move(100, 180)
self.score.resize(50, 30)
self.score.setFont(QFont('Arial', 20))
self.score.setStyleSheet("background-color: royalblue;")
self.txt_name = QtWidgets.QLineEdit(self)
self.txt_name.move(10, 130)
self.txt_name.resize(100, 32)
self.btn_save = QtWidgets.QPushButton(self)
self.btn_save.setText("Check")
self.btn_save.move(10, 50)
self.btn_save.resize(100, 70)
self.btn_save.clicked.connect(self.on_click)
self.btn_save.setStyleSheet("background-color : white")
self.btn2_save = QtWidgets.QPushButton(self)
self.btn2_save.setText("Start")
self.btn2_save.move(220, 100)
self.btn2_save.clicked.connect(self.on_click2)
self.btn2_save.setStyleSheet("background-color : white")
@pyqtSlot()
def on_click(self):
if len(verblist) == 38:
scor = 0
if self.txt_name.text() == verblist[0].type:
control1 = "Correct"
control2 = "Correct"
if scor == 0:
scor = verblist[0].score
else:
scor += verblist[0].score
print(f"""
User gained {10} points.
Now user has got {scor} points.
""")
self.score.setText(f"{scor}")
if self.txt_name.text() != verblist[0].type:
control2 = (f"Incorrect! Answer of {verblist[0].name} was: {verblist[0].type}")
control1 = "Wrong!"
verblist.remove(verblist[0])
self.reply = QMessageBox.question(self, control1, control2, QMessageBox.Yes | QMessageBox.No,
QMessageBox.No)
if self.reply == QMessageBox.Yes:
print('Yes clicked.')
else:
self.reply2 = QMessageBox.question(self, "Bruh", "You cannot know better than me, what do you mean?", QMessageBox.No | QMessageBox.No,
QMessageBox.No)
if self.reply2 == QMessageBox.No:
print("User punished for being fresh to ADMIN")
scor = -99
self.score.setText(f"{scor}")
else:
exit()
def on_click2(self):
while True:
self.reply = QMessageBox.question(self, "Approve", f" Fiil: {verblist[0].name}",
QMessageBox.Yes | QMessageBox.No,
QMessageBox.No)
if self.reply == QMessageBox.Yes:
print(f"User choosed '{verblist[0].name}'")
self.lbl_name.setText(f"{verblist[0].name}")
break
elif self.reply == QMessageBox.No:
print(f"User refused {verblist[0].name}")
verblist.remove(verblist[0])
continue
else:
pass
exit()
def window():
app = QApplication(sys.argv)
win = MyWindow()
win.show()
sys.exit(app.exec_())
window()
Kodlar bu şekilde. Eğer kafa karıştırıcı olduysa sadece hataya sebep olan kısmı da ayrıca bir daha koyayım;
Python:
@pyqtSlot()
def on_click(self):
if len(verblist) == 38:
scor = 0
if self.txt_name.text() == verblist[0].type:
control1 = "Correct"
control2 = "Correct"
if scor == 0:
scor = verblist[0].score
else:
scor += verblist[0].score
print(f"""
User gained {10} points.
Now user has got {scor} points.
""")
self.score.setText(f"{scor}")
if self.txt_name.text() != verblist[0].type:
control2 = (f"Incorrect! Answer of {verblist[0].name} was: {verblist[0].type}")
control1 = "Wrong!"
verblist.remove(verblist[0])
self.reply = QMessageBox.question(self, control1, control2, QMessageBox.Yes | QMessageBox.No,
QMessageBox.No)
if self.reply == QMessageBox.Yes:
print('Yes clicked.')
else:
self.reply2 = QMessageBox.question(self, "Bruh", "You cannot know better than me, what do you mean?", QMessageBox.No | QMessageBox.No,
QMessageBox.No)
if self.reply2 == QMessageBox.No:
print("User punished for being fresh to ADMIN")
scor = -99
self.score.setText(f"{scor}")
else:
exit()
PyQt5 ile arayüze sahip basit mi basit bir quiz uygulamasının scoreboard bölümünü yapıyordum. Her soru doğru bilindiğinde kullanıcıya 10 puan eklenecek ve kullanıcının yeni puanı da ekranda gösterilecekti.
Score'un hiçbir soru çözülmeden önce default bir değere sahip olması gerekiyordu (Variable referenced before assignment hatası almamak için), ben de fonksiyonun en başına "scor = 0" diye girdim. Fakat böyle olunca da her başa döndüğünde kullanıcının puanı 0'a resetleniyordu ve puan da artamıyordu. Bunu önlemek için "score = 0"'ı kaldırınca da hata alıyorum.
Score'u fonksiyonun daha üstünden tanımlayıp başlangıç harici bir daha kullanmamayı denedim ama yine "Local variable referenced before assignment" hatası aldım.
scor = 0 tanımlamasını if bloğu ile uygun belli başlı koşulların altına koyduğumda da (Böylece scor = 0'ı istediğim zaman kullanıp istediğim zaman devre dışı bırakabilecektim) yine hata aldım. Bunu nasıl çözebilirim?
Demin kodun okunabilirlik olarak biraz zayıf olduğunu fark ettim. Çok tecrübeli olmadığımdan elimden bu kadar geldi, eğer anlaşılmadıysa yeniden açıklayabilirim.
Son düzenleme: