Compare commits
10 Commits
Basic-Proj
...
All-Projec
| Author | SHA1 | Date | |
|---|---|---|---|
| 055971a0e9 | |||
| 99abb706a6 | |||
| 42aae67117 | |||
| 35d6cd35dd | |||
| c05c23d327 | |||
| 5615f35156 | |||
| c0d4b3e9b8 | |||
| 19614b9707 | |||
| a98908f979 | |||
| bd8b9ddf58 |
86
AlarmClock.py
Normal file
86
AlarmClock.py
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
"""
|
||||||
|
----------------------------------------
|
||||||
|
Alarm Clock
|
||||||
|
----------------------------------------
|
||||||
|
This is an interesting Command Line Interface (CLI)
|
||||||
|
Python application for an intermediate-level developer.
|
||||||
|
People across the globe use alarm clock features in their
|
||||||
|
devices but this project can be altered in a bit different
|
||||||
|
manner. Some certain YouTube links can be added to a text
|
||||||
|
file and the project is programmed in a way that when a user
|
||||||
|
sets an alarm then the code shall pick a random link from the
|
||||||
|
video and will start playing the YouTube link.
|
||||||
|
----------------------------------------
|
||||||
|
"""
|
||||||
|
|
||||||
|
import datetime
|
||||||
|
import os
|
||||||
|
import time
|
||||||
|
import random
|
||||||
|
import webbrowser
|
||||||
|
|
||||||
|
# If video URL file does not exist, create one
|
||||||
|
if not os.path.isfile("youtube_alarm_videos.txt"):
|
||||||
|
print('Creating "youtube_alarm_videos.txt"...')
|
||||||
|
with open("youtube_alarm_videos.txt", "w") as alarm_file:
|
||||||
|
alarm_file.write("https://www.youtube.com/channel/UCz6SDxk2KQqJAD6Ra_YPm6A")
|
||||||
|
|
||||||
|
def check_alarm_input(alarm_time):
|
||||||
|
# Checks to see if the user has entered in a valid alarm time
|
||||||
|
if len(alarm_time) == 1: # [Hour] Format
|
||||||
|
if alarm_time[0] < 24 and alarm_time[0] >= 0:
|
||||||
|
return True
|
||||||
|
if len(alarm_time) == 2: # [Hour:Minute] Format
|
||||||
|
if alarm_time[0] < 24 and alarm_time[0] >= 0 and \
|
||||||
|
alarm_time[1] < 60 and alarm_time[1] >= 0:
|
||||||
|
return True
|
||||||
|
elif len(alarm_time) == 3: # [Hour:Minute:Second] Format
|
||||||
|
if alarm_time[0] < 24 and alarm_time[0] >= 0 and \
|
||||||
|
alarm_time[1] < 60 and alarm_time[1] >= 0 and \
|
||||||
|
alarm_time[2] < 60 and alarm_time[2] >= 0:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
# Get user input for the alarm time
|
||||||
|
print("Set a time for the alarm (Ex. 06:30 or 18:30:00)")
|
||||||
|
while True:
|
||||||
|
alarm_input = input(">> ")
|
||||||
|
try:
|
||||||
|
alarm_time = [int(n) for n in alarm_input.split(":")]
|
||||||
|
if check_alarm_input(alarm_time):
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
raise ValueError
|
||||||
|
except ValueError:
|
||||||
|
print("ERROR: Enter time in HH:MM or HH:MM:SS format")
|
||||||
|
|
||||||
|
# Convert the alarm time from [H:M] or [H:M:S] to seconds
|
||||||
|
seconds_hms = [3600, 60, 1] # Number of seconds in an Hour, Minute, and Second
|
||||||
|
alarm_seconds = sum([a*b for a,b in zip(seconds_hms[:len(alarm_time)], alarm_time)])
|
||||||
|
|
||||||
|
# Get the current time of day in seconds
|
||||||
|
now = datetime.datetime.now()
|
||||||
|
current_time_seconds = sum([a*b for a,b in zip(seconds_hms, [now.hour, now.minute, now.second])])
|
||||||
|
|
||||||
|
# Calculate the number of seconds until alarm goes off
|
||||||
|
time_diff_seconds = alarm_seconds - current_time_seconds
|
||||||
|
|
||||||
|
# If time difference is negative, set alarm for next day
|
||||||
|
if time_diff_seconds < 0:
|
||||||
|
time_diff_seconds += 86400 # number of seconds in a day
|
||||||
|
|
||||||
|
# Display the amount of time until the alarm goes off
|
||||||
|
print("Alarm set to go off in %s" % datetime.timedelta(seconds=time_diff_seconds))
|
||||||
|
|
||||||
|
# Sleep until the alarm goes off
|
||||||
|
time.sleep(time_diff_seconds)
|
||||||
|
|
||||||
|
# Time for the alarm to go off
|
||||||
|
print("Wake Up!")
|
||||||
|
|
||||||
|
# Load list of possible video URLs
|
||||||
|
with open("youtube_alarm_videos.txt", "r") as alarm_file:
|
||||||
|
videos = alarm_file.readlines()
|
||||||
|
|
||||||
|
# Open a random video from the list
|
||||||
|
webbrowser.open(random.choice(videos))
|
||||||
76
Calculator.py
Normal file
76
Calculator.py
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
"""
|
||||||
|
----------------------------------------
|
||||||
|
Calculator
|
||||||
|
----------------------------------------
|
||||||
|
Building this project you would learn to design a graphical UI
|
||||||
|
and make you familiar with a library like Tkinter. This library
|
||||||
|
enables you to create buttons to perform different operations and
|
||||||
|
display results on the screen.
|
||||||
|
----------------------------------------
|
||||||
|
"""
|
||||||
|
|
||||||
|
def addition ():
|
||||||
|
print("Addition")
|
||||||
|
n = float(input("Enter the number: "))
|
||||||
|
t = 0 # Total number enter
|
||||||
|
ans = 0
|
||||||
|
while n != 0:
|
||||||
|
ans = ans + n
|
||||||
|
t+=1
|
||||||
|
n = float(input("Enter another number (0 to calculate): "))
|
||||||
|
return [ans,t]
|
||||||
|
def subtraction ():
|
||||||
|
print("Subtraction");
|
||||||
|
n = float(input("Enter the number: "))
|
||||||
|
t = 0 # Total number enter
|
||||||
|
sum = 0
|
||||||
|
while n != 0:
|
||||||
|
ans = ans - n
|
||||||
|
t+=1
|
||||||
|
n = float(input("Enter another number (0 to calculate): "))
|
||||||
|
return [ans,t]
|
||||||
|
def multiplication ():
|
||||||
|
print("Multiplication")
|
||||||
|
n = float(input("Enter the number: "))
|
||||||
|
t = 0 #Total number enter
|
||||||
|
ans = 1
|
||||||
|
while n != 0:
|
||||||
|
ans = ans * n
|
||||||
|
t+=1
|
||||||
|
n = float(input("Enter another number (0 to calculate): "))
|
||||||
|
return [ans,t]
|
||||||
|
def average():
|
||||||
|
an = []
|
||||||
|
an = addition()
|
||||||
|
t = an[1]
|
||||||
|
a = an[0]
|
||||||
|
ans = a / t
|
||||||
|
return [ans,t]
|
||||||
|
# main...
|
||||||
|
while True:
|
||||||
|
list = []
|
||||||
|
print(" My first python program!")
|
||||||
|
print(" Simple Calculator in python by Puranjay Savar Mattas")
|
||||||
|
print(" Enter 'a' for addition")
|
||||||
|
print(" Enter 's' for substraction")
|
||||||
|
print(" Enter 'm' for multiplication")
|
||||||
|
print(" Enter 'v' for average")
|
||||||
|
print(" Enter 'q' for quit")
|
||||||
|
c = input(" ")
|
||||||
|
if c != 'q':
|
||||||
|
if c == 'a':
|
||||||
|
list = addition()
|
||||||
|
print("Ans = ", list[0], " total inputs ",list[1])
|
||||||
|
elif c == 's':
|
||||||
|
list = subtraction()
|
||||||
|
print("Ans = ", list[0], " total inputs ",list[1])
|
||||||
|
elif c == 'm':
|
||||||
|
list = multiplication()
|
||||||
|
print("Ans = ", list[0], " total inputs ",list[1])
|
||||||
|
elif c == 'v':
|
||||||
|
list = average()
|
||||||
|
print("Ans = ", list[0], " total inputs ",list[1])
|
||||||
|
else:
|
||||||
|
print ("Sorry, invilid character")
|
||||||
|
else:
|
||||||
|
break
|
||||||
139
ContentAggregator.py
Normal file
139
ContentAggregator.py
Normal file
@@ -0,0 +1,139 @@
|
|||||||
|
"""
|
||||||
|
----------------------------------------
|
||||||
|
Content Aggregator
|
||||||
|
----------------------------------------
|
||||||
|
Surfing through different websites and articles
|
||||||
|
in search of good and authentic content is a
|
||||||
|
time-consuming process. This Python project can
|
||||||
|
help you save time looking for content. A content
|
||||||
|
aggregator searches popular websites in search for
|
||||||
|
relevant content and then complies with all the
|
||||||
|
content and provides the user with unbiased content.
|
||||||
|
----------------------------------------
|
||||||
|
"""
|
||||||
|
|
||||||
|
import urllib, os, requests, datetime, subprocess
|
||||||
|
|
||||||
|
# reddit imports
|
||||||
|
import praw, pprint
|
||||||
|
|
||||||
|
# pip install feedparser
|
||||||
|
import feedparser
|
||||||
|
|
||||||
|
# stockexchange
|
||||||
|
from nsetools import Nse
|
||||||
|
|
||||||
|
# Place your CLIENT_ID & CLIENT_SECRET below
|
||||||
|
reddit = praw.Reddit(client_id='XXXXXXX',
|
||||||
|
client_secret='XXXXXXXXXXX',
|
||||||
|
grant_type_access='client_credentials',
|
||||||
|
user_agent='script/1.0')
|
||||||
|
# class Reddit:
|
||||||
|
# def TopNews(self):
|
||||||
|
# Add your favorite NEWS subreddits in the argument as many as you'd like.
|
||||||
|
# for submission in reddit.subreddit('News+WorldNews+UpliftingNews+').top(limit=10):
|
||||||
|
# top_news = reddit.domain(submission).top('month')ls
|
||||||
|
|
||||||
|
# print(top_news)
|
||||||
|
|
||||||
|
"""
|
||||||
|
Each class contains functions which further calls
|
||||||
|
APIs from the neccesary packages and the rest is
|
||||||
|
self explanatory I suppose
|
||||||
|
"""
|
||||||
|
|
||||||
|
class News:
|
||||||
|
def Indian_News(self):
|
||||||
|
newsfeed = feedparser.parse(
|
||||||
|
"http://feeds.feedburner.com/ndtvnews-india-news"
|
||||||
|
)
|
||||||
|
print("Today's News: ")
|
||||||
|
for i in range(0, 20):
|
||||||
|
entry = newsfeed.entries[i]
|
||||||
|
print(entry.title)
|
||||||
|
print(entry.summary)
|
||||||
|
print("------News Link--------")
|
||||||
|
print(entry.link)
|
||||||
|
print("###########################################")
|
||||||
|
print(' ')
|
||||||
|
print('-------------------------------------------------------------------------------------------------------')
|
||||||
|
print(' ')
|
||||||
|
|
||||||
|
class Medium:
|
||||||
|
|
||||||
|
# https://github.com/thepracticaldev/dev.to/issues/28#issuecomment-325544385
|
||||||
|
def medium_programming(self):
|
||||||
|
feed = feedparser.parse(
|
||||||
|
"https://medium.com/feed/tag/programming"
|
||||||
|
)
|
||||||
|
print("Programming Today: ")
|
||||||
|
for i in range(10):
|
||||||
|
entry = feed.entries[i]
|
||||||
|
print(entry.title)
|
||||||
|
print("URL: ")
|
||||||
|
print(entry.link)
|
||||||
|
print("###########################################")
|
||||||
|
print(' ')
|
||||||
|
print('-------------------------------------------------------------------------------------------------------')
|
||||||
|
print(' ')
|
||||||
|
|
||||||
|
def medium_python(self):
|
||||||
|
feed_python = feedparser.parse(
|
||||||
|
"https://medium.com/feed/tag/python"
|
||||||
|
)
|
||||||
|
print("Python Today: ")
|
||||||
|
for i in range(10):
|
||||||
|
entry = feed_python.entries[i]
|
||||||
|
print(entry.title)
|
||||||
|
print("URL: ")
|
||||||
|
print(entry.link)
|
||||||
|
print("###########################################")
|
||||||
|
print(' ')
|
||||||
|
print('-------------------------------------------------------------------------------------------------------')
|
||||||
|
print(' ')
|
||||||
|
|
||||||
|
def medium_developer(self):
|
||||||
|
feed_developer = feedparser.parse(
|
||||||
|
"https://medium.com/feed/tag/developer"
|
||||||
|
)
|
||||||
|
print("Developer News Today: ")
|
||||||
|
for i in range(5):
|
||||||
|
entry = feed_developer.entries[i]
|
||||||
|
print(entry.title)
|
||||||
|
print("URL: ")
|
||||||
|
print(entry.link)
|
||||||
|
print("###########################################")
|
||||||
|
print(' ')
|
||||||
|
print('-------------------------------------------------------------------------------------------------------')
|
||||||
|
print(' ')
|
||||||
|
|
||||||
|
class StockExchange:
|
||||||
|
def nse_stock(self):
|
||||||
|
nse = Nse()
|
||||||
|
print("TOP GAINERS OF YESTERDAY")
|
||||||
|
pprint.pprint(nse.get_top_gainers())
|
||||||
|
print("###########################################")
|
||||||
|
print(' ')
|
||||||
|
print("TOP LOSERS OF YESTERDAY")
|
||||||
|
pprint.pprint(nse.get_top_losers())
|
||||||
|
print("###########################################")
|
||||||
|
print(' ')
|
||||||
|
print('-------------------------------------------------------------------------------------------------------')
|
||||||
|
print(' ')
|
||||||
|
|
||||||
|
#/ objects inititalization
|
||||||
|
# reddit_object = Reddit()
|
||||||
|
|
||||||
|
News_object = News()
|
||||||
|
Medium_object = Medium()
|
||||||
|
StockExchange_object = StockExchange()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
|
||||||
|
# Functions call of each class
|
||||||
|
# reddit_object.TopNews()
|
||||||
|
News_object.Indian_News()
|
||||||
|
Medium_object.medium_python()
|
||||||
|
Medium_object.medium_programming()
|
||||||
|
Medium_object.medium_developer()
|
||||||
|
StockExchange_object.nse_stock()
|
||||||
46
CurrencyConverter.py
Normal file
46
CurrencyConverter.py
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
"""
|
||||||
|
----------------------------------------
|
||||||
|
Currency Converter
|
||||||
|
----------------------------------------
|
||||||
|
This is a straightforward project with a simple GUI.
|
||||||
|
The name quite evidently describes the role of the
|
||||||
|
project is to convert currencies from one unit into another.
|
||||||
|
For example, converting Indian rupee to USD or euro. Tkinter,
|
||||||
|
the standard Python interface can be used to design and develop
|
||||||
|
this application.
|
||||||
|
----------------------------------------
|
||||||
|
"""
|
||||||
|
|
||||||
|
import urllib.request
|
||||||
|
import json
|
||||||
|
|
||||||
|
def currency_converter(currency_from, currency_to, currency_input):
|
||||||
|
yql_base_url = "https://query.yahooapis.com/v1/public/yql"
|
||||||
|
yql_query = 'select%20*%20from%20yahoo.finance.xchange%20where%20pair' \
|
||||||
|
'%20in%20("'+currency_from+currency_to+'")'
|
||||||
|
yql_query_url = yql_base_url + "?q=" + yql_query + "&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys"
|
||||||
|
try:
|
||||||
|
yql_response = urllib.request.urlopen(yql_query_url)
|
||||||
|
try:
|
||||||
|
json_string = str(yql_response.read())
|
||||||
|
json_string = json_string[2:]
|
||||||
|
json_string = json_string[:-1]
|
||||||
|
print(json_string)
|
||||||
|
yql_json = json.loads(json_string)
|
||||||
|
last_rate = yql_json['query']['results']['rate']['Rate']
|
||||||
|
currency_output = currency_input * float(last_rate)
|
||||||
|
return currency_output
|
||||||
|
except (ValueError, KeyError, TypeError):
|
||||||
|
print(yql_query_url)
|
||||||
|
return "JSON format error"
|
||||||
|
except IOError as e:
|
||||||
|
print(str(e))
|
||||||
|
|
||||||
|
currency_input = 1
|
||||||
|
|
||||||
|
# currency codes : http://en.wikipedia.org/wiki/ISO_4217
|
||||||
|
|
||||||
|
currency_from = "USD"
|
||||||
|
currency_to = "TRY"
|
||||||
|
rate = currency_converter(currency_from, currency_to, currency_input)
|
||||||
|
print(rate)
|
||||||
77
DirectoryTreeGenerator.py
Normal file
77
DirectoryTreeGenerator.py
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
"""
|
||||||
|
----------------------------------------
|
||||||
|
Directory Tree Generator
|
||||||
|
----------------------------------------
|
||||||
|
This project is useful for visualizing the
|
||||||
|
relationship between files and directories
|
||||||
|
and making their positioning easy to comprehend.
|
||||||
|
Python OS library can be used to list the
|
||||||
|
files and directories within a specific directory.
|
||||||
|
The excellent frameworks of this project are Docopt
|
||||||
|
and Argparse.
|
||||||
|
----------------------------------------
|
||||||
|
Library to import for the project:
|
||||||
|
`pip install walkdir`
|
||||||
|
----------------------------------------
|
||||||
|
"""
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import os
|
||||||
|
from walkdir import filtered_walk
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(description='Print the directory-tree code for the LaTeX dirtree package.')
|
||||||
|
parser.add_argument(dest='path', type=str, help="Root directory of the tree")
|
||||||
|
parser.add_argument('-d', '--maxDepth', dest='maxDepth', type=int, help="Max depth for tree expansion")
|
||||||
|
parser.add_argument('-H', '--includeHidden', dest='includeHidden', action='store_true', help='Include hidden files')
|
||||||
|
parser.add_argument('-S', '--includeSystem', dest='includeSystem', action='store_true', help='Include system files')
|
||||||
|
system_file_names = [".DS_Store"]
|
||||||
|
|
||||||
|
# Delete trailing / in rootDir which can lead to errors
|
||||||
|
def delete_trailing_slash(path_name):
|
||||||
|
while path_name.endswith('/'):
|
||||||
|
path_name = path_name[:-1]
|
||||||
|
return path_name
|
||||||
|
|
||||||
|
# Count how many levels deep is the directory with respect to dirRoot
|
||||||
|
def get_relative_depth(dir_path, level_offset):
|
||||||
|
return dir_path.count(os.path.sep) - level_offset
|
||||||
|
|
||||||
|
# Escape illegal symbols for LaTeX
|
||||||
|
def escape_illegal(name):
|
||||||
|
illegal_char_array = ['\\', '&', '%', '$', '#', '_', '{', '}', '~', '^']
|
||||||
|
for char in illegal_char_array:
|
||||||
|
name = name.replace(char, "\\" + char)
|
||||||
|
return name
|
||||||
|
rootDir = delete_trailing_slash(parser.parse_args().path)
|
||||||
|
includeHidden = parser.parse_args().includeHidden
|
||||||
|
includeSystem = parser.parse_args().includeSystem
|
||||||
|
maxDepth = parser.parse_args().maxDepth
|
||||||
|
|
||||||
|
# if the directory exists
|
||||||
|
if os.path.isdir(rootDir) and os.path.exists(rootDir):
|
||||||
|
indentChar = " "
|
||||||
|
|
||||||
|
# Depth of the root (i.e. number of "/")
|
||||||
|
levelOffset = rootDir.count(os.path.sep) - 1
|
||||||
|
|
||||||
|
# Create filter
|
||||||
|
excluded_filter = []
|
||||||
|
if not includeHidden:
|
||||||
|
excluded_filter.append(".*")
|
||||||
|
if not includeSystem:
|
||||||
|
excluded_filter += system_file_names
|
||||||
|
print ("\dirtree{%")
|
||||||
|
for dirName, subdirList, fileList in sorted(filtered_walk(rootDir, depth=maxDepth, excluded_dirs=excluded_filter,
|
||||||
|
excluded_files=excluded_filter)):
|
||||||
|
level = get_relative_depth(dirName, levelOffset)
|
||||||
|
baseName = os.path.basename(dirName)
|
||||||
|
if level == 1: # for the first level only print the whole path
|
||||||
|
print(indentChar + "." + str(level) + " {" + escape_illegal(dirName) + "} .")
|
||||||
|
else:
|
||||||
|
print(indentChar * level + "." + str(level) + " {" + escape_illegal((os.path.basename(dirName))) + "} .")
|
||||||
|
level += 1
|
||||||
|
for fileName in sorted(fileList):
|
||||||
|
print(indentChar * level + "." + str(level) + " {" + escape_illegal(fileName) + "} .")
|
||||||
|
print ("}")
|
||||||
|
else:
|
||||||
|
print ("Error: root directory not found")
|
||||||
6
Order Of Programs (AP).md
Normal file
6
Order Of Programs (AP).md
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
# Advanced Projects:
|
||||||
|
|
||||||
|
| Serial No. | Program Name |
|
||||||
|
|------------|--------------|
|
||||||
|
|1 | [ContentAggregator.py](https://git.psmattas.com/psmattas/Python-Projects/src/branch/All-Projects/ContentAggregator.py) |
|
||||||
|
|2 | [PlagiarismChecker.py](https://git.psmattas.com/psmattas/Python-Projects/src/branch/All-Projects/PlagiarismChecker.py) |
|
||||||
@@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
| Serial No. | Program Name |
|
| Serial No. | Program Name |
|
||||||
|------------|--------------|
|
|------------|--------------|
|
||||||
|1 | [MadLabGenerator](https://github.com/psavarmattas/Python-Projects/blob/master/MadLabGenerator.py) |
|
|1 | [MadLabGenerator](https://git.psmattas.com/psmattas/Python-Projects/src/branch/All-Projects/MadLabGenerator.py) |
|
||||||
|2 | [NumberGuessing](https://github.com/psavarmattas/Python-Projects/blob/master/NumberGuessing.py) |
|
|2 | [NumberGuessing](https://git.psmattas.com/psmattas/Python-Projects/src/branch/All-Projects/NumberGuessing.py) |
|
||||||
|3 | [RockPaperScisors](https://github.com/psavarmattas/Python-Projects/blob/master/RockPaperScissors.py) |
|
|3 | [RockPaperScisors](https://git.psmattas.com/psmattas/Python-Projects/src/branch/All-Projects/RockPaperScissors.py) |
|
||||||
|4 | [WebsiteBlocker](https://github.com/psavarmattas/Python-Projects/blob/master/WebsiteBlocker.py) |
|
|4 | [WebsiteBlocker](https://git.psmattas.com/psmattas/Python-Projects/src/branch/All-Projects/WebsiteBlocker.py) |
|
||||||
|5 | [BinarySearch](https://github.com/psavarmattas/Python-Projects/blob/master/BinarySearch.py) |
|
|5 | [BinarySearch](https://git.psmattas.com/psmattas/Python-Projects/src/branch/All-Projects/BinarySearch.py) |
|
||||||
9
Order Of Programs(IP).MD
Normal file
9
Order Of Programs(IP).MD
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# Intermediate Projects:
|
||||||
|
|
||||||
|
| Serial No. | Program Name |
|
||||||
|
|------------|--------------|
|
||||||
|
|1 | [Calculator](https://git.psmattas.com/psmattas/Python-Projects/src/branch/All-Projects/Calculator.py) |
|
||||||
|
|2 | [AlarmClock](https://git.psmattas.com/psmattas/Python-Projects/src/branch/All-Projects/AlarmClock.py) & [youtube_alarm_videos](https://git.psmattas.com/psmattas/Python-Projects/src/branch/All-Projects/youtube_alarm_videos.txt) |
|
||||||
|
|3 | [TikTacToe](https://git.psmattas.com/psmattas/Python-Projects/src/branch/All-Projects/master/TikTacToe.py) |
|
||||||
|
|4 | [DirectoryTreeGenerator](https://git.psmattas.com/psmattas/Python-Projects/src/branch/All-Projects/master/DirectoryTreeGenerator.py) |
|
||||||
|
|5 | [CurrencyConverter](https://git.psmattas.com/psmattas/Python-Projects/src/branch/All-Projects/master/CurrencyConverter.py) |
|
||||||
107
PlagiarismChecker.py
Normal file
107
PlagiarismChecker.py
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
"""
|
||||||
|
----------------------------------------
|
||||||
|
Plagiarism Checker
|
||||||
|
----------------------------------------
|
||||||
|
With content creation and blogging one of
|
||||||
|
the good businesses in the market everyone
|
||||||
|
wants to try their hands on this but some
|
||||||
|
lack sufficient funds to give their articles
|
||||||
|
a free plagiarism check as mostly plagiarism
|
||||||
|
checkers do not come for free. Building a
|
||||||
|
Python plagiarism checker could be built here
|
||||||
|
using a natural language processing library
|
||||||
|
along with the search API to search the first
|
||||||
|
few pages of Google and detect plagiarism if any.
|
||||||
|
----------------------------------------
|
||||||
|
"""
|
||||||
|
import re
|
||||||
|
import nltk; nltk.download('punkt')
|
||||||
|
from nltk.util import ngrams, pad_sequence, everygrams
|
||||||
|
from nltk.tokenize import word_tokenize
|
||||||
|
from nltk.lm import MLE, WittenBellInterpolated
|
||||||
|
import numpy as np
|
||||||
|
import plotly.graph_objects as go
|
||||||
|
from scipy.ndimage import gaussian_filter
|
||||||
|
|
||||||
|
# Training data file
|
||||||
|
train_data_file = ""
|
||||||
|
|
||||||
|
# read training data
|
||||||
|
with open(train_data_file) as f:
|
||||||
|
train_text = f.read().lower()
|
||||||
|
|
||||||
|
# apply preprocessing (remove text inside square and curly brackets and rem punc)
|
||||||
|
train_text = re.sub(r"\[.*\]|\{.*\}", "", train_text)
|
||||||
|
train_text = re.sub(r'[^\w\s]', "", train_text)
|
||||||
|
|
||||||
|
# set ngram number
|
||||||
|
n = 4
|
||||||
|
|
||||||
|
# pad the text and tokenize
|
||||||
|
training_data = list(pad_sequence(word_tokenize(train_text), n,
|
||||||
|
pad_left=True,
|
||||||
|
left_pad_symbol="<s>"))
|
||||||
|
|
||||||
|
# generate ngrams
|
||||||
|
ngrams = list(everygrams(training_data, max_len=n))
|
||||||
|
print("Number of ngrams:", len(ngrams))
|
||||||
|
|
||||||
|
# build ngram language models
|
||||||
|
model = WittenBellInterpolated(n)
|
||||||
|
model.fit([ngrams], vocabulary_text=training_data)
|
||||||
|
print(model.vocab)
|
||||||
|
|
||||||
|
# testing data file
|
||||||
|
test_data_file = ""
|
||||||
|
|
||||||
|
# Read testing data
|
||||||
|
with open(test_data_file) as f:
|
||||||
|
test_text = f.read().lower()
|
||||||
|
test_text = re.sub(r'[^\w\s]', "", test_text)
|
||||||
|
|
||||||
|
# Tokenize and pad the text
|
||||||
|
testing_data = list(pad_sequence(word_tokenize(test_text), n,
|
||||||
|
pad_left=True,
|
||||||
|
left_pad_symbol="<s>"))
|
||||||
|
print("Length of test data:", len(testing_data))
|
||||||
|
|
||||||
|
# assign scores
|
||||||
|
scores = []
|
||||||
|
for i, item in enumerate(testing_data[n-1:]):
|
||||||
|
s = model.score(item, testing_data[i:i+n-1])
|
||||||
|
scores.append(s)
|
||||||
|
|
||||||
|
scores_np = np.array(scores)
|
||||||
|
|
||||||
|
# set width and height
|
||||||
|
width = 8
|
||||||
|
height = np.ceil(len(testing_data)/width).astype("int32")
|
||||||
|
print("Width, Height:", width, ",", height)
|
||||||
|
|
||||||
|
# copy scores to rectangular blank array
|
||||||
|
a = np.zeros(width*height)
|
||||||
|
a[:len(scores_np)] = scores_np
|
||||||
|
diff = len(a) - len(scores_np)
|
||||||
|
|
||||||
|
# apply gaussian smoothing for aesthetics
|
||||||
|
a = gaussian_filter(a, sigma=1.0)
|
||||||
|
|
||||||
|
# reshape to fit rectangle
|
||||||
|
a = a.reshape(-1, width)
|
||||||
|
|
||||||
|
# format labels
|
||||||
|
labels = [" ".join(testing_data[i:i+width]) for i in range(n-1, len(testing_data), width)]
|
||||||
|
labels_individual = [x.split() for x in labels]
|
||||||
|
labels_individual[-1] += [""]*diff
|
||||||
|
labels = [f"{x:60.60}" for x in labels]
|
||||||
|
|
||||||
|
# create heatmap
|
||||||
|
fig = go.Figure(data=go.Heatmap(
|
||||||
|
z=a, x0=0, dx=1,
|
||||||
|
y=labels, zmin=0, zmax=1,
|
||||||
|
customdata=labels_individual,
|
||||||
|
hovertemplate='%{customdata} <br><b>Score:%{z:.3f}<extra></extra>',
|
||||||
|
colorscale="burg"))
|
||||||
|
fig.update_layout({"height":height*28, "width":1000, "font":{"family":"Courier New"}})
|
||||||
|
fig['layout']['yaxis']['autorange'] = "reversed"
|
||||||
|
fig.show()
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
# Introduction:
|
# Introduction:
|
||||||
_`Last Updated: May 04' 2021`_
|
_`Last Updated: May 13' 2021`_
|
||||||
|
|
||||||
Here are programs that every budding programmer who is learning to code in Python should start with. These programs are a compilation of many different types of programs and levels of programming you should try. You can use the table in "Order Of Programs" file to find the order in which it is best to program in.
|
Here are programs that every budding programmer who is learning to code in Python should start with. These programs are a compilation of many different types of programs and levels of programming you should try. You can use the table in "Order Of Programs" file to find the order in which it is best to program in.
|
||||||
|
|
||||||
|
|||||||
134
TikTacToe.py
Normal file
134
TikTacToe.py
Normal file
@@ -0,0 +1,134 @@
|
|||||||
|
"""
|
||||||
|
----------------------------------------
|
||||||
|
Tic Tac Toe
|
||||||
|
----------------------------------------
|
||||||
|
This game is very popular amongst all of us a
|
||||||
|
nd even fun to build as a Python project. I am
|
||||||
|
pretty sure most of us know how to play it but
|
||||||
|
let me give a quick brush up.
|
||||||
|
|
||||||
|
It is a two-player game and consists of a nine-square
|
||||||
|
grid. Each player chooses their move and with O or X
|
||||||
|
and marks their square one at each chance. The player
|
||||||
|
who succeeds in making their marks all in one line whether
|
||||||
|
diagonally, horizontally, or vertically wins. The challenge
|
||||||
|
for the other player is to block the game for their opponent
|
||||||
|
and also to make their chain.
|
||||||
|
|
||||||
|
For building this project in Python who can use the Pygame
|
||||||
|
Python library that is loaded with all computer graphics and sounds.
|
||||||
|
----------------------------------------
|
||||||
|
"""
|
||||||
|
|
||||||
|
import random
|
||||||
|
import sys
|
||||||
|
|
||||||
|
board=[i for i in range(0,9)]
|
||||||
|
player, computer = '',''
|
||||||
|
|
||||||
|
# Corners, Center and Others, respectively
|
||||||
|
moves=((1,7,3,9),(5,),(2,4,6,8))
|
||||||
|
|
||||||
|
# Winner combinations
|
||||||
|
winners=((0,1,2),(3,4,5),(6,7,8),(0,3,6),(1,4,7),(2,5,8),(0,4,8),(2,4,6))
|
||||||
|
|
||||||
|
# Table
|
||||||
|
tab=range(1,10)
|
||||||
|
def print_board():
|
||||||
|
x=1
|
||||||
|
for i in board:
|
||||||
|
end = ' | '
|
||||||
|
if x%3 == 0:
|
||||||
|
end = ' \n'
|
||||||
|
if i != 1: end+='---------\n';
|
||||||
|
char=' '
|
||||||
|
if i in ('X','O'): char=i;
|
||||||
|
x+=1
|
||||||
|
print(char,end=end)
|
||||||
|
|
||||||
|
def select_char():
|
||||||
|
chars=('X','O')
|
||||||
|
if random.randint(0,1) == 0:
|
||||||
|
return chars[::-1]
|
||||||
|
return chars
|
||||||
|
|
||||||
|
def can_move(brd, player, move):
|
||||||
|
if move in tab and brd[move-1] == move-1:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def can_win(brd, player, move):
|
||||||
|
places=[]
|
||||||
|
x=0
|
||||||
|
for i in brd:
|
||||||
|
if i == player: places.append(x);
|
||||||
|
x+=1
|
||||||
|
win=True
|
||||||
|
for tup in winners:
|
||||||
|
win=True
|
||||||
|
for ix in tup:
|
||||||
|
if brd[ix] != player:
|
||||||
|
win=False
|
||||||
|
break
|
||||||
|
if win == True:
|
||||||
|
break
|
||||||
|
return win
|
||||||
|
|
||||||
|
def make_move(brd, player, move, undo=False):
|
||||||
|
if can_move(brd, player, move):
|
||||||
|
brd[move-1] = player
|
||||||
|
win=can_win(brd, player, move)
|
||||||
|
if undo:
|
||||||
|
brd[move-1] = move-1
|
||||||
|
return (True, win)
|
||||||
|
return (False, False)
|
||||||
|
|
||||||
|
# AI goes here
|
||||||
|
def computer_move():
|
||||||
|
move=-1
|
||||||
|
|
||||||
|
# If I can win, others do not matter.
|
||||||
|
for i in range(1,10):
|
||||||
|
if make_move(board, computer, i, True)[1]:
|
||||||
|
move=i
|
||||||
|
break
|
||||||
|
if move == -1:
|
||||||
|
|
||||||
|
# If player can win, block him.
|
||||||
|
for i in range(1,10):
|
||||||
|
if make_move(board, player, i, True)[1]:
|
||||||
|
move=i
|
||||||
|
break
|
||||||
|
|
||||||
|
if move == -1:
|
||||||
|
# Otherwise, try to take one of desired places.
|
||||||
|
for tup in moves:
|
||||||
|
for mv in tup:
|
||||||
|
if move == -1 and can_move(board, computer, mv):
|
||||||
|
move=mv
|
||||||
|
break
|
||||||
|
return make_move(board, computer, move)
|
||||||
|
|
||||||
|
def space_exist():
|
||||||
|
return board.count('X') + board.count('O') != 9
|
||||||
|
player, computer = select_char()
|
||||||
|
print('Player is [%s] and computer is [%s]' % (player, computer))
|
||||||
|
result='%%% Deuce ! %%%'
|
||||||
|
while space_exist():
|
||||||
|
print_board()
|
||||||
|
print('#Make your move ! [1-9] : ', end='')
|
||||||
|
move = int(input())
|
||||||
|
moved, won = make_move(board, player, move)
|
||||||
|
if not moved:
|
||||||
|
print(' >> Invalid number ! Try again !')
|
||||||
|
continue
|
||||||
|
|
||||||
|
if won:
|
||||||
|
result='*** Congratulations ! You won ! ***'
|
||||||
|
break
|
||||||
|
elif computer_move()[1]:
|
||||||
|
result='=== You lose ! =='
|
||||||
|
break;
|
||||||
|
|
||||||
|
print_board()
|
||||||
|
print(result)
|
||||||
1
youtube_alarm_videos.txt
Normal file
1
youtube_alarm_videos.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
https://www.youtube.com/channel/UCz6SDxk2KQqJAD6Ra_YPm6A
|
||||||
Reference in New Issue
Block a user