NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: parsování

Aktivity
Avatar
heavyblack1
Člen
Avatar
heavyblack1:8.5.2015 21:35

Když uživatel zadá 3,5 místo 3.5 tak to nefunguje tak jak má proto jsem to chtěl dát do str a pak float ale někde mám chybu a nevím kde.

# -*- coding: utf-8 -*-
__author__ = 'heavyblack1'
import math
import sys


print("Vítá vás program Matematikátor.")
print("Autor:heavyblack1 program je opensource\n")
pokracovat = True
while pokracovat:
    print("Při vypočtech s jedním číslem např:sinus se bere první číslo")
    try:
        pr_cislo = str(input("Zadejte první číslo: "))
    except:
        print()
    try:
        dr_cislo = str(input("Zadejte druhé číslo: "))
    except:
        print()
    try:
        if pr_cislo == 0 and dr_cislo == 0:
            print("Žadné číslo")
            sys.exit()
    except:
        print("Žadné číslo")
        sys.exit()

    prvni_cislo = str.replace(pr_cislo, ',', '.')
    print(prvni_cislo)


    try:
        str(float(prvni_cislo))
    except ValueError:
        print("Value Error")
    print(prvni_cislo == float)

    druhe_cislo = str.replace(dr_cislo, ',', '.')
    print(druhe_cislo)
    print(druhe_cislo == float)


    try:
        float(str(druhe_cislo))
    except ValueError:
        print("Value Error")

    print("\n0 - Vypnout")
    print("\n1 - sčítání")
    print("2 - odčítání")
    print("3 - násobení")
    print("4 - dělení")
    print("\nPower and logarithmic functions")
    print("\n5 - umocňování")
    print("6 - odmocňování")
    print("\nTrigonomické funkce")
    print("\n7 - Sinus")
    print("8 - Kosinus")
    print("9 - Tangens")

    try:
        cislo_operace = int(input("Zadejte číslo operace: "))
    except:
        print("Špatná volba")
    try:
        if cislo_operace >= 0 and cislo_operace <= 9:
            try:
                if cislo_operace == 1:
                    print("Součet :", prvni_cislo + druhe_cislo)
            except:
                print("Desetiná čarka je tečka")
        elif cislo_operace == 2:
            print("Rozdíl :", prvni_cislo - druhe_cislo)
        elif cislo_operace == 3:
            print("Součin :", prvni_cislo * druhe_cislo)
        elif cislo_operace == 4:
            try:
                print("Podíl :", prvni_cislo / druhe_cislo)
            except:
                print("Nelze dělit nulou")
        elif cislo_operace == 5:
            print("Součin :", prvni_cislo ** druhe_cislo)
        elif cislo_operace == 6:
            try:
                print("Druhá odmocnina :", math.sqrt(prvni_cislo))
            except:
                print("Nelze odmocnit záporné číslo")
        elif cislo_operace == 0:
            pokracovat = False
        elif cislo_operace == 7:
            print("Sinus uhlu", math.sin(prvni_cislo))
        elif cislo_operace == 8:
            print("Kosinus uhlu", math.cos(prvni_cislo))
        elif cislo_operace == 9:
            print("Tangens uhlu", math.tan(prvni_cislo))
        else:
            print("Špatná volba")
    except:
        print("Špatná volba")
    nezadano = True
    while nezadano:
        odpoved = input("\nPřejete si zadat další příklad? y / n: ")
        if (odpoved == "y" or odpoved == "Y"):
            nezadano = False
        elif (odpoved == "n" or odpoved == "n"):
            nezadano = False
            pokracovat = False
        else:
            pass
input("\nStiskněte libovolnou klávesu...")
 
Odpovědět
8.5.2015 21:35
Avatar
hanpari
Člen
Avatar
Odpovídá na heavyblack1
hanpari:9.5.2015 7:24

nahrad carku za tecku a melo by to fungovat. Python neumi cesky zapis desetinnych cisel

 
Nahoru Odpovědět
9.5.2015 7:24
Avatar
hanpari
Člen
Avatar
hanpari:9.5.2015 7:29

Asi takto:

s=input()
>>>1,2
float(s.replace(",","."))
>>>1.2

Fungovat to bude i pro desetinnou tecku.

 
Nahoru Odpovědět
9.5.2015 7:29
Avatar
hanpari
Člen
Avatar
hanpari:9.5.2015 7:30

Asi takto:

s=input()
>>>1,2
float(s.replace(",","."))
>>>1.2

Fungovat to bude i pro desetinnou tecku.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
9.5.2015 7:30
Avatar
Darlinkster
Tvůrce
Avatar
Darlinkster:9.5.2015 8:15

U to vstupu těch čísel to nemusíš přetypovávat na string protože input ti vrací string sám

str(input("Zadejte první číslo: "))
input("Zadejte první číslo: ") # input vrací string bez přetypování

Dále nechápu proč jsi udělal toto

str(float(prvni_cislo))

ze stringu to převedeš na float a poté zase na string jaký to má význam ?

Nahoru Odpovědět
9.5.2015 8:15
Budoucnost je v programování a informační technologii, proto programátoři řídí svět
Avatar
heavyblack1
Člen
Avatar
Odpovídá na Darlinkster
heavyblack1:9.5.2015 11:30

Omylem jsem to přehodil

str(float(prvni_cislo))

Jinak díky

Editováno 9.5.2015 11:31
 
Nahoru Odpovědět
9.5.2015 11:30
Avatar
hanpari
Člen
Avatar
Odpovídá na heavyblack1
hanpari:9.5.2015 13:38

Tady máš ještě tip na to, jak to můžeš zjednodušit :)

import operator as op

OPERACE = {
    "+" : op.add,
    "-" : op.sub,
    "*" : op.mul,
    "/" : op.truediv
            }

for znamenko in ("+-*/"):
    print(OPERACE[znamenko](10,2))

#Vypíše
>>>
12
8
20
5.0
 
Nahoru Odpovědět
9.5.2015 13:38
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.