Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Martin Mazal :1.11.2020 16:28

Mám problém s jedním úkolem do školy, poradíte mi, kluci? Budu fakt vděčný:

Zkusil jsem: #/IT/ZakladPython

print("Vítejte u mého programu na vyhodnocování velkých, malých písmen a znaků!")
nazev = input("Můžeš zadat libovolné malé písmeno, velké písmeno nebo nějaké znaky\n")
odpoved= "Zadal jsi" #typ odpovědi
typ = ""

if nazev == "!":
typ =" je vykřičník!"
elif nazev == "?":
typ ="je otazník!"
elif nazev == "#":
typ ="je křížek!"
elif nazev == "*":
typ ="je hvězdička!"
elif nazev == "@":
typ ="je zavináč!"

if nazev =="a-z":
typ ="je malé písmeno."
elif nazev == "A-Z":
typ ="je velké písmeno."

else:
typ == "Tohle neznám!"

print(odpoved, typ)

Chci docílit: Snažím se naučit v Pythonu, ten jazyk se mi líbí. I jeho syntaxe apodobně, ale proč mi nefunguje tady tohle? Jak to mám třeba modifikovat ten "vzorec" tak, abych dosáhl to, co právě potřebuji? Zkoušel jsem různé klíče a možnosti, jak to zadat, ale absolutně mi nic nepomáhá. Pomohla by mi třeba ukázka, jak byste to řešili vy. Je ovšem zajímavé, že vykřičník a otazník funguje atd... proč mi nejdou malá a velká písmena?

 
Odpovědět
1.11.2020 16:28
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:2.11.2020 7:59
  1. if nazev =="a-z": - treba bych tam pouzil elseif nazev =="a-z": Navic se zda, ze porovnavas znak=="!".
  2. programovaci jazyk umi porovnat znak nebo skupinu znaku. Nevyhledava. Nepreklada tebou navrhovany string na kod. On ma vlastni pravidla, kterym rozumi, neumi odecitat z tve mysli.

google = python compare character with list of characters

https://www.thecoderpedia.com/blog/python-string-comparison/
country = "Germany"
print(country == "Germany")
print(country != "Germany")
Output:
True
False

print("germany" == "Germany")
print("germany" > "Germany")
print(ord("g"))
print(ord("G"))
Output:
False
True
103
71

string1 = input("Enter the value of string1: ")
string2 = input("Enter the value of string2: ")
string3 = string1
print(string1 == string2)
print(string1 != string2)
print(string1 <= string2) print(string1 >= string2)
print(string1 is string2)
print(string1 is string3)
Output:
Enter the value of string1: Hello World
Enter the value of string2: hello World
False
True
True
False
False
True

google = python compare character is a-z

https://stackoverflow.com/questions/57011986/how-to-check-that-a-string-contains-only-a-z-a-z-and-0-9-characters/57012038
import re
pattern = re.compile("[A-Za-z0-9]+")
pattern.fullmatch(string)

>>> all(c.isnumeric() or c.isalpha() for c in '123AbC')
True
>>> all(c.isnumeric() or c.isalpha() for c in '1&A')
False

import string
text = input("Enter: ")
correct = string.ascii_letters + string.digits
status = True
for char in text:
    if char not in correct:
        status = False
if status:
    print('Correct')
else:
    print('InCorrect')

import re
text = input("Enter: ")
result = re.sub("[A-Za-z0-9]", '', text)
if len(result) == 0:
    print("Success")
else:
    print("Failure")

google = python string contain character

https://www.afternerd.com/blog/python-string-contains/
>>> str = "Messi is the best soccer player"
>>> str.find("soccer")
18
>>> str.find("Ronaldo")
-1
>>> str.find("Messi")
0

Cili, moznosti je mnoho. Pro skolni priklad by asi nejlepsi bylo prevest znak na ord cislo a cislo pak muzes porovnat cislo>65 and cislo<70, napriklad.

Editováno 2.11.2020 8:00
 
Nahoru Odpovědět
2.11.2020 7:59
Avatar
Peter Mlich
Člen
Avatar
Odpovídá na Peter Mlich
Peter Mlich:2.11.2020 8:06
https://beginnersbook.com/2019/03/python-ord-function/

Nebo to mozna pujde i takto:

if (znak>'a' and znak<'z') ...
 
Nahoru Odpovědět
2.11.2020 8:06
Avatar
Odpovídá na Martin Mazal
Neaktivní uživatel:2.11.2020 17:18

Ahoj, k řešení ti stačí znalost dvou věcí a může to i vypadat celkem elegantně. 1) Základy regulárních výrazů 2) Slovník

import re

input = 'c'
SYMBOLS = {
    '@': 'zavináč',
    '*': 'hvězdička',
    '!': 'vykřičník',
}

if re.match(r'[a-za-ž]', input, flags=0):
    type = 'malé písmeno'
elif re.match(r'[A-ZA-Ž]', input, flags=0):
    type = 'velké písmeno'
elif re.match(r'[0-9]', input, flags=0):
    type = 'číslo'
elif input in SYMBOLS:
    type = SYMBOLS[input]
else:
    type = 'nevím'

print('Vstup je ' + type)

Třeba si můžeš ta písmena rozdělit na ta s diakritikou a bez ní, to už je dál na tobě.

Nahoru Odpovědět
2.11.2020 17:18
Neaktivní uživatelský účet
Avatar
Pavel
Člen
Avatar
Pavel:2.11.2020 17:25

Python bere 'a-z' jako retez, pripadne iterable o trech znacich. Pokud chces zjistit jestli uzivatel zadal male/velke pismeno muzes pouzit regularni vyrazy (viz vyse), coz je podle me overkill, nebo muzes pouzit syntaxi "element in iterable" kde jako iterable pouzijes prislusnych 26 znaku abecedy. Ty muzes bud napsat rucne, nebo vyuzit knihovny string.

from string import ascii_lowercase, ascii_uppercase


print("Vítejte u mého programu na vyhodnocování velkých, malých písmen a znaků!")
nazev = input("Můžeš zadat libovolné malé písmeno, velké písmeno nebo nějaké znaky\n")
odpoved= "Zadal jsi" #typ odpovědi
typ = ""


if nazev == "!":
    typ =" je vykřičník!"
elif nazev == "?":
    typ ="je otazník!"
elif nazev == "#":
    typ ="je křížek!"
elif nazev == "*":
    typ ="je hvězdička!"
elif nazev == "@":
    typ ="je zavináč!"

if nazev in ascii_lowercase: # ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz'
    typ ="je malé písmeno."
elif nazev in ascii_uppercase: # ascii_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    typ ="je velké písmeno."
else:
    typ == "Tohle neznám!"

print(odpoved, typ)
 
Nahoru Odpovědět
2.11.2020 17:25
Avatar
Odpovídá na Peter Mlich
Martin Mazal :2.11.2020 18:47

Děkuju za pomoc! Přišel jsem na to! :)

 
Nahoru Odpovědět
2.11.2020 18:47
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:3.11.2020 8:03

Treba prevod na base64 se dela tak, ze se pouzije string jako pole nebo funkci :)
Udelani si podobnou funkci by mohlo dat casove rychlejsi vysledky nez regularni vyrazy.
https://en.wikibooks.org/…neous/Base64

Editováno 3.11.2020 8:03
 
Nahoru Odpovědět
3.11.2020 8:03
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.