Potřebuji pomoct s úkolem – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Potřebuji pomoct s úkolem – Python – Fórum – Programujte.comPotřebuji pomoct s úkolem – Python – Fórum – Programujte.com

 

Kuba
~ Anonymní uživatel
59 příspěvků
6. 1. 2015   #1
-
0
-

Zdravím, 

mám problém s jedním úkolem do školy. Vůbec si s ním nevím rady a nechci další pětku. Nebyl by zde někdo hodný, kdo by mi s tím pomohl. Při nejhorším alespoň napsal kostru, zbytek bych už si sám zvládnul dodělat. 

Přepis textu na čísla

Jak jistě víte, když píšete SMS na starém mobilním telefonu, tak mačkáte tlačítka s čísly. K jednomu číslu je přiřazeno vždy několik znaků. Napsání jednoho znaku proto znamená zmáčknou jedno tlačítko několikrát. Zde je schematicky ukázaná klávesnice.

Tlačítko

Znaky

1

+ - = * / _ . ,? 1

2

a b c á č 2

3

d e f ď é ě 3

4

g h i í 4

5

j k l 5

6

m n o ň ó 6

7

p q r s ř š 7

8

t u v ť ú ů 8

9

w x y z ý ž 9

0

Mezera, 0

Například pro zobrazení písmena „o“ zmáčknete třikrát číslo šest.

Vaším úkolem je napsat 2 jednoduché verze programu, který ze souboru „vstup.txt“ načte text a následně s ním pracuje:

Každé písmeno nahradí číslem, které musel uživatel zmáčknout a také kolikrát, takovým způsobem, že například písmeno „v“ nahradí číslem „888“ (za každé takové číslo napíše mezeru pro přehlednost).
 

Každé písmeno nahradí číslem, keré musel uživatel zmáčknout a také kolikrát, takovým způsobem, že například písmeno „v“ nahradí znakem „3x8“ (za každý takový znak napíše mezeru pro přehlednost).
 

Neznámý znak v obou případech nahradí otazníkem.

Můžete mít obě verze v 1 programu, kde bude mezi nimi výběr (těžší varianta) nebo mít uloženou každou zvlášť jako samostatné programy (lehčí varianta).

Na konci výstup vytiskne, uloží ho pod názvem: „vystup–číslo_verze.txt“ a program se ukončí po stisknutí klávesy enter.


Díky moc.  


Kuba

Nahlásit jako SPAM
IP: 37.44.18.–
hanpari0
Stálý člen
6. 1. 2015   #2
-
+1
-
Zajímavé

#1 Kuba
Tohle by ti mělo stačit, abys pochopil princip. Ta druha funkce bude podobná, ale to už snad zvladneš.

KLAVESY = (
            ("a","b","c"),
            ("e", "f", "g"),
            ("h", "i","j", "k")
            )

def preved(text):
    prevod = list()
    for pismeno in text:
        for i, klavesa in enumerate(KLAVESY):
            if pismeno in klavesa:
                prevod.append((klavesa.index(pismeno)+1) * str(i+1))
                break
        else:
            prevod.append("?")
    return " ".join(prevod)

print(preved("afjxa"))
# Vypise "1 22 333 ? 1"
Nahlásit jako SPAM
IP: 178.72.234.–
gcx110
Návštěvník
6. 1. 2015   #3
-
0
-

#1 Kuba
Nebo by to šlo přes slovník, ale v tomto případě je to možná moc pracné.

#!/usr/bin/env python3

klavesy = {"+":"1", "-":"11", "=":"111"}

def preved(text):
    prevod = []
    for znak in text:
        prevod.append(klavesy.get(znak, "?"))
    return " ".join(prevod)

print(preved("+-x"))
Nahlásit jako SPAM
IP: 79.110.44.–
K-autor
~ Anonymní uživatel
1 příspěvek
6. 1. 2015   #4
-
+1
-
Zajímavé

#2 hanpari
Díky za pomoc, tímto může být toto vlákno uzavřeno.

Nahlásit jako SPAM
IP: 89.190.52.–
Petra
~ Anonymní uživatel
24 příspěvků
5. 10. 2016   #5
-
0
-

Zdravím, dostala jsem stejný úkol a také si s ním nevím rady, i přesto že zkouším to, co tu je, stále mi to nefunguje :( . Můžete mi, prosím, někdo poradit, co s tím? Pracuji ve Visual Studiu.

Nahlásit jako SPAM
IP: 85.70.251.–
peter
~ Anonymní uživatel
4014 příspěvků
5. 10. 2016   #6
-
0
-

v js by se to dalo napsat takto.
 

<script>
var woc, str, chr, tmp, n, out, outX;
woc = ' 0;+-=*/_.,?1;abcáč2;defďéě3;ghií4;jkl5;mnoňó6;pqrsřš7;tuvťúů8;wxyzýž9';
woc = woc.split(';');
for (i=0;i<woc.length;i++) {woc[i] = woc[i].split('');}

str = '24466651111111';

outX = '';
outX += str + "\n";

n   = 0;
tmp = '';
out = '';
for (i=0;i<str.length;i++)
	{
	chr = str.charAt(i);	// str[i]
	if (tmp!=chr)
		{
		out += tmp!='' && woc[tmp*1] && woc[tmp*1][n] ? woc[tmp*1][n] : '';
		n = 0;
		tmp = chr;
		}
	else	{
		n++;
		}
	}
out += woc[tmp*1] && woc[tmp*1][n] ? woc[tmp*1][n] : '';

outX += out + "\n";

str = out;
//str = 'ahoj.';
out = '';
for (i=0;i<str.length;i++)
	{
	chr = str.charAt(i);	// str[i]
	for (j=0;j<woc.length;j++)
		{
		for (k=0;k<woc[j].length;k++)
			{
			if (chr==woc[j][k])
				{
				for (l=0;l<=k;l++)
					{
					out += '' + j;
					}
				break; break; // zastavit cyklus pro j, k
				}
			}
		}
	}

outX += out + "\n";
alert(outX);


</script>
Nahlásit jako SPAM
IP: 2001:718:2601:26c:d0b1:ef...–
hanpari0
Stálý člen
5. 10. 2016   #7
-
0
-

#5 Petra
Visual studio je prostředí. Jaký používáš programovací jazyk? Python, C#, F#, VB.NET?

Nahlásit jako SPAM
IP: 178.72.234.–
Petra
~ Anonymní uživatel
24 příspěvků
5. 10. 2016   #8
-
0
-

#7 hanpari
jazyk C# :)

Nahlásit jako SPAM
IP: 195.113.230.–
hanpari0
Stálý člen
5. 10. 2016   #9
-
0
-

#8 Petra
Jsi ve špatném vlákně, tady se řeší Python. Ale princip je stejný.

Nejprimitivnější řešení je něco na tento způsob:

using System.Collections.Generic;
var klavesy = new Dictionary<char, int>();
klavesy.Add('a', 1);
klavesy.Add('b', 2);
Console.WriteLine(klavesy['a']);

Tohle ti ale asi nebude fungovat. Jenom tady na vyzkoušení.

http://csharppad.com/

Prostě si udělej slovník, ve kterém na tvrdo zadáš očekávané vstupy. Pokud je písmeno ve slovníku, vrátíš číslo. Pokud není, vrátíš něco jiného. 

Nahlásit jako SPAM
IP: 178.72.234.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 9 hostů

Podobná vlákna

Pomoc s úkolem — založil Malirka

Problém s úkolem c++ — založil Michal

Helpnete s úkolem — založil Piskar10110010

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý