Aplikacja konsolowa zadająca pytania i liczącą odpowiedzi

0

Witajcie.
Proszę o pomoc jak to zrobić, z góry wielkie dzięki:
Stworzyć program zadający 10 pytań o daty, np:
"W którym roku wybuchła II wojna światowa?"
Po zakończeniu testu program ma wyświetlić statystyki odpowiedzi (ilość prawidłowych, złych oraz procent prawidłowych).
Program ma pytać o odpowiedź na poszczególne pytanie do czasu wpisania jakiejkolwiek odpowiedzi - w przypadku pustej odpowiedzi pyta ponownie.
Program ma losować kolejność pytań.

Zacząłem tak, nie wiem jak dalej:
odp_pop = 0
odp_zl = 0
odp = input("W którym roku wybuchła II wojna światowa?")
if odp == "1939":
odp_pop = odp_pop + 1
else:
odp_zl = odp_zl + 1

print "Odpowiedzi poprawnych udzielono: " + str(odp_pop)
print "Odpowiedzi złych udzielono: " + str(odp_zl)

2

pytania możesz trzymać w jakiejś liście, razem z odpowiedziami np.

questions = [
   ("W którym roku wybuchła II wojna światowa?", "1939"),
   ("Stolica Polski?", "Warszawa"), 
]

for (text, correct_answer) in questions:
    answer = input(text + "\n")
    if answer == correct_answer: 
        print("Tak")
    else:
        print("Nie")
0
LukeJL napisał(a):

pytania możesz trzymać w jakiejś liście, razem z odpowiedziami np.

questions = [
   ("W którym roku wybuchła II wojna światowa?", "1939"),
   ("Stolica Polski?", "Warszawa"), 
]

for (text, correct_answer) in questions:
    answer = input(text + "\n")
    if answer == correct_answer: 
        print("Tak")
    else:
        print("Nie")

Mógłbyś to sprawdzić? Mam problem z podsumowaniem każdej odpowiedzi ilość dobrych i złych.

odp_pop = 0
odp_zl = 0
odp = input("W którym roku wybuchła II wojna światowa?")
if odp == "1939":
 odp_pop = odp_pop + 1
else:
 odp_zl = odp_zl + 1
 
print "Odpowiedzi poprawnych udzielono: " + str(odp_pop)
print "Odpowiedzi złych udzielono: " + str(odp_zl)

odp_pop = 1
odp_zl = 0
odp = input("W którym roku był Chrzest Polski?")
if odp == "966":
 odp_pop = odp_pop + 1
else:
 odp_zl = odp_zl + 1
 
print "Odpowiedzi poprawnych udzielono: " + str(odp_pop)
print "Odpowiedzi złych udzielono: " + str(odp_zl)

odp_pop = 2
odp_zl = 0
odp = input("W którym roku była bitwa pod Grunwaldem?")
if odp == "1410":
 odp_pop = odp_pop + 1
else:
 odp_zl = odp_zl + 1
 
print "Odpowiedzi poprawnych udzielono: " + str(odp_pop)
print "Odpowiedzi złych udzielono: " + str(odp_zl)


procent = (odp_pop/10 ) * 100
print("masz " + str(procent) + "% odpowiedzi poprawnych!")
2

@Daro22: Najpierw zrób listę oraz użyj pętli, tak jak radził @LukeJL.

Żeby podsumować odpowiedzi, wystarczy zwiększanie licznika, w tym bloku kodu, w którym @LukeJL napisał print("Tak").

ps. Zacznij formatować kod! W prawym dolnym rogu podczas edycji posta masz Instrukcję obsługi Markdown.

0
Spine napisał(a):

@Daro22: Najpierw zrób listę oraz użyj pętli, tak jak radził @LukeJL.

Żeby podsumować odpowiedzi, wystarczy zwiększanie licznika, w tym bloku kodu, w którym @LukeJL napisał print("Tak").

ps. Zacznij formatować kod! W prawym dolnym rogu podczas edycji posta masz Instrukcję obsługi Markdown.

Nie wiem jak to zrobić, próbuje i mam błędy.

0

Kod jest poprawny: https://ideone.com/POZF6y
Jakie masz błędy?

0
Spine napisał(a):

Kod jest poprawny: https://ideone.com/POZF6y
Jakie masz błędy?

brak jest
Program ma pytać o odpowiedź na poszczególne pytanie do czasu wpisania jakiejkolwiek odpowiedzi - w przypadku pustej odpowiedzi pyta ponownie a tu jest że NIE lub TAK a ma być do skutku .
Program ma losować kolejność pytań tego brakuje
Po zakończeniu testu program ma wyświetlić statystyki odpowiedzi (ilość prawidłowych, złych oraz procent prawidłowych) też brakuje

0
Spine napisał(a):

Kod jest poprawny: https://ideone.com/POZF6y
Jakie masz błędy?

Zrobiłem tak: proszę o dalszą pomoc.

questions = [
   ("W którym roku wybuchła II wojna światowa?", "1939"),
   ("W którym roku był Chrzest Polski?", "966"), 
   ("W którym roku była bitwa pod Grunwaldem?", "1410"),
   ("Pierwszy król Polski, Bolesław Chrobry, został koronowany?", "1025"),
   ("Pierwszy rozbiór Polski miał miejsce?", "1772"),
   ("Czy pamiętasz, w którym roku wybuchło powstanie listopadowe?", "1830"),
   ("Rewolucja październikowa, nazywana też rewolucją bolszewicką, rozpoczęła się?", "1917"),
   ("Zrzucenie bomby na japońskie miasta - Hiroshimę i Nagasaki, miało miejsce?", "1945"),
   ("Kiedy runął mur berliński?", "1989"),
   ("Rozpoczęcie obrad Okrągłego Stołu?", "1989")
]

for (text, correct_answer) in questions:
    answer = input(text + "\n")
    if answer == correct_answer: 
        print("Dobrze")
    else:
        print("Źle")
2
Daro22 napisał(a):

Program ma pytać o odpowiedź na poszczególne pytanie do czasu wpisania jakiejkolwiek odpowiedzi - w przypadku pustej odpowiedzi pyta ponownie a tu jest że NIE lub TAK a ma być do skutku .
Program ma losować kolejność pytań tego brakuje
Po zakończeniu testu program ma wyświetlić statystyki odpowiedzi (ilość prawidłowych, złych oraz procent prawidłowych) też brakuje

I czego się nauczysz, jak ktoś uzupełni ten kod za Ciebie?
Z każdym problemem powinieneś lecieć do google, a nie pisać tego nam tutaj...
A przede wszystkim powinieneś przerobić jakiś podstawowy kurs od początku do końca.

Program ma losować kolejność pytań

import random
# ...
random.shuffle(questions)

Program ma pytać o odpowiedź na poszczególne pytanie do czasu wpisania jakiejkolwiek odpowiedzi - w przypadku pustej odpowiedzi pyta ponownie a tu jest że NIE lub TAK a ma być do skutku .

for (question, correct_answer) in questions:
	while True:
		answer = input(question + "\n")
		
		if answer.strip() == "":
			continue
		# ...
		break

Po zakończeniu testu program ma wyświetlić statystyki odpowiedzi (ilość prawidłowych, złych oraz procent prawidłowych)

good_answers = 0
# ...
		if answer == correct_answer:
			print("Dobrze")
			good_answers += 1
# ...
print("Dobre odpowiedzi: %d"%(good_answers,))
print("  Złe odpowiedzi: %d"%(len(questions) - good_answers,))
print("           Wynik: %d%%"%(int(100 * good_answers/len(questions)),))
49

A gdy by tak zrobić to obiektowo? :P

from dataclasses import dataclass
from typing import List, Dict

@dataclass
class Question:
    content: str
    correct_answer: str

class Quiz:
    def __init__(self):
        self.wrong_answers = 0
        self.correct_answers = 0


    def play(self, questions: List[Question]):
        for question in questions:
            user_answer = input(f"{question.content}: ")
            if user_answer == question.correct_answer:
                self.correct_answers += 1
            else:
                self.wrong_answers += 1

    @property
    def statistics(self) -> Dict[str, int]:
        return {
            "questions number": self.wrong_answers + self.correct_answers,
            "correct": self.correct_answers,
            "wrong": self.wrong_answers
        }

if __name__ == "__main__":
    questions_raw = [
        ("W którym roku wybuchła II wojna światowa?", "1939"),
        ("W którym roku był Chrzest Polski?", "966"),
        ("W którym roku była bitwa pod Grunwaldem?", "1410"),
        ("Pierwszy król Polski, Bolesław Chrobry, został koronowany?", "1025"),
        ("Pierwszy rozbiór Polski miał miejsce?", "1772"),
        ("Czy pamiętasz, w którym roku wybuchło powstanie listopadowe?", "1830"),
        ("Rewolucja październikowa, nazywana też rewolucją bolszewicką, rozpoczęła się?", "1917"),
        ("Zrzucenie bomby na japońskie miasta - Hiroshimę i Nagasaki, miało miejsce?", "1945"),
        ("Kiedy runął mur berliński?", "1989"),
        ("Rozpoczęcie obrad Okrągłego Stołu?", "1989")
    ]
    questions: List[Question] = [Question(*x) for x in questions_raw]

    quiz = Quiz()

    quiz.play(questions=questions)

    print(quiz.statistics)


Pytania oczywiście warto wrzucić w jakiś txt/jsona/osobna funkcje

0
ledi12 napisał(a):

A gdy by tak zrobić to obiektowo? :P

from dataclasses import dataclass
from typing import List, Dict

@dataclass
class Question:
    content: str
    correct_answer: str

class Quiz:
    def __init__(self):
        self.wrong_answers = 0
        self.correct_answers = 0


    def play(self, questions: List[Question]):
        for question in questions:
            user_answer = input(f"{question.content}: ")
            if user_answer == question.correct_answer:
                self.correct_answers += 1
            else:
                self.wrong_answers += 1

    @property
    def statistics(self) -> Dict[str, int]:
        return {
            "questions number": self.wrong_answers + self.correct_answers,
            "correct": self.correct_answers,
            "wrong": self.wrong_answers
        }

if __name__ == "__main__":
    questions_raw = [
        ("W którym roku wybuchła II wojna światowa?", "1939"),
        ("W którym roku był Chrzest Polski?", "966"),
        ("W którym roku była bitwa pod Grunwaldem?", "1410"),
        ("Pierwszy król Polski, Bolesław Chrobry, został koronowany?", "1025"),
        ("Pierwszy rozbiór Polski miał miejsce?", "1772"),
        ("Czy pamiętasz, w którym roku wybuchło powstanie listopadowe?", "1830"),
        ("Rewolucja październikowa, nazywana też rewolucją bolszewicką, rozpoczęła się?", "1917"),
        ("Zrzucenie bomby na japońskie miasta - Hiroshimę i Nagasaki, miało miejsce?", "1945"),
        ("Kiedy runął mur berliński?", "1989"),
        ("Rozpoczęcie obrad Okrągłego Stołu?", "1989")
    ]
    questions: List[Question] = [Question(*x) for x in questions_raw]

    quiz = Quiz()

    quiz.play(questions=questions)

    print(quiz.statistics)


Pytania oczywiście warto wrzucić w jakiś txt/jsona/osobna funkcje

witam.
Nie działa to.

1

witam.
Nie działa to.

Bardzo wyczerpująca odpowiedź XD

Jaką masz wersję Pythona, 2 czy 3? Pewnie Python 2, bo wrzuciłeś kod z print "", a dataclass wprowadzili w 3.7. Jak nie wiesz jak sprawdzić, to sprawdź w google.

0
szafran98 napisał(a):

witam.
Nie działa to.

Bardzo wyczerpująca odpowiedź XD

Jaką masz wersję Pythona, 2 czy 3? Pewnie Python 2, bo wrzuciłeś kod z print "", a dataclass wprowadzili w 3.7. Jak nie wiesz jak sprawdzić, to sprawdź w google.

sorki, ale nie znam się na tym, mam zadanie do zrobienia i jest to dla mnie trudne, nie mogę sobie z tym poradzić .
Czy ktoś z Was jest w stanie pomóc i podać zapis kodu, bardzo dziękuję z góry.
Sprawdzam zapis kodu online na stronie https://trinket.io/python

3

Ledi12 podał Ci eleganckie rozwiązanie, właściwie gotowiec. Nie sądzisz, że fajnie by było gdybyś wykazał się minimum zaangażowania i dał odpowiedź na tak podstawowe pytanie?

Znalezienie sposobu na sprawdzenie wersji Pythona w runtime zajęło mi między 40, a 45 sekund. Wyszukiwarka google to potężne narzędzie, które daje Ci dostęp do gigantycznej wiedzy, a ludzie o zgrozo, nie umieją z niego korzystać. Skoro masz do zrobienia zadanie w Pythonie, to jest to chyba jakiś kierunek bezpośrednio lub pośrednio związany z IT, co jest tym bardziej niezrozumiałe.

Popatrz na ten przypadek. Masz dowiedzieć się, z jakiej wersji Pythona korzystasz, tłumaczysz to sobie na angielski, chociaż pewnie nawet po polsku takie coś byś znalazł. Wpisujesz w google check python version at runtime i no popatrz, magia. W pierwszym wyniku masz odpowiedź na zadane pytanie. Stałeś się mądrzejszy o jedno zagadnienie, a uwaga, można tak zrobić ze wszystkim. To naprawdę nie jest rocket science.

Po sprawdzeniu wychodzi, że strona, której używasz, ma wersję 3.2. No i teraz pomyślmy, czy 3.7 > 3.2? No tak, więc nie sprawdzaj na tej stronie, tylko postaw projekt lokalnie. Jeśli bardzo chcesz mieć interpreter i edytor online, to tutaj https://replit.com/

0
szafran98 napisał(a):

Ledi12 podał Ci eleganckie rozwiązanie, właściwie gotowiec. Nie sądzisz, że fajnie by było gdybyś wykazał się minimum zaangażowania i dał odpowiedź na tak podstawowe pytanie?

Znalezienie sposobu na sprawdzenie wersji Pythona w runtime zajęło mi między 40, a 45 sekund. Wyszukiwarka google to potężne narzędzie, które daje Ci dostęp do gigantycznej wiedzy, a ludzie o zgrozo, nie umieją z niego korzystać. Skoro masz do zrobienia zadanie w Pythonie, to jest to chyba jakiś kierunek bezpośrednio lub pośrednio związany z IT, co jest tym bardziej niezrozumiałe.

Popatrz na ten przypadek. Masz dowiedzieć się, z jakiej wersji Pythona korzystasz, tłumaczysz to sobie na angielski, chociaż pewnie nawet po polsku takie coś byś znalazł. Wpisujesz w google check python version at runtime i no popatrz, magia. W pierwszym wyniku masz odpowiedź na zadane pytanie. Stałeś się mądrzejszy o jedno zagadnienie, a uwaga, można tak zrobić ze wszystkim. To naprawdę nie jest rocket science.

Po sprawdzeniu wychodzi, że strona, której używasz, ma wersję 3.2. No i teraz pomyślmy, czy 3.7 > 3.2? No tak, więc nie sprawdzaj na tej stronie, tylko postaw projekt lokalnie. Jeśli bardzo chcesz mieć interpreter i edytor online, to tutaj https://replit.com/

Ale się naopowiadacie, jeśli jesteście takimi geniuszami to co Wam szkodzi podać kod, nie potrzebuje lekcji wychowawczych.
Pozdrawiam

0
Daro22 napisał(a):
szafran98 napisał(a):

Ledi12 podał Ci eleganckie rozwiązanie, właściwie gotowiec. Nie sądzisz, że fajnie by było gdybyś wykazał się minimum zaangażowania i dał odpowiedź na tak podstawowe pytanie?

Znalezienie sposobu na sprawdzenie wersji Pythona w runtime zajęło mi między 40, a 45 sekund. Wyszukiwarka google to potężne narzędzie, które daje Ci dostęp do gigantycznej wiedzy, a ludzie o zgrozo, nie umieją z niego korzystać. Skoro masz do zrobienia zadanie w Pythonie, to jest to chyba jakiś kierunek bezpośrednio lub pośrednio związany z IT, co jest tym bardziej niezrozumiałe.

Popatrz na ten przypadek. Masz dowiedzieć się, z jakiej wersji Pythona korzystasz, tłumaczysz to sobie na angielski, chociaż pewnie nawet po polsku takie coś byś znalazł. Wpisujesz w google check python version at runtime i no popatrz, magia. W pierwszym wyniku masz odpowiedź na zadane pytanie. Stałeś się mądrzejszy o jedno zagadnienie, a uwaga, można tak zrobić ze wszystkim. To naprawdę nie jest rocket science.

Po sprawdzeniu wychodzi, że strona, której używasz, ma wersję 3.2. No i teraz pomyślmy, czy 3.7 > 3.2? No tak, więc nie sprawdzaj na tej stronie, tylko postaw projekt lokalnie. Jeśli bardzo chcesz mieć interpreter i edytor online, to tutaj https://replit.com/

Ale się naopowiadacie, jeśli jesteście takimi geniuszami to co Wam szkodzi podać kod, nie potrzebuje lekcji wychowawczych.
Pozdrawiam

Mnóstwo jest jest takich miejsc, gdzie chłopaki doradzą i pomogą, dzięki za pomoc.
Wesołych Świąt.

1

To przecież temat jest już zamknięty i otrzymałeś to co chciałeś, więc rościmy sobie prawo do małej dygresji i tak też robimy.

0
Daro22 napisał(a):
szafran98 napisał(a):

Ledi12 podał Ci eleganckie rozwiązanie, właściwie gotowiec. Nie sądzisz, że fajnie by było gdybyś wykazał się minimum zaangażowania i dał odpowiedź na tak podstawowe pytanie?

Znalezienie sposobu na sprawdzenie wersji Pythona w runtime zajęło mi między 40, a 45 sekund. Wyszukiwarka google to potężne narzędzie, które daje Ci dostęp do gigantycznej wiedzy, a ludzie o zgrozo, nie umieją z niego korzystać. Skoro masz do zrobienia zadanie w Pythonie, to jest to chyba jakiś kierunek bezpośrednio lub pośrednio związany z IT, co jest tym bardziej niezrozumiałe.

Popatrz na ten przypadek. Masz dowiedzieć się, z jakiej wersji Pythona korzystasz, tłumaczysz to sobie na angielski, chociaż pewnie nawet po polsku takie coś byś znalazł. Wpisujesz w google check python version at runtime i no popatrz, magia. W pierwszym wyniku masz odpowiedź na zadane pytanie. Stałeś się mądrzejszy o jedno zagadnienie, a uwaga, można tak zrobić ze wszystkim. To naprawdę nie jest rocket science.

Po sprawdzeniu wychodzi, że strona, której używasz, ma wersję 3.2. No i teraz pomyślmy, czy 3.7 > 3.2? No tak, więc nie sprawdzaj na tej stronie, tylko postaw projekt lokalnie. Jeśli bardzo chcesz mieć interpreter i edytor online, to tutaj https://replit.com/

Ale się naopowiadacie, jeśli jesteście takimi geniuszami to co Wam szkodzi podać kod, nie potrzebuje lekcji wychowawczych.
Pozdrawiam

tak na marginesie sprawdzałem wersje kodem,
import platform
print(platform.python_version())

używam wersji 3.8.5
https://www.programiz.com/python-programming/online-compiler/

0

@Daro22: Pisałem Ci już w komentarzu, żebyś nie cytował całych postów, kiedy nie ma takiej potrzeby...

47

Ohh jaki Pan roszczeniowy. Za jakiekolwiek rozwiązanie, programista mógłby Cię naliczyć zgodnie ze swoją stawką godzinową, więc doceń, że komukolwiek chciało się Ci pomóc. Równie dobrze ten temat mógł trafić do Ogłoszenia drobne. Zatem, proszę daruj wstawki o lekcjach wychowawczych, bo jedynym "niewychowanym" osobnikiem zdajesz się być Ty.

1 użytkowników online, w tym zalogowanych: 0, gości: 1