Olli Graf
5 months ago
19 changed files with 1117 additions and 5 deletions
@ -0,0 +1,26 @@ |
|||||
|
#! /usr/bin/python3 |
||||
|
|
||||
|
import argparse |
||||
|
|
||||
|
def do_test(): |
||||
|
print('do_test()') |
||||
|
|
||||
|
parser = argparse.ArgumentParser(prog='action',description='Demonstration der Action',epilog='Ende der Hilfe') |
||||
|
|
||||
|
parser.add_argument('--update',help='update Hilfe') |
||||
|
parser.add_argument('--dry-run',help='dry-run Hilfe') |
||||
|
parser.add_argument('--verbose','-v', action='count') |
||||
|
parser.add_argument('--true', action='store_true') |
||||
|
parser.add_argument('-append', action='append', nargs=1) |
||||
|
parser.add_argument('--false', action='store_false') |
||||
|
parser.add_argument('--store', action='store') |
||||
|
parser.add_argument('--const', action = 'store_const', const=19) |
||||
|
|
||||
|
parser.add_argument('--delete', action = argparse.BooleanOptionalAction) |
||||
|
#parser.add_argument('--no-delete', action = argparse.BooleanOptionalAction) |
||||
|
|
||||
|
|
||||
|
args=parser.parse_args() |
||||
|
print(f'args={args}') |
||||
|
print(f'verbose={args.verbose}') |
||||
|
|
@ -0,0 +1,11 @@ |
|||||
|
#! /usr/bin/python3 |
||||
|
|
||||
|
import argparse |
||||
|
|
||||
|
parser = argparse.ArgumentParser(prog='HILFE',description='Demonstration der Hilfeseite',epilog='Ende der Hilfe im Epilog') |
||||
|
|
||||
|
parser.add_argument('--update',help='update Hilfe') |
||||
|
parser.add_argument('--dry-run',help='dry-run Hilfe') |
||||
|
|
||||
|
args=parser.parse_args() |
||||
|
|
@ -0,0 +1,3 @@ |
|||||
|
bin |
||||
|
lib |
||||
|
*.jpg |
@ -0,0 +1,35 @@ |
|||||
|
#! /usr/bin/python |
||||
|
|
||||
|
from picamera2 import Picamera2 |
||||
|
from libcamera import controls |
||||
|
from time import sleep |
||||
|
import sys |
||||
|
|
||||
|
to_file='' |
||||
|
picam = Picamera2() |
||||
|
|
||||
|
def take_still(filename): |
||||
|
config = picam.create_preview_configuration() |
||||
|
picam.configure(config) |
||||
|
|
||||
|
picam.start() |
||||
|
picam.set_controls({"AfMode": controls.AfModeEnum.Continuous}) |
||||
|
sleep(5) |
||||
|
picam.capture_file(filename) |
||||
|
picam.close() |
||||
|
|
||||
|
def parseArgs(argv): |
||||
|
global to_file |
||||
|
count = 0 |
||||
|
for arg in argv: |
||||
|
if arg == '-o': |
||||
|
to_file = argv[count+1] |
||||
|
|
||||
|
count += 1 |
||||
|
|
||||
|
if __name__ =='__main__': |
||||
|
parseArgs(sys.argv) |
||||
|
print(f'to_file={to_file}') |
||||
|
take_still(to_file) |
||||
|
|
||||
|
|
After Width: | Height: | Size: 66 KiB |
@ -0,0 +1,15 @@ |
|||||
|
from picamera2 import Picamera2 |
||||
|
from libcamera import controls |
||||
|
from time import sleep |
||||
|
|
||||
|
picam = Picamera2() |
||||
|
|
||||
|
config = picam.create_preview_configuration() |
||||
|
picam.configure(config) |
||||
|
|
||||
|
picam.start() |
||||
|
picam.set_controls({"AfMode": controls.AfModeEnum.Continuous}) |
||||
|
sleep(2) |
||||
|
picam.capture_file("/tank/cameratests/terri/test-python.jpg") |
||||
|
|
||||
|
picam.close() |
@ -0,0 +1,22 @@ |
|||||
|
# Python Basis-Image |
||||
|
FROM python:3.8 |
||||
|
|
||||
|
# Arbeitsverzeichnis innerhalb des Containers |
||||
|
WORKDIR /app |
||||
|
|
||||
|
# Anwendungsabhängigkeiten in das Container-Image kopieren |
||||
|
COPY requirements.txt . |
||||
|
|
||||
|
# Abhängigkeiten installieren |
||||
|
RUN pip install --no-cache-dir -r requirements.txt |
||||
|
|
||||
|
# Port der Flask-Anwendung |
||||
|
EXPOSE 8085 |
||||
|
|
||||
|
# eigenen Code in das Container-Image kopieren |
||||
|
COPY fib/*.py /app/ |
||||
|
COPY fib/static /app/static |
||||
|
COPY fib/templates /app/templates |
||||
|
|
||||
|
# Befehl, der die Anwendung startet |
||||
|
CMD ["python", "app.py"] |
@ -0,0 +1,45 @@ |
|||||
|
from flask import Flask,render_template,request |
||||
|
from fib_gen import fib_generator |
||||
|
import logging |
||||
|
|
||||
|
logging.basicConfig( format='%(asctime)-15s [%(levelname)s] %(funcName)s: %(message)s', level=logging.DEBUG) |
||||
|
app = Flask(__name__) |
||||
|
|
||||
|
@app.route('/') |
||||
|
def index(): |
||||
|
return render_template('index.html') |
||||
|
|
||||
|
@app.route('/fib',methods=['GET','POST']) |
||||
|
def fib(): |
||||
|
fibg = fib_generator() |
||||
|
result = '' |
||||
|
logging.debug(f'request.method={request.method}') |
||||
|
if request.method == 'POST': |
||||
|
element = request.form['element'] |
||||
|
|
||||
|
logging.debug(f'berechne Element:{element}') |
||||
|
|
||||
|
n= int(element) |
||||
|
#formel= str(n-2) + '+' + str(n-1) |
||||
|
formel = '' # Berechnungsformel initialisieren. |
||||
|
if element != None: |
||||
|
for i in range(n+1): |
||||
|
fib = next(fibg) |
||||
|
if i == n-2: # fib(n-2) zur Berechnungsformel dazu |
||||
|
|
||||
|
formel += str(fib) |
||||
|
if i == n-1: # fib(n-1) mit + Zeichen zur Berechnungsformel dazu |
||||
|
formel += '+' + str(fib) |
||||
|
|
||||
|
logging.debug(f'Fibonacci-Zahl: {fib}') |
||||
|
logging.debug(f'formel={formel}') |
||||
|
result=str(fib) |
||||
|
elif request.method == 'GET': |
||||
|
logging.debug('GET-Request') |
||||
|
return render_template('index.html', result=result,formel=formel) |
||||
|
|
||||
|
if __name__ == '__main__': |
||||
|
app.run(host='0.0.0.0',port=8085, debug=True) |
||||
|
|
||||
|
|
||||
|
|
@ -0,0 +1,12 @@ |
|||||
|
import sys |
||||
|
|
||||
|
def fib_generator(): |
||||
|
a,b = 0,1 |
||||
|
|
||||
|
while True: |
||||
|
yield a |
||||
|
a,b = b, a+b |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
@ -0,0 +1,427 @@ |
|||||
|
/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ |
||||
|
|
||||
|
/** |
||||
|
* 1. Set default font family to sans-serif. |
||||
|
* 2. Prevent iOS text size adjust after orientation change, without disabling |
||||
|
* user zoom. |
||||
|
*/ |
||||
|
|
||||
|
html { |
||||
|
font-family: sans-serif; /* 1 */ |
||||
|
-ms-text-size-adjust: 100%; /* 2 */ |
||||
|
-webkit-text-size-adjust: 100%; /* 2 */ |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Remove default margin. |
||||
|
*/ |
||||
|
|
||||
|
body { |
||||
|
margin: 0; |
||||
|
} |
||||
|
|
||||
|
/* HTML5 display definitions |
||||
|
========================================================================== */ |
||||
|
|
||||
|
/** |
||||
|
* Correct `block` display not defined for any HTML5 element in IE 8/9. |
||||
|
* Correct `block` display not defined for `details` or `summary` in IE 10/11 |
||||
|
* and Firefox. |
||||
|
* Correct `block` display not defined for `main` in IE 11. |
||||
|
*/ |
||||
|
|
||||
|
article, |
||||
|
aside, |
||||
|
details, |
||||
|
figcaption, |
||||
|
figure, |
||||
|
footer, |
||||
|
header, |
||||
|
hgroup, |
||||
|
main, |
||||
|
menu, |
||||
|
nav, |
||||
|
section, |
||||
|
summary { |
||||
|
display: block; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 1. Correct `inline-block` display not defined in IE 8/9. |
||||
|
* 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. |
||||
|
*/ |
||||
|
|
||||
|
audio, |
||||
|
canvas, |
||||
|
progress, |
||||
|
video { |
||||
|
display: inline-block; /* 1 */ |
||||
|
vertical-align: baseline; /* 2 */ |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Prevent modern browsers from displaying `audio` without controls. |
||||
|
* Remove excess height in iOS 5 devices. |
||||
|
*/ |
||||
|
|
||||
|
audio:not([controls]) { |
||||
|
display: none; |
||||
|
height: 0; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Address `[hidden]` styling not present in IE 8/9/10. |
||||
|
* Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. |
||||
|
*/ |
||||
|
|
||||
|
[hidden], |
||||
|
template { |
||||
|
display: none; |
||||
|
} |
||||
|
|
||||
|
/* Links |
||||
|
========================================================================== */ |
||||
|
|
||||
|
/** |
||||
|
* Remove the gray background color from active links in IE 10. |
||||
|
*/ |
||||
|
|
||||
|
a { |
||||
|
background-color: transparent; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Improve readability when focused and also mouse hovered in all browsers. |
||||
|
*/ |
||||
|
|
||||
|
a:active, |
||||
|
a:hover { |
||||
|
outline: 0; |
||||
|
} |
||||
|
|
||||
|
/* Text-level semantics |
||||
|
========================================================================== */ |
||||
|
|
||||
|
/** |
||||
|
* Address styling not present in IE 8/9/10/11, Safari, and Chrome. |
||||
|
*/ |
||||
|
|
||||
|
abbr[title] { |
||||
|
border-bottom: 1px dotted; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Address style set to `bolder` in Firefox 4+, Safari, and Chrome. |
||||
|
*/ |
||||
|
|
||||
|
b, |
||||
|
strong { |
||||
|
font-weight: bold; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Address styling not present in Safari and Chrome. |
||||
|
*/ |
||||
|
|
||||
|
dfn { |
||||
|
font-style: italic; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Address variable `h1` font-size and margin within `section` and `article` |
||||
|
* contexts in Firefox 4+, Safari, and Chrome. |
||||
|
*/ |
||||
|
|
||||
|
h1 { |
||||
|
font-size: 2em; |
||||
|
margin: 0.67em 0; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Address styling not present in IE 8/9. |
||||
|
*/ |
||||
|
|
||||
|
mark { |
||||
|
background: #ff0; |
||||
|
color: #000; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Address inconsistent and variable font size in all browsers. |
||||
|
*/ |
||||
|
|
||||
|
small { |
||||
|
font-size: 80%; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Prevent `sub` and `sup` affecting `line-height` in all browsers. |
||||
|
*/ |
||||
|
|
||||
|
sub, |
||||
|
sup { |
||||
|
font-size: 75%; |
||||
|
line-height: 0; |
||||
|
position: relative; |
||||
|
vertical-align: baseline; |
||||
|
} |
||||
|
|
||||
|
sup { |
||||
|
top: -0.5em; |
||||
|
} |
||||
|
|
||||
|
sub { |
||||
|
bottom: -0.25em; |
||||
|
} |
||||
|
|
||||
|
/* Embedded content |
||||
|
========================================================================== */ |
||||
|
|
||||
|
/** |
||||
|
* Remove border when inside `a` element in IE 8/9/10. |
||||
|
*/ |
||||
|
|
||||
|
img { |
||||
|
border: 0; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Correct overflow not hidden in IE 9/10/11. |
||||
|
*/ |
||||
|
|
||||
|
svg:not(:root) { |
||||
|
overflow: hidden; |
||||
|
} |
||||
|
|
||||
|
/* Grouping content |
||||
|
========================================================================== */ |
||||
|
|
||||
|
/** |
||||
|
* Address margin not present in IE 8/9 and Safari. |
||||
|
*/ |
||||
|
|
||||
|
figure { |
||||
|
margin: 1em 40px; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Address differences between Firefox and other browsers. |
||||
|
*/ |
||||
|
|
||||
|
hr { |
||||
|
-moz-box-sizing: content-box; |
||||
|
box-sizing: content-box; |
||||
|
height: 0; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Contain overflow in all browsers. |
||||
|
*/ |
||||
|
|
||||
|
pre { |
||||
|
overflow: auto; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Address odd `em`-unit font size rendering in all browsers. |
||||
|
*/ |
||||
|
|
||||
|
code, |
||||
|
kbd, |
||||
|
pre, |
||||
|
samp { |
||||
|
font-family: monospace, monospace; |
||||
|
font-size: 1em; |
||||
|
} |
||||
|
|
||||
|
/* Forms |
||||
|
========================================================================== */ |
||||
|
|
||||
|
/** |
||||
|
* Known limitation: by default, Chrome and Safari on OS X allow very limited |
||||
|
* styling of `select`, unless a `border` property is set. |
||||
|
*/ |
||||
|
|
||||
|
/** |
||||
|
* 1. Correct color not being inherited. |
||||
|
* Known issue: affects color of disabled elements. |
||||
|
* 2. Correct font properties not being inherited. |
||||
|
* 3. Address margins set differently in Firefox 4+, Safari, and Chrome. |
||||
|
*/ |
||||
|
|
||||
|
button, |
||||
|
input, |
||||
|
optgroup, |
||||
|
select, |
||||
|
textarea { |
||||
|
color: inherit; /* 1 */ |
||||
|
font: inherit; /* 2 */ |
||||
|
margin: 0; /* 3 */ |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Address `overflow` set to `hidden` in IE 8/9/10/11. |
||||
|
*/ |
||||
|
|
||||
|
button { |
||||
|
overflow: visible; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Address inconsistent `text-transform` inheritance for `button` and `select`. |
||||
|
* All other form control elements do not inherit `text-transform` values. |
||||
|
* Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. |
||||
|
* Correct `select` style inheritance in Firefox. |
||||
|
*/ |
||||
|
|
||||
|
button, |
||||
|
select { |
||||
|
text-transform: none; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` |
||||
|
* and `video` controls. |
||||
|
* 2. Correct inability to style clickable `input` types in iOS. |
||||
|
* 3. Improve usability and consistency of cursor style between image-type |
||||
|
* `input` and others. |
||||
|
*/ |
||||
|
|
||||
|
button, |
||||
|
html input[type="button"], /* 1 */ |
||||
|
input[type="reset"], |
||||
|
input[type="submit"] { |
||||
|
-webkit-appearance: button; /* 2 */ |
||||
|
cursor: pointer; /* 3 */ |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Re-set default cursor for disabled elements. |
||||
|
*/ |
||||
|
|
||||
|
button[disabled], |
||||
|
html input[disabled] { |
||||
|
cursor: default; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Remove inner padding and border in Firefox 4+. |
||||
|
*/ |
||||
|
|
||||
|
button::-moz-focus-inner, |
||||
|
input::-moz-focus-inner { |
||||
|
border: 0; |
||||
|
padding: 0; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Address Firefox 4+ setting `line-height` on `input` using `!important` in |
||||
|
* the UA stylesheet. |
||||
|
*/ |
||||
|
|
||||
|
input { |
||||
|
line-height: normal; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* It's recommended that you don't attempt to style these elements. |
||||
|
* Firefox's implementation doesn't respect box-sizing, padding, or width. |
||||
|
* |
||||
|
* 1. Address box sizing set to `content-box` in IE 8/9/10. |
||||
|
* 2. Remove excess padding in IE 8/9/10. |
||||
|
*/ |
||||
|
|
||||
|
input[type="checkbox"], |
||||
|
input[type="radio"] { |
||||
|
box-sizing: border-box; /* 1 */ |
||||
|
padding: 0; /* 2 */ |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Fix the cursor style for Chrome's increment/decrement buttons. For certain |
||||
|
* `font-size` values of the `input`, it causes the cursor style of the |
||||
|
* decrement button to change from `default` to `text`. |
||||
|
*/ |
||||
|
|
||||
|
input[type="number"]::-webkit-inner-spin-button, |
||||
|
input[type="number"]::-webkit-outer-spin-button { |
||||
|
height: auto; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 1. Address `appearance` set to `searchfield` in Safari and Chrome. |
||||
|
* 2. Address `box-sizing` set to `border-box` in Safari and Chrome |
||||
|
* (include `-moz` to future-proof). |
||||
|
*/ |
||||
|
|
||||
|
input[type="search"] { |
||||
|
-webkit-appearance: textfield; /* 1 */ |
||||
|
-moz-box-sizing: content-box; |
||||
|
-webkit-box-sizing: content-box; /* 2 */ |
||||
|
box-sizing: content-box; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Remove inner padding and search cancel button in Safari and Chrome on OS X. |
||||
|
* Safari (but not Chrome) clips the cancel button when the search input has |
||||
|
* padding (and `textfield` appearance). |
||||
|
*/ |
||||
|
|
||||
|
input[type="search"]::-webkit-search-cancel-button, |
||||
|
input[type="search"]::-webkit-search-decoration { |
||||
|
-webkit-appearance: none; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Define consistent border, margin, and padding. |
||||
|
*/ |
||||
|
|
||||
|
fieldset { |
||||
|
border: 1px solid #c0c0c0; |
||||
|
margin: 0 2px; |
||||
|
padding: 0.35em 0.625em 0.75em; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 1. Correct `color` not being inherited in IE 8/9/10/11. |
||||
|
* 2. Remove padding so people aren't caught out if they zero out fieldsets. |
||||
|
*/ |
||||
|
|
||||
|
legend { |
||||
|
border: 0; /* 1 */ |
||||
|
padding: 0; /* 2 */ |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Remove default vertical scrollbar in IE 8/9/10/11. |
||||
|
*/ |
||||
|
|
||||
|
textarea { |
||||
|
overflow: auto; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Don't inherit the `font-weight` (applied by a rule above). |
||||
|
* NOTE: the default cannot safely be changed in Chrome and Safari on OS X. |
||||
|
*/ |
||||
|
|
||||
|
optgroup { |
||||
|
font-weight: bold; |
||||
|
} |
||||
|
|
||||
|
/* Tables |
||||
|
========================================================================== */ |
||||
|
|
||||
|
/** |
||||
|
* Remove most spacing between table cells. |
||||
|
*/ |
||||
|
|
||||
|
table { |
||||
|
border-collapse: collapse; |
||||
|
border-spacing: 0; |
||||
|
} |
||||
|
|
||||
|
td, |
||||
|
th { |
||||
|
padding: 0; |
||||
|
} |
@ -0,0 +1,418 @@ |
|||||
|
/* |
||||
|
* Skeleton V2.0.4 |
||||
|
* Copyright 2014, Dave Gamache |
||||
|
* www.getskeleton.com |
||||
|
* Free to use under the MIT license. |
||||
|
* http://www.opensource.org/licenses/mit-license.php |
||||
|
* 12/29/2014 |
||||
|
*/ |
||||
|
|
||||
|
|
||||
|
/* Table of contents |
||||
|
–––––––––––––––––––––––––––––––––––––––––––––––––– |
||||
|
- Grid |
||||
|
- Base Styles |
||||
|
- Typography |
||||
|
- Links |
||||
|
- Buttons |
||||
|
- Forms |
||||
|
- Lists |
||||
|
- Code |
||||
|
- Tables |
||||
|
- Spacing |
||||
|
- Utilities |
||||
|
- Clearing |
||||
|
- Media Queries |
||||
|
*/ |
||||
|
|
||||
|
|
||||
|
/* Grid |
||||
|
–––––––––––––––––––––––––––––––––––––––––––––––––– */ |
||||
|
.container { |
||||
|
position: relative; |
||||
|
width: 100%; |
||||
|
max-width: 960px; |
||||
|
margin: 0 auto; |
||||
|
padding: 0 20px; |
||||
|
box-sizing: border-box; } |
||||
|
.column, |
||||
|
.columns { |
||||
|
width: 100%; |
||||
|
float: left; |
||||
|
box-sizing: border-box; } |
||||
|
|
||||
|
/* For devices larger than 400px */ |
||||
|
@media (min-width: 400px) { |
||||
|
.container { |
||||
|
width: 85%; |
||||
|
padding: 0; } |
||||
|
} |
||||
|
|
||||
|
/* For devices larger than 550px */ |
||||
|
@media (min-width: 550px) { |
||||
|
.container { |
||||
|
width: 80%; } |
||||
|
.column, |
||||
|
.columns { |
||||
|
margin-left: 4%; } |
||||
|
.column:first-child, |
||||
|
.columns:first-child { |
||||
|
margin-left: 0; } |
||||
|
|
||||
|
.one.column, |
||||
|
.one.columns { width: 4.66666666667%; } |
||||
|
.two.columns { width: 13.3333333333%; } |
||||
|
.three.columns { width: 22%; } |
||||
|
.four.columns { width: 30.6666666667%; } |
||||
|
.five.columns { width: 39.3333333333%; } |
||||
|
.six.columns { width: 48%; } |
||||
|
.seven.columns { width: 56.6666666667%; } |
||||
|
.eight.columns { width: 65.3333333333%; } |
||||
|
.nine.columns { width: 74.0%; } |
||||
|
.ten.columns { width: 82.6666666667%; } |
||||
|
.eleven.columns { width: 91.3333333333%; } |
||||
|
.twelve.columns { width: 100%; margin-left: 0; } |
||||
|
|
||||
|
.one-third.column { width: 30.6666666667%; } |
||||
|
.two-thirds.column { width: 65.3333333333%; } |
||||
|
|
||||
|
.one-half.column { width: 48%; } |
||||
|
|
||||
|
/* Offsets */ |
||||
|
.offset-by-one.column, |
||||
|
.offset-by-one.columns { margin-left: 8.66666666667%; } |
||||
|
.offset-by-two.column, |
||||
|
.offset-by-two.columns { margin-left: 17.3333333333%; } |
||||
|
.offset-by-three.column, |
||||
|
.offset-by-three.columns { margin-left: 26%; } |
||||
|
.offset-by-four.column, |
||||
|
.offset-by-four.columns { margin-left: 34.6666666667%; } |
||||
|
.offset-by-five.column, |
||||
|
.offset-by-five.columns { margin-left: 43.3333333333%; } |
||||
|
.offset-by-six.column, |
||||
|
.offset-by-six.columns { margin-left: 52%; } |
||||
|
.offset-by-seven.column, |
||||
|
.offset-by-seven.columns { margin-left: 60.6666666667%; } |
||||
|
.offset-by-eight.column, |
||||
|
.offset-by-eight.columns { margin-left: 69.3333333333%; } |
||||
|
.offset-by-nine.column, |
||||
|
.offset-by-nine.columns { margin-left: 78.0%; } |
||||
|
.offset-by-ten.column, |
||||
|
.offset-by-ten.columns { margin-left: 86.6666666667%; } |
||||
|
.offset-by-eleven.column, |
||||
|
.offset-by-eleven.columns { margin-left: 95.3333333333%; } |
||||
|
|
||||
|
.offset-by-one-third.column, |
||||
|
.offset-by-one-third.columns { margin-left: 34.6666666667%; } |
||||
|
.offset-by-two-thirds.column, |
||||
|
.offset-by-two-thirds.columns { margin-left: 69.3333333333%; } |
||||
|
|
||||
|
.offset-by-one-half.column, |
||||
|
.offset-by-one-half.columns { margin-left: 52%; } |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
/* Base Styles |
||||
|
–––––––––––––––––––––––––––––––––––––––––––––––––– */ |
||||
|
/* NOTE |
||||
|
html is set to 62.5% so that all the REM measurements throughout Skeleton |
||||
|
are based on 10px sizing. So basically 1.5rem = 15px :) */ |
||||
|
html { |
||||
|
font-size: 62.5%; } |
||||
|
body { |
||||
|
font-size: 1.5em; /* currently ems cause chrome bug misinterpreting rems on body element */ |
||||
|
line-height: 1.6; |
||||
|
font-weight: 400; |
||||
|
font-family: "Raleway", "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif; |
||||
|
color: #222; } |
||||
|
|
||||
|
|
||||
|
/* Typography |
||||
|
–––––––––––––––––––––––––––––––––––––––––––––––––– */ |
||||
|
h1, h2, h3, h4, h5, h6 { |
||||
|
margin-top: 0; |
||||
|
margin-bottom: 2rem; |
||||
|
font-weight: 300; } |
||||
|
h1 { font-size: 4.0rem; line-height: 1.2; letter-spacing: -.1rem;} |
||||
|
h2 { font-size: 3.6rem; line-height: 1.25; letter-spacing: -.1rem; } |
||||
|
h3 { font-size: 3.0rem; line-height: 1.3; letter-spacing: -.1rem; } |
||||
|
h4 { font-size: 2.4rem; line-height: 1.35; letter-spacing: -.08rem; } |
||||
|
h5 { font-size: 1.8rem; line-height: 1.5; letter-spacing: -.05rem; } |
||||
|
h6 { font-size: 1.5rem; line-height: 1.6; letter-spacing: 0; } |
||||
|
|
||||
|
/* Larger than phablet */ |
||||
|
@media (min-width: 550px) { |
||||
|
h1 { font-size: 5.0rem; } |
||||
|
h2 { font-size: 4.2rem; } |
||||
|
h3 { font-size: 3.6rem; } |
||||
|
h4 { font-size: 3.0rem; } |
||||
|
h5 { font-size: 2.4rem; } |
||||
|
h6 { font-size: 1.5rem; } |
||||
|
} |
||||
|
|
||||
|
p { |
||||
|
margin-top: 0; } |
||||
|
|
||||
|
|
||||
|
/* Links |
||||
|
–––––––––––––––––––––––––––––––––––––––––––––––––– */ |
||||
|
a { |
||||
|
color: #1EAEDB; } |
||||
|
a:hover { |
||||
|
color: #0FA0CE; } |
||||
|
|
||||
|
|
||||
|
/* Buttons |
||||
|
–––––––––––––––––––––––––––––––––––––––––––––––––– */ |
||||
|
.button, |
||||
|
button, |
||||
|
input[type="submit"], |
||||
|
input[type="reset"], |
||||
|
input[type="button"] { |
||||
|
display: inline-block; |
||||
|
height: 38px; |
||||
|
padding: 0 30px; |
||||
|
color: #555; |
||||
|
text-align: center; |
||||
|
font-size: 11px; |
||||
|
font-weight: 600; |
||||
|
line-height: 38px; |
||||
|
letter-spacing: .1rem; |
||||
|
text-transform: uppercase; |
||||
|
text-decoration: none; |
||||
|
white-space: nowrap; |
||||
|
background-color: transparent; |
||||
|
border-radius: 4px; |
||||
|
border: 1px solid #bbb; |
||||
|
cursor: pointer; |
||||
|
box-sizing: border-box; } |
||||
|
.button:hover, |
||||
|
button:hover, |
||||
|
input[type="submit"]:hover, |
||||
|
input[type="reset"]:hover, |
||||
|
input[type="button"]:hover, |
||||
|
.button:focus, |
||||
|
button:focus, |
||||
|
input[type="submit"]:focus, |
||||
|
input[type="reset"]:focus, |
||||
|
input[type="button"]:focus { |
||||
|
color: #333; |
||||
|
border-color: #888; |
||||
|
outline: 0; } |
||||
|
.button.button-primary, |
||||
|
button.button-primary, |
||||
|
input[type="submit"].button-primary, |
||||
|
input[type="reset"].button-primary, |
||||
|
input[type="button"].button-primary { |
||||
|
color: #FFF; |
||||
|
background-color: #33C3F0; |
||||
|
border-color: #33C3F0; } |
||||
|
.button.button-primary:hover, |
||||
|
button.button-primary:hover, |
||||
|
input[type="submit"].button-primary:hover, |
||||
|
input[type="reset"].button-primary:hover, |
||||
|
input[type="button"].button-primary:hover, |
||||
|
.button.button-primary:focus, |
||||
|
button.button-primary:focus, |
||||
|
input[type="submit"].button-primary:focus, |
||||
|
input[type="reset"].button-primary:focus, |
||||
|
input[type="button"].button-primary:focus { |
||||
|
color: #FFF; |
||||
|
background-color: #1EAEDB; |
||||
|
border-color: #1EAEDB; } |
||||
|
|
||||
|
|
||||
|
/* Forms |
||||
|
–––––––––––––––––––––––––––––––––––––––––––––––––– */ |
||||
|
input[type="email"], |
||||
|
input[type="number"], |
||||
|
input[type="search"], |
||||
|
input[type="text"], |
||||
|
input[type="tel"], |
||||
|
input[type="url"], |
||||
|
input[type="password"], |
||||
|
textarea, |
||||
|
select { |
||||
|
height: 38px; |
||||
|
padding: 6px 10px; /* The 6px vertically centers text on FF, ignored by Webkit */ |
||||
|
background-color: #fff; |
||||
|
border: 1px solid #D1D1D1; |
||||
|
border-radius: 4px; |
||||
|
box-shadow: none; |
||||
|
box-sizing: border-box; } |
||||
|
/* Removes awkward default styles on some inputs for iOS */ |
||||
|
input[type="email"], |
||||
|
input[type="number"], |
||||
|
input[type="search"], |
||||
|
input[type="text"], |
||||
|
input[type="tel"], |
||||
|
input[type="url"], |
||||
|
input[type="password"], |
||||
|
textarea { |
||||
|
-webkit-appearance: none; |
||||
|
-moz-appearance: none; |
||||
|
appearance: none; } |
||||
|
textarea { |
||||
|
min-height: 65px; |
||||
|
padding-top: 6px; |
||||
|
padding-bottom: 6px; } |
||||
|
input[type="email"]:focus, |
||||
|
input[type="number"]:focus, |
||||
|
input[type="search"]:focus, |
||||
|
input[type="text"]:focus, |
||||
|
input[type="tel"]:focus, |
||||
|
input[type="url"]:focus, |
||||
|
input[type="password"]:focus, |
||||
|
textarea:focus, |
||||
|
select:focus { |
||||
|
border: 1px solid #33C3F0; |
||||
|
outline: 0; } |
||||
|
label, |
||||
|
legend { |
||||
|
display: block; |
||||
|
margin-bottom: .5rem; |
||||
|
font-weight: 600; } |
||||
|
fieldset { |
||||
|
padding: 0; |
||||
|
border-width: 0; } |
||||
|
input[type="checkbox"], |
||||
|
input[type="radio"] { |
||||
|
display: inline; } |
||||
|
label > .label-body { |
||||
|
display: inline-block; |
||||
|
margin-left: .5rem; |
||||
|
font-weight: normal; } |
||||
|
|
||||
|
|
||||
|
/* Lists |
||||
|
–––––––––––––––––––––––––––––––––––––––––––––––––– */ |
||||
|
ul { |
||||
|
list-style: circle inside; } |
||||
|
ol { |
||||
|
list-style: decimal inside; } |
||||
|
ol, ul { |
||||
|
padding-left: 0; |
||||
|
margin-top: 0; } |
||||
|
ul ul, |
||||
|
ul ol, |
||||
|
ol ol, |
||||
|
ol ul { |
||||
|
margin: 1.5rem 0 1.5rem 3rem; |
||||
|
font-size: 90%; } |
||||
|
li { |
||||
|
margin-bottom: 1rem; } |
||||
|
|
||||
|
|
||||
|
/* Code |
||||
|
–––––––––––––––––––––––––––––––––––––––––––––––––– */ |
||||
|
code { |
||||
|
padding: .2rem .5rem; |
||||
|
margin: 0 .2rem; |
||||
|
font-size: 90%; |
||||
|
white-space: nowrap; |
||||
|
background: #F1F1F1; |
||||
|
border: 1px solid #E1E1E1; |
||||
|
border-radius: 4px; } |
||||
|
pre > code { |
||||
|
display: block; |
||||
|
padding: 1rem 1.5rem; |
||||
|
white-space: pre; } |
||||
|
|
||||
|
|
||||
|
/* Tables |
||||
|
–––––––––––––––––––––––––––––––––––––––––––––––––– */ |
||||
|
th, |
||||
|
td { |
||||
|
padding: 12px 15px; |
||||
|
text-align: left; |
||||
|
border-bottom: 1px solid #E1E1E1; } |
||||
|
th:first-child, |
||||
|
td:first-child { |
||||
|
padding-left: 0; } |
||||
|
th:last-child, |
||||
|
td:last-child { |
||||
|
padding-right: 0; } |
||||
|
|
||||
|
|
||||
|
/* Spacing |
||||
|
–––––––––––––––––––––––––––––––––––––––––––––––––– */ |
||||
|
button, |
||||
|
.button { |
||||
|
margin-bottom: 1rem; } |
||||
|
input, |
||||
|
textarea, |
||||
|
select, |
||||
|
fieldset { |
||||
|
margin-bottom: 1.5rem; } |
||||
|
pre, |
||||
|
blockquote, |
||||
|
dl, |
||||
|
figure, |
||||
|
table, |
||||
|
p, |
||||
|
ul, |
||||
|
ol, |
||||
|
form { |
||||
|
margin-bottom: 2.5rem; } |
||||
|
|
||||
|
|
||||
|
/* Utilities |
||||
|
–––––––––––––––––––––––––––––––––––––––––––––––––– */ |
||||
|
.u-full-width { |
||||
|
width: 100%; |
||||
|
box-sizing: border-box; } |
||||
|
.u-max-full-width { |
||||
|
max-width: 100%; |
||||
|
box-sizing: border-box; } |
||||
|
.u-pull-right { |
||||
|
float: right; } |
||||
|
.u-pull-left { |
||||
|
float: left; } |
||||
|
|
||||
|
|
||||
|
/* Misc |
||||
|
–––––––––––––––––––––––––––––––––––––––––––––––––– */ |
||||
|
hr { |
||||
|
margin-top: 3rem; |
||||
|
margin-bottom: 3.5rem; |
||||
|
border-width: 0; |
||||
|
border-top: 1px solid #E1E1E1; } |
||||
|
|
||||
|
|
||||
|
/* Clearing |
||||
|
–––––––––––––––––––––––––––––––––––––––––––––––––– */ |
||||
|
|
||||
|
/* Self Clearing Goodness */ |
||||
|
.container:after, |
||||
|
.row:after, |
||||
|
.u-cf { |
||||
|
content: ""; |
||||
|
display: table; |
||||
|
clear: both; } |
||||
|
|
||||
|
|
||||
|
/* Media Queries |
||||
|
–––––––––––––––––––––––––––––––––––––––––––––––––– */ |
||||
|
/* |
||||
|
Note: The best way to structure the use of media queries is to create the queries |
||||
|
near the relevant code. For example, if you wanted to change the styles for buttons |
||||
|
on small devices, paste the mobile query code up in the buttons section and style it |
||||
|
there. |
||||
|
*/ |
||||
|
|
||||
|
|
||||
|
/* Larger than mobile */ |
||||
|
@media (min-width: 400px) {} |
||||
|
|
||||
|
/* Larger than phablet (also point when grid becomes active) */ |
||||
|
@media (min-width: 550px) {} |
||||
|
|
||||
|
/* Larger than tablet */ |
||||
|
@media (min-width: 750px) {} |
||||
|
|
||||
|
/* Larger than desktop */ |
||||
|
@media (min-width: 1000px) {} |
||||
|
|
||||
|
/* Larger than Desktop HD */ |
||||
|
@media (min-width: 1200px) {} |
@ -0,0 +1,26 @@ |
|||||
|
<!DOCTYPE html> |
||||
|
|
||||
|
<html lang='en'> |
||||
|
<head> |
||||
|
<meta charset='utf-8' /> |
||||
|
<link href='static/css/skeleton.css' rel='stylesheet' type='text/css' /> |
||||
|
<title>Fibonacci Zahlen berechnen</title> |
||||
|
</head> |
||||
|
|
||||
|
<body> |
||||
|
<h2>Fibonacci Generator </h2 |
||||
|
<!--FORM --> |
||||
|
<form action='fib' method='post'> |
||||
|
<label> Folgen Element</label> |
||||
|
<input |
||||
|
type='text' |
||||
|
placeholder='Fibonacci Element' |
||||
|
name='element' |
||||
|
value='{{request.form.element}}' |
||||
|
</input><br /> |
||||
|
<button type='submit'>Berechnen</button> |
||||
|
<p>Formel: {{formel}} </p> |
||||
|
<p>Fibonacci-Zahl: {{result}} </p> |
||||
|
</form> |
||||
|
</body> |
||||
|
</html> |
@ -0,0 +1,8 @@ |
|||||
|
home = /usr/bin |
||||
|
implementation = CPython |
||||
|
version_info = 3.11.2.final.0 |
||||
|
virtualenv = 20.17.1+ds |
||||
|
include-system-site-packages = false |
||||
|
base-prefix = /usr |
||||
|
base-exec-prefix = /usr |
||||
|
base-executable = /usr/bin/python3 |
@ -0,0 +1,7 @@ |
|||||
|
blinker==1.7.0 |
||||
|
click==8.1.7 |
||||
|
Flask==3.0.1 |
||||
|
itsdangerous==2.1.2 |
||||
|
Jinja2==3.1.3 |
||||
|
MarkupSafe==2.1.3 |
||||
|
Werkzeug==3.0.1 |
@ -0,0 +1,17 @@ |
|||||
|
|
||||
|
class Name: |
||||
|
def __init__(self,vorname,name): |
||||
|
self.vorname = vorname |
||||
|
self.name = name |
||||
|
|
||||
|
def __getattr__(self,attr): |
||||
|
if attr == 'fullname': |
||||
|
return self.vorname + ' ' + self.name |
||||
|
elif attr == 'sortname': |
||||
|
return self.name + ',' + self.vorname |
||||
|
else: |
||||
|
raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{attr}'") |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
@ -0,0 +1,28 @@ |
|||||
|
import unittest |
||||
|
import logging |
||||
|
from name import Name |
||||
|
|
||||
|
__LOGLEVEL__ = logging.DEBUG |
||||
|
|
||||
|
logging.basicConfig( format='%(asctime)-15s [%(levelname)s] %(funcName)s: %(message)s', level=__LOGLEVEL__) |
||||
|
|
||||
|
class TestName(unittest.TestCase): |
||||
|
|
||||
|
def setUp(self): |
||||
|
logging.debug('setting up test') |
||||
|
self.name = Name('Homer', 'Simpson') |
||||
|
|
||||
|
def test_getattr(self): |
||||
|
fullname = self.name.fullname |
||||
|
sortname = self.name.sortname |
||||
|
|
||||
|
|
||||
|
self.assertEqual('Homer Simpson', fullname) |
||||
|
self.assertEqual('Simpson,Homer', sortname) |
||||
|
|
||||
|
|
||||
|
if __name__ == '__main__': |
||||
|
logging.debug('Test startet.') |
||||
|
unittest.main() |
||||
|
|
||||
|
|
@ -0,0 +1,7 @@ |
|||||
|
|
||||
|
|
||||
|
def square(x): |
||||
|
return x** 2 |
||||
|
|
||||
|
sq5 = square(5) |
||||
|
print(f'{sq5}') |
@ -0,0 +1,5 @@ |
|||||
|
|
||||
|
|
||||
|
|
||||
|
square = lambda x: x** 2 |
||||
|
print(f'{square(5)}') |
Loading…
Reference in new issue