From 494bf76bb143a654f4730c340cd4d707c5a1c7c8 Mon Sep 17 00:00:00 2001 From: coderjedi <42613146+coderjedi@users.noreply.github.com> Date: Thu, 27 Sep 2018 00:54:30 +0530 Subject: [PATCH 1/2] Add files via upload --- PROJECT.py | 136 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 PROJECT.py diff --git a/PROJECT.py b/PROJECT.py new file mode 100644 index 0000000..3946d4d --- /dev/null +++ b/PROJECT.py @@ -0,0 +1,136 @@ +import random + + +class game: + dmain = [] + name = "" + + def __init__(self, name): + self.name = name + def shuffle(self): + random.shuffle(self.dmain) + +#block of code to form a deck of 52 cards which will then be distributed +class dmainform: + dmain = [] + x=0 + def dform(self): + for i in range(4): + for j in range(13): + self.dmain.append(self.x) + self.x+=1 + random.shuffle(self.dmain) + + +class match_a: + nround = 0 + nclash = 0 + winner = "" + plyrdsub = [] + compdsub = [] + def __init__(self): + self.distrib() +#code to distribute 26 cards each to player and computer + def distrib(self): + cards = dmainform() + cards.dform() + name = input("Enter Player Name ") + print("\n") + p1 = game(name) + comp = game("Computer") + + for i in range(26): + p1.dmain = cards.dmain[: 26] + comp.dmain= cards.dmain[26: 52] + + + self.plyrdsub = p1.dmain + self.compdsub = comp.dmain + self.playername = p1.name +#actual match takes plae in this code + def startmatch(self): + while self.plyrdsub != [] and self.compdsub != []: + self.nround = self.nround + 1 + if self.plyrdsub[0] > self.compdsub[0]: + temp1 = self.plyrdsub[0] + temp2 = self.compdsub[0] + self.plyrdsub = self.plyrdsub[1:] + self.plyrdsub.append(temp1) + self.plyrdsub.append(temp2) + self.compdsub = self.compdsub[1:] + + elif self.plyrdsub[0] < self.compdsub[0]: + temp2 = self.plyrdsub[0] + temp1 = self.compdsub[0] + self.compdsub = self.compdsub[1:] + self.compdsub.append(temp1) + self.compdsub.append(temp2) + self.plyrdsub = self.plyrdsub[1:] + else: #code for war + if len(self.plyrdsub) >= 4 and len(self.compdsub) >= 4: + self.nclash = self.nclash + 1 + sum1 = self.plyrdsub[1] + self.plyrdsub[2] + self.plyrdsub[3] + sum2 = self.compdsub[1] + self.compdsub[2] + self.compdsub[3] + if sum1 > sum2: + tempa = self.plyrdsub[0] + tempb = self.plyrdsub[1] + tempc = self.plyrdsub[2] + tempd = self.plyrdsub[3] + tempe = self.compdsub[0] + tempf = self.compdsub[1] + tempg = self.compdsub[2] + temph = self.compdsub[3] + self.plyrdsub = self.plyrdsub[4:] + self.plyrdsub.append(tempa) + self.plyrdsub.append(tempb) + self.plyrdsub.append(tempc) + self.plyrdsub.append(tempd) + self.plyrdsub.append(tempe) + self.plyrdsub.append(tempf) + self.plyrdsub.append(tempg) + self.plyrdsub.append(temph) + self.compdsub = self.compdsub[4:] + + elif (sum1 < sum2): + tempa = self.plyrdsub[0] + tempb = self.plyrdsub[1] + tempc = self.plyrdsub[2] + tempd = self.plyrdsub[3] + tempe = self.compdsub[0] + tempf = self.compdsub[1] + tempg= self.compdsub[2] + temph = self.compdsub[3] + self.compdsub = self.compdsub[4:] + self.compdsub.append(tempe) + self.compdsub.append(tempf) + self.compdsub.append(tempg) + self.compdsub.append(temph) + self.compdsub.append(tempa) + self.computerdeck.append(tempb) + self.computerdeck.append(tempc) + self.computerdeck.append(tempd) + self.plyrdsub = self.plyrdsub[4:] + + else: + self.plyrdsub = self.plyrdsub[4:] + self.compdsub = self.compdsub[4:] + + else: + if len(self.plyrdsub) >= 4: + self.winner = "player" + break + elif len(self.compdsub) >= 4: + self.winner = "computer" + break + + + print("Number of Rounds: " + str(self.nround)) + print("Number of Wars: " + str(self.nclash)) + if self.plyrdsub == [] or self.winner == "computer": + print("The Computer is the winner") + if self.compdsub == [] or self.winner == "player": + print(str(self.playername) + " is the winner") + +#invoking +Game = match_a() +Game.startmatch() \ No newline at end of file From de67c427808bf8eca221b356d7e2c793aadef43b Mon Sep 17 00:00:00 2001 From: coderjedi <42613146+coderjedi@users.noreply.github.com> Date: Fri, 9 Nov 2018 22:27:22 +0530 Subject: [PATCH 2/2] adding google login project --- google/db.sqlite3 | Bin 0 -> 192512 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 123 bytes .../__pycache__/settings.cpython-36.pyc | Bin 0 -> 2878 bytes google/google/__pycache__/urls.cpython-36.pyc | Bin 0 -> 1233 bytes .../google/__pycache__/views.cpython-36.pyc | Bin 0 -> 287 bytes google/google/home.html | 9 ++ google/google/login.html | 14 ++ google/google/settings.py | 134 ++++++++++++++++++ google/google/urls.py | 28 ++++ google/google/views.py | 5 + google/google/wsgi.py | 16 +++ google/manage.py | 10 ++ 12 files changed, 216 insertions(+) create mode 100644 google/db.sqlite3 create mode 100644 google/google/__pycache__/__init__.cpython-36.pyc create mode 100644 google/google/__pycache__/settings.cpython-36.pyc create mode 100644 google/google/__pycache__/urls.cpython-36.pyc create mode 100644 google/google/__pycache__/views.cpython-36.pyc create mode 100644 google/google/home.html create mode 100644 google/google/login.html create mode 100644 google/google/settings.py create mode 100644 google/google/urls.py create mode 100644 google/google/views.py create mode 100644 google/google/wsgi.py create mode 100644 google/manage.py diff --git a/google/db.sqlite3 b/google/db.sqlite3 new file mode 100644 index 0000000000000000000000000000000000000000..499e81c33559cf090181af977dd7fbbc884426ab GIT binary patch literal 192512 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 b0w4eaAOHd&00JNY0w4eaAOHeyiopK?D9DBA literal 0 HcmV?d00001 diff --git a/google/google/__pycache__/__init__.cpython-36.pyc b/google/google/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a54d80c57afa743274e2a941c3c3816dc604c5dc GIT binary patch literal 123 zcmXr!<>fl8zAl;p2p)q77+?f49Dul(1xTbY1T$zd`mJOr0tq9CUmDIn&Ma41h s3Z@38G3ojF={cz|Dn33lFS8^*Uaz3?7Kcr4eoARhsvXFLVjyM!09{@iEC2ui literal 0 HcmV?d00001 diff --git a/google/google/__pycache__/settings.cpython-36.pyc b/google/google/__pycache__/settings.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1dcf3fe02b7fee7358b3aa4eeac3fa089fb9cb17 GIT binary patch literal 2878 zcmb6b*>clX)OHlxF(g1(!aAcCN-z*Pdq}4XiY*)uwv|Q>X>Xa)C_dN9b+kCTGAVlH zrQguu2l~)7?yWVgw3w@=ZEABnuNH2Lj2PDKZ6QJ_|2D(Y7URC?c1~|& zIDn2Q^Tbz%)u;Ub`0{9H#L>Ul8L4Kl?A%@7q~;QAtS)vopPHTJjaBQb)wMM*u?_~WruscF)4mlnzjvIxrj_sS;0VYry7YHg2Wgd>zNCjWM|%4<3vg`B+8* zdeAq6hhHG+(PJDjKX^2dec$d;InJ;gl_^*m6Mmn^;-w?`eFfu!PR z4Wg!b_ux#yK^?2{noXp?NHQ|H{BAfyAEbA9U#Z~&wYHL82<8T!PPoY=qu0YOi$@^L z0qq!l%YVNh;NbKg{MceXT?qf35*BA@v+-&a$T`s z5IbPcw~p+exY?{MY5V=g_Wo~0!JEX=c-aW#B9KQ=yc6bh9bc`w9%ft~3O&O=#3o># zgPSJI83#P3~gr4MFL3oq_#)mmh*K467H*JVyPRgqhA6rC1ck974N^suk)R`eHgy@pH` zXLh-Pc6$4N!3i_)x6rHHpzWF`8S8eG@Gr{Uhi_I__(OLwr+QJ~pQJCRWUBz~f z(b)vuRWKb&IlcwCqp9VZT-W0Ws;XM8E4mteS&kA##80!6bpDz0?nl*$z`FgICrk(#A)85`o~&?+M_6`3 iNGO?6`b;*Jjt*+)BKnm=b|N~3JW`UA71DSzLi#@ymdh&u literal 0 HcmV?d00001 diff --git a/google/google/__pycache__/urls.cpython-36.pyc b/google/google/__pycache__/urls.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9216f3a27a20c5c740db3d21e5346fcdd302db59 GIT binary patch literal 1233 zcma)6&2G~`5Vjr1PTVAfmIv5Fq|{QdDOC?dfIt<6BE$jcB~&q6?5CfDuHUt>)HAF=9?L>_uFmn%i!DF=eA+|FgC6x$dBNWpI{-z z$RH-MQj=LD%hYl$tucFKm$IGKnKN=gt`jG9m^*S!gIdI;_PjA~ezrhvP-pIuCh;z6 zu-k&&7HO?^ZQ3Foa)Wd)tkU-;b;-82P3xmJ*?DdFxA1q%Fs7VOQ;JSry+DUNnCS0%*0_7>i zk|Igz&_i&|l*;8W3<-~AK;}4`@?7vaja3kH7Sb%-3+{!A=SeI>?HodS8G27XVg^`p z=p8MxShK6rmY{n9dQ1qy8A@2rg&HC>5u71*9^pJ+DL4G@uKdfAp@5AFAryAIqCf8S z2dm0voY4WwFryFpTJHPaVTz@^eFmkG4cve6;A%#NrV^B`S`&H(SS9~!^U)CjmXU_p z^{;R`&f;`Il57f%C^PEvVi@Rudvuoa>6(ykHNp~UU8FZ_cE@E~5tISL)miASk0z@@ z469~W!-Oejlb{5uW}(|TSVxt3``78drVzpe*6Dsz@_p|Tj*j7*MGc_gRmX%SnHI|K zUYeEF)}vawTg3o&vV7Tau9cdcc1;O?5g0Fe}}Ul*Osz`*brh~a<<$Z`PUVhJFT!jQt4!;s4u#mLBz!j!_?!Vtxj!V=7& z$@&r~%b>}4i>)X%FD11onGwVX0uap%#Lhrm%mpM$7;1oqG&2D;G5J+-X5{Cl>SdJV z=4dh&fvf@=!CsVFSejZ~vXY^Q1t{`M)!8a0v^ce>IL2MU)W9?*JwHD^ClyAOWu}%F z>lIYqVgVTi(ohUChk>z(4M_TFGT#zN$x6&i&(|x?$S*2ME-fhrTLhK{TYyBc0=3-Y Tu*uC&Da}c>1Gyb+7!NZ5U{^dY literal 0 HcmV?d00001 diff --git a/google/google/home.html b/google/google/home.html new file mode 100644 index 0000000..19fb2c6 --- /dev/null +++ b/google/google/home.html @@ -0,0 +1,9 @@ +{% extends "layout.html" %} + +{% block content %} + {% if user.is_authenticated %} +

Hello, {{ user.username }}

+ {% else %} + Log in + {% endif %} +{% endblock content %} \ No newline at end of file diff --git a/google/google/login.html b/google/google/login.html new file mode 100644 index 0000000..26b0d7f --- /dev/null +++ b/google/google/login.html @@ -0,0 +1,14 @@ +{% extends "layout.html" %} + + +{% block content %} +

Login

+
+ {% csrf_token %} + {{ form.as_p }} + +
+
+

-- OR --

+ Login with Google
+{% endblock %} \ No newline at end of file diff --git a/google/google/settings.py b/google/google/settings.py new file mode 100644 index 0000000..5a97362 --- /dev/null +++ b/google/google/settings.py @@ -0,0 +1,134 @@ +""" +Django settings for google project. + +Generated by 'django-admin startproject' using Django 1.9. + +For more information on this file, see +https://docs.djangoproject.com/en/1.9/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/1.9/ref/settings/ +""" + +import os + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/1.9/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'n#69eg1d740f9@gf274l!455rzl#a5pv7e0q6)$w6qzm&w#6-*' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'social_django' +] + +MIDDLEWARE_CLASSES = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] + +ROOT_URLCONF = 'google.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + 'social_django.context_processors.backends', + 'social_django.context_processors.login_redirect', + ], + }, + }, +] +AUTHENTICATION_BACKENDS = ( + 'social_core.backends.open_id.OpenIdAuth', + 'social_core.backends.google.GoogleOpenId', + 'social_core.backends.google.GoogleOAuth2', + 'django.contrib.auth.backends.ModelBackend', +) +WSGI_APPLICATION = 'google.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/1.9/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), + } +} + + +# Password validation +# https://docs.djangoproject.com/en/1.9/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/1.9/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/1.9/howto/static-files/ + +STATIC_URL = '/static/' +LOGIN_URL = 'login' +LOGIN_REDIRECT_URL = 'home' + +SOCIAL_AUTH_GOOGLE_OAUTH2_KEY ='760967042925-b3k2g3jlf6dqrh8lktjlkvrp1b5i5g8c.apps.googleusercontent.com' +SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = 'EmVZmziKBkmQsgND1SWuMHWx' diff --git a/google/google/urls.py b/google/google/urls.py new file mode 100644 index 0000000..ca49269 --- /dev/null +++ b/google/google/urls.py @@ -0,0 +1,28 @@ +"""google URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/1.9/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') +Including another URLconf + 1. Add an import: from blog import urls as blog_urls + 2. Import the include() function: from django.conf.urls import url, include + 3. Add a URL to urlpatterns: url(r'^blog/', include(blog_urls)) +""" +from django.conf.urls import url +from django.contrib import admin +from django.contrib.auth import views +from .views import home + +urlpatterns = [ + url(r'^admin/', admin.site.urls), + url(r'^login/$', views.login, name='login'), + url(r'^logout/$', views.logout, name='logout'), + url(r'^auth/', include('social_django.urls', namespace='social')), # <- Here + url(r'^$', home, name='home'), +] diff --git a/google/google/views.py b/google/google/views.py new file mode 100644 index 0000000..22055d5 --- /dev/null +++ b/google/google/views.py @@ -0,0 +1,5 @@ +from django.shortcuts import render + + +def home(request): + return render(request, 'home.html') diff --git a/google/google/wsgi.py b/google/google/wsgi.py new file mode 100644 index 0000000..ef37710 --- /dev/null +++ b/google/google/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for google project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/1.9/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "google.settings") + +application = get_wsgi_application() diff --git a/google/manage.py b/google/manage.py new file mode 100644 index 0000000..04ce98f --- /dev/null +++ b/google/manage.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python +import os +import sys + +if __name__ == "__main__": + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "google.settings") + + from django.core.management import execute_from_command_line + + execute_from_command_line(sys.argv)