Κυριακή 7 Νοεμβρίου 2021

Το Πρώτο Μου Πρόγραμμα!..

 


Το πρώτο μου project  στην python ήταν το κλασικό απλό παιχνιδάκι που φτιάχνουν όσοι ξεκινάνε την γλώσσα. Ο υπολογιστής διαλέγει έναν αριθμό από το 1 ως το 100 και ο χρήστης έχει 7 προσπάθειες για να τον βρει. 

Το 7 το υπολόγισα γιατί είναι ο αριθμός που σου επιτρέπει να κερδίζεις πάντα αν πηγαίνεις στην μέση των υποδείξεων κάθε φορά, π.χ ξεκινάς με το 50 και εάν ο υπολογιστής σου πει "επάνω", πηγαίνεις στο 75 κ.ο.κ

Ήταν η πρώτη φορά που χρησιμοποίησα στα σοβαρά την while loop καθώς και η πρώτη φορά που χρησιμοποίησα function που τρέχει όποτε την καλείς.


Επίσης ήταν η πρώτη φορά που μετέτρεψα .py αρχείο σε exe για να τρέχει και σε υπολογιστές ατόμων που δεν έχουν εγκατεστημένη την python στον υπολογιστή τους.

Για το τελευταίο χρησιμοποιήθηκε το γνωστό pyinstaller που είναι αρκετά μπελαλίδικο γιατί κατά πρώτον δεν φτιάχνει ένα και μοναδικό αρχείο exe στην περίπτωση που έχεις εικόνες και άλλα αρχεία στο πρόγραμμα σου οπότε πρέπει να τα κουβαλάς όλα αυτά μαζί με το exe, σε ένα rar αρχείο ή κάτι τέτοιο.


Κατά δεύτερον πολλά antivirus συμπεριλαμβανομένης της Google, βλέπουν λανθασμένα το exe σου σαν ιό. Η Google δεν είναι antivirus αλλά δεν σε αφήνει να στείλεις το exe μέσω mail, ούτε καν να το μοιράσεις μέσω του google drive.


Η λύση? Κάνεις 2 πράγματα. Πρώτον ανεβάζεις το αρχείο στο virus total, βλέπεις ποια antivirus το βλέπουν σαν ιό και στέλνεις false positive, τουλάχιστον στα μεγάλα antivirus που χρησιμοποιούνται ευρέως.

Δεύτερον συμπιέζεις το πρόγραμμα που θέλεις να μοιράσεις με κωδικό και μετά το ανεβάζεις στο google drive ή σε οποιονδήποτε server έχεις για διαμοιρασμό.


Αυτός είναι ο λόγος που όλα τα αρχεία που θα ανέβουν μελλοντικά σε αυτό το site θα έχουν κωδικό το 1234.


Παρακάτω είναι ο πλήρης κώδικας αυτού του παρθενικού προγράμματος.


import numpy as np


def my_first_game():
num_of_guesses = 1
max_num_of_guesses = 7
out_of_guesses = False

# The number we are looking for is auto generated
gold_num = np.random.randint(1, 99)

your_num = input("Can you find the number I thought? It's between 1-99 and you have 7 guesses: ")

try:
while int(gold_num) != int(your_num) and not out_of_guesses:
if num_of_guesses < max_num_of_guesses:

if int(gold_num) < int(your_num) < 100:
print("Go DOWN please")
elif int(gold_num) > int(your_num) > 0:
print("Go UP please")
elif int(your_num) >= 100:
print("No numbers above 99 are allowed!")
num_of_guesses -= 1
elif int(your_num) <= 0:
print("No negative numbers or 0 are allowed!")
num_of_guesses -= 1

num_of_guesses += 1
your_num = input("Try again: ")

else:
out_of_guesses = True
print("Sorry, you lost!")

else:
if int(gold_num) == int(your_num):
print("You found it, you bastard!")

except ValueError:
print("This is not a number, the program will terminate.")


my_first_game()

while True:
play_or_quit = input("Press 'p' to play again or 'q' to quit: ")
if play_or_quit.lower() == "p":
my_first_game()
else:
if play_or_quit.lower() == "q":
exit(0)

Πέμπτη 4 Νοεμβρίου 2021

Πως Να Κερδίσεις Το Τζόκερ?

 



Το πρώτο μου πραγματικά μεγάλο πρόγραμμα.

Για να πιάσεις το 5 + 1 στο Τζόκερ έχεις μία πιθανότητα στα 24.435.180. Δεν ακούγεται και πολύ ενθαρρυντικό αυτό ε?

Σε γήινα χρόνια τα νούμερα σου θα κληρωθούν στατιστικά σε 156.000 χρόνια αν συμμετέχεις και στις 3 εβδομαδιαίες κληρώσεις του ΟΠΑΠ. Επειδή ως γνωστόν ζούμε λίγο λιγότερο, κάτι πρέπει να κάνουμε γι' αυτό.

Η μόνη ίσως ελπίδα, για να βάλεις τον εαυτό σου στη λίστα των εκατομμυριούχων του Τζόκερ σε αυτή την ζωή είναι να παίζεις κάθε εβδομάδα και να παίζεις τα ίδια νούμερα.

Σε αυτό έρχεται να δώσει λύση το σκριπτάκι του άρθρου. Με βάση το ονοματεπώνυμο και την ημερομηνία γέννησης σου, βγάζει τους προσωπικούς σου τυχερούς αριθμούς που μπορείς να παίζεις μετά μανίας στα πρακτορεία του ΟΠΑΠ ή και online πλέον.

Ας δούμε για παράδειγμα τους τυχερούς αριθμούς του παλαιού θρύλου των γηπέδων Νίκου Γκάλη. Αν έβαζε τα στοιχεία του στο πινακάκι θα του έβγαζε την παρακάτω οθόνη.



Ο υπολογισμός των αριθμών εξηγείται αναλυτικά στο "About" της εφαρμογής οπότε δεν θα κάνω εδώ μεγαλύτερη αναφορά. Όποιος θέλει το κατεβάζει ελεύθερα από το λινκ στο τέλος του άρθρου και το διαβάζει.

Επίσης το πρόγραμμα συνδέεται με την API του ΟΠΑΠ, οπότε κατεβάζει τα νούμερα της τελευταίας κλήρωσης και ενημερώνει για την επόμενη.

Σχετικά με τον κώδικα η όλη φάση ήταν ένα κολαστήριο. Συνολικά 9 imports από modules και 12 functions που τρέχουν ταυτόχρονα, χρειάστηκαν για να τρέχει ομαλά το πρόγραμμα.

Όλα αυτά σε 351 γραμμές κώδικα όπου πολλές φορές έχανα την μπάλα του τι γινόταν σε κάθε γραμμή. Αλλά το αποτέλεσμα νομίζω με δικαιώνει και αυτή είναι εξάλλου η χαρά του κάθε προγραμματιστή: αυτό που φτιάχνει να λειτουργεί ακριβώς όπως φαντάστηκε ότι θα λειτουργούσε!..

Μπορείτε να κατεβάσετε ελεύθερα το πρόγραμμα για:

Windows 32-bit εδώ.

Windows 64-bit εδώ.

Η λειτουργία έχει πλέον ενσωματωθεί στην εφαρμογή Τζόκερ και στην σελίδα "οι τυχεροί σου αριθμοί"

Αυτά και καλή μας τύχη!..

Δωρεάν Σουίτα Διαχείρισης Δελτίων Τζόκερ


Το πρόγραμμα για το Τζόκερ αναβαθμίστηκε με πλήθος στατιστικών στοιχείων, όσο πιο ευπαρουσίαστα και απλά γίνεται.

Μετά από 3.379 γραμμές κώδικα στην Python 3 και πολλές ώρες στο PC, με χαρά παρουσιάζω τα χαρακτηριστικά του προγράμματος:

Συνολικά μπορείς να:

- Αποθηκεύσεις τα δελτία σου και να τα ελέγχεις με ένα κλικ.
- Πραγματοποιείς τυχαίες κληρώσεις με όσους αριθμούς και Τζόκερ επιθυμείς.
- Βλέπεις το κόστος των δελτίων που φτιάχνεις.

Επίσης έχεις:
- Πλήρης πρόσβαση στο ιστορικό κληρώσεων, όπου βλέπεις αν τα δελτία σου έχουν κερδίσεις οποτεδήποτε στο παρελθόν. Το ιστορικό κληρώσεων ανανεώνεται σε κάθε κλήρωση.
- Δυνατότητα τυχαίων κληρώσεων στο ιστορικό, με όσους αριθμούς και Τζόκερ επιθυμείς.
- Προσωποποιημένους τυχερούς αριθμούς με βάση το ονοματεπώνυμο και την ημερομηνία γέννησης σου.
- Πλήθος στατιστικών στοιχείων απλά και κατανοητά παρουσιασμένα.
- Δυνατότητα εκτύπωσης ολόκληρου του ιστορικού κληρώσεων





Σχεδιάζεται να προστεθούν σε επόμενες εκδόσεις:
- Πρόβλεψη μελλοντικών αριθμών με την δύναμη της Τεχνητής Νοημοσύνης.


Μπορείτε να κατεβάσετε ελεύθερα το πρόγραμμα για:
Windows 32-bit εδώ.
Windows 64-bit εδώ.

Προτείνεται η απεγκατάσταση της παλιάς έκδοσης πριν την εγκατάσταση της νέας.

Version 1.2

Προστέθηκε κουμπί αναβάθμισης της εφαρμογής μέσα από το πρόγραμμα.
Ελεύθερο για προσωπική χρήση, απαγορεύεται αυστηρά οποιαδήποτε εμπορική εκμετάλλευση.


Τετάρτη 3 Νοεμβρίου 2021

Art Gallery Database

Και φτάνω στην 150ή και τελευταία άσκηση, του εκπληκτικού βιβλίου "Python by Example" της Nichola Lacey. Εκεί ζητείται να φτιαχτεί μια πλήρως λειτουργική βάση δεδομένων, μιας υποθετικής γκαλερί, όπου από ένα γραφικό περιβάλλον θα μπορείς να κάνεις αναζήτηση με βάση 4 διαφορετικά κριτήρια (καλλιτέχνης, μέσο ζωγραφικής, τιμή μεγαλύτερη ή μικρότερη) και θα μπορείς να προσθαφαιρείς έργα τέχνης ή στοιχεία επικοινωνίας καλλιτεχνών.

Χρησιμοποιήθηκε η Tkinter για το γραφικό περιβάλλον, η SQLite για την βάση δεδομένων και 297 γραμμές κώδικα στην Python 3. Είναι το πρώτο project που φτιάχνεται κατά παραγγελία, έστω και μιας συγγραφέως ενός βιβλίου στην Python.

Το πρώτο πρόβλημα που έπρεπε να ξεπεράσω σαν νέος προγραμματιστής είναι το πως γίνεται ένα κουμπί αναζήτησης να καταλήγει σε 4 διαφορετικά functions. Όι γνωρίζοντας από Tkinter ξέρουν πως με ένα κουμπί συνδέεις μόνο 1 function. Μετά ήταν και το γραφικό περιβάλλον, που θα μπουν τα κουμπιά, που η αναζήτηση κλπ.

Το τελικό αποτέλεσμα δεν είναι τελείως αποκρουστικό για 2 ημερών δουλειά. Σημασία έχει η δημιουργία μιας πλήρους database που μπορεί να διαχειριστεί εκατομμύρια εγγραφές με πλήρη αναζήτηση και βάλε-βγάλε πρακτικά όλων των στοιχείων, ανάλογα με τις ανάγκες του καθενός.

Το αρχείο είναι ελεύθερο για όποιον θέλει να το κατεβάσει εδώ. Το password είναι πάντα το 1234 και στάλθηκε false positive σε όσα antivirus το έβγαλαν σαν ιό. Σε μερικές μέρες θα μπει σε white list.


Υπόψιν ότι για να γίνει κανονική χρήση του προγράμματος, θα πρέπει τα αρχεία να αποσυμπιεστούν και να παραμείνουν και τα 4 στον ίδιο φάκελο, σε διαφορετική περίπτωση το db αρχείο δεν μπορεί να κάνει save όταν είναι συμπιεσμένο και οι αλλαγές θα χάνονται με την έξοδο.