Datei analysieren (Zeichenketten)
Hier sehen Sie den Anfang einer Datenreihe:
104.55 CHF
124.40 CHF
80.35 CHF
58.80 CHF
62.65 CHF
68.50 CHF
120.50 CHF
90.80 CHF
130.40 CHF
92.30 CHF
154.20 CHF
…
Laden Sie die Zahlenreihe herunter. Lösen Sie danach die folgenden Aufgaben:
- Schreiben Sie eine Subroutine, die eine eingelesene Zeile (String) in eine ganze Zahl (integer) verwandelt. Der Wert soll die Rappen (Cent) darstellen. Aus "104.55 CHF" wird also die Zahl 10 455. Es ist wichtig, ganze Zahlen zu verwenden, denn gebrochene Zahlen (double) enthalten oft Rundungsfehler.
- Geben Sie die Summe aller Zahlen aus. Einmal als Summe der Rappen, das andere Mal im gegebenen Format ("xxxxx.xx CHF"). Tipp: Speichern Sie die Daten vor den Berechnungen in einem Array.
- Zählen Sie diesmal nur die Zahlen zusammen, deren Betrag größer als 100.00 CHF ist.
-
Teilen Sie bei dieser Aufgabe die Zahlen in vier Gruppen:
Gruppe A: < 80.00 CHF,
Gruppe B: ? 80.00 CHF und < 100.00 CHF,
Gruppe C: ? 100.00 CHF und < 120.00 CHF,
Gruppe D: ? 120.00 CHF.
Geben Sie pro Gruppe die Summe und die Anzahl Werte aus.
Dateien:
0 Kommentare
3 Lösung(en)
import os
def lese_datei(name):
a = []
f = open(name, 'r')
for line in f:
a.append(line.rstrip('CHF\n'))
a.pop() # ohne letzte Zeile
return a
def rappen(s):
z=s.split('.')
rappen = int(z[0])*100+int(z[1])
return rappen
def ausgabe(summe):
print 'Summe in Rappen:'
print summe
print ''
print 'Format xxxx.xx CHF'
rappen = summe%100
franken = summe/100
print 'Summe: '+str(franken)+'.'+str(rappen)+' CHF'
print''
reihe = lese_datei('zahlenreihe.txt')
print reihe
print ''
summe = 0
for i in range(len(reihe)):
tmp = rappen(reihe[i])
summe = summe + tmp
ausgabe(summe)
print 'Summe aus Werten mit Betrag > 100 CHF'
print ''
summe = 0
for i in range(len(reihe)):
tmp = rappen(reihe[i])
if tmp > 10000:
summe = summe + tmp
ausgabe(summe)
print 'Summe von Gruppen'
summe = 0
a=[];b=[];c=[];d=[]
for i in range(len(reihe)):
tmp = rappen(reihe[i])
if tmp < 8000:
a.append(tmp)
elif tmp >= 8000 and tmp < 10000:
b.append(tmp)
elif tmp >= 10000 and tmp < 12000:
c.append(tmp)
elif tmp >= 12000:
d.append (tmp)
print 'x < 80'
ausgabe(sum(a))
print '80 <= x < 100'
ausgabe(sum(b))
print '100 <= x < 120'
ausgabe(sum(c))
print 'x >= 120'
ausgabe(sum(d))
/*---------------------------------------------------------*\
| Um sich hier aufs wesentliche zu konzentrieren, wurde die |
| zahlenreihe im html geladen und liegt hier als |
| array $list vor. |
\*---------------------------------------------------------*/
Array.prototype.sum = function() {
let s = 0;
for (let i = 0; i < this.length; i++) s += this[i];
return s;
}
// (1)
// in rappenbeträge umwandeln und in liste schreiben
let rapList = (function() {
let l = [];
for (let i = 0; i < list.length; i++) {
let str = list[i].split(' ');
l.push(parseInt(str[0]*100));
}
return l;
})();
// (2) ausgabe der summe aller beträge
console.log(`Summe der Rappen: ${rapList.sum()}`);
console.log(`Summe der Franken: ${rapList.sum() / 100} CHF`);
// ab hier wieder nur noch franken
for (r in rapList) (rapList[r] /= 100);
// (3) summe aller zahlen > 100 CHF
console.log(`Summe der Beträge > 100:
${rapList.filter(function(val) {return val > 100}).sum()} CHF`);
// (4) ggruppenAufteilung
let groups = [];
groups.push(rapList.filter(function(val) {return val < 80}));
groups.push(rapList.filter(function(val) {return val >= 80 && val < 100}));
groups.push(rapList.filter(function(val) {return val >= 100 && val < 120}));
groups.push(rapList.filter(function(val) {return val >= 120}));
console.log(`Gruppe A: ${groups[0].sum()} (${groups[0].length} Beträge)`);
console.log(`Gruppe B: ${groups[1].sum()} (${groups[1].length} Beträge)`);
console.log(`Gruppe C: ${groups[2].sum()} (${groups[2].length} Beträge)`);
console.log(`Gruppe D: ${groups[3].sum()} (${groups[3].length} Beträge)`);
// lissalanda@gmx.at
Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)
// NET 6.x | C# 10.x | VS-2022
var path = @"C:\...\franken.txt"; // Pfad anpassen!
if (!File.Exists(path)) return;
var chfTxt = File.ReadAllLinesAsync(path).Result;
var chfTxtArr = chfTxt.Select(x => x.Split(' ')[0].Replace(".", ","));
var rapTxtArr = chfTxt.Select(x => x.Split(' ')[0].Replace(".", ""));
var chfDblArr = chfTxtArr.Select(x => Convert.ToDouble(x)).ToArray();
Console.WriteLine($"\nLISTEN:\n\tAlle CHF:\t{string.Join(" ", chfTxtArr)}");
var rapIntArr = rapTxtArr.Select(x => Convert.ToInt32(x)).ToArray();
Console.WriteLine($"\tAlle Rappen:\t{string.Join(" ", rapIntArr)}");
var chfDblSum = Math.Round(chfDblArr.Sum(),2);
Console.WriteLine($"\nSUMMEN:\n\tSumme CHF:\t{string.Join(" ", chfDblSum)}");
var rapIntSum = rapIntArr.Sum();
Console.WriteLine($"\tSumme Rappen:\t{string.Join(" ", rapIntSum)}");
var chfDblSum100 = chfDblArr.Where(x => x > 100).Sum();
Console.WriteLine($"\tSumme < 100:\t{string.Join(" ", chfDblSum100)}");
var groupA = chfDblArr.Where(x => x < 80).ToArray();
Console.WriteLine($"\nGRUPPEN:\n\tA - Summe:\t{groupA.Sum():#0.00}\n\tA - Anzahl:\t{groupA.Length}\n");
var groupB = chfDblArr.Where(x => x is >= 80 and < 100).ToArray();
Console.WriteLine($"\tB - Summe:\t{groupB.Sum():#0.00}\n\tB - Anzahl:\t{groupB.Length}\n");
var groupC = chfDblArr.Where(x => x is >= 100 and < 120).ToArray();
Console.WriteLine($"\tC - Summe:\t{groupC.Sum():#0.00}\n\tC - Anzahl:\t{groupC.Length}\n");
var groupD = chfDblArr.Where(x => x is > 120).ToArray();
Console.WriteLine($"\tD - Summe:\t{groupD.Sum():#0.00}\n\tD - Anzahl:\t{groupD.Length}\n");
Lösung von: Jens Kelm (@JKooP)
Aktionen
Neue Lösung hinzufügen
Bewertung
Durchschnittliche Bewertung:
Meta
Zeit: | 2 |
Schwierigkeit: | k.A. |
Webcode: | ppxv-jgs4 |
Autor: | Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch) |