Kurs języka Python - zadania .

0

Witam!

Rozwiązuje sobie zadania z http://www.ii.uni.wroc.pl/~marcinm/dyd/python/listazad.pdf i co do zadania 1:
Rozwiązałem je niby ale mam wrażenie że mój kod jest trochę "słaby" (bardzo) chodź program działa :D

import random

a = 0
b=0

def rzut_kostka():
    global a
    global b
    a = random.randint(1,6)
    b = random.randint(1,6)
    return True

x = input("Ile tur: ")

pointsplayer1 = 0
pointsplayer2 = 0
resultplayer1 = 0
resultplayer2 = 0

for i in range(x):
    rzut_kostka()
    print "Gracz 1: ","Dwa rzuty=",a+b
    pointsplayer1 = a+b
    print "Rzut pierwszy: ",a
    print "Rzut drugi: ",b
    rzut_kostka()
    print "Gracz 2: ","Dwa rzuty=",a+b
    pointsplayer2 = a+b
    print "Rzut pierwszy: ",a
    print "Rzut drugi: ",b
    if pointsplayer1 > pointsplayer2:
        resultplayer1 = resultplayer1+1
    elif pointsplayer2 > pointsplayer1:
        resultplayer2 = resultplayer2+1
    elif pointsplayer2 == pointsplayer1:
        print "Dogrywka!"
        x = x-1
    if i==x and resultplayer2 > resultplayer1:
        print "#####################################"
        print "Punkty gracza 1: ",resultplayer1
        print "Punkty gracza 2: ",resultplayer2
        print "Wygrał gracz 2: ",resultplayer2
        print "#####################################"
    elif i==x and resultplayer1 > resultplayer2:
        print "#####################################"
        print "Punkty gracza 1: ",resultplayer1
        print "Punkty gracza 2: ",resultplayer2
        print "Wygrał gracz 1: ",resultplayer1
        print "#####################################"
    elif i==x and resultplayer1 == resultplayer2:
        print "#####################################"
        print "DOGRYWA KOŃCZOŃCA GRE !"
        print "#####################################"
        i=i-1
0
  1. WTF? Po co te globale? Nie mogłeś po prostu zwrócić a i b z funkcji?
  2. Przepisz to tak zeby graczy bylo N a każdy miał K rzutów kostką. Może to pomoże ci włączyć myślenie.
0

Zacznij od: http://en.wikipedia.org/wiki/Don%27t_repeat_yourself (Najlepiej powtarzac jak mantre przed zasnieciem, w trakcie kapieli, przy jedzeniu, w kosciele zamiast rozanca, etc).
Potem sie przyda: http://goo.gl/8CHk3g
Pozniej mozna sie brac za: http://en.wikipedia.org/wiki/Object-oriented_programming

0

Dobra zaraz coś wymyśle z tych podpowiedzi .

from random import randint
def rzut_kostka(tury):
    p1 = 0
    p2 = 0
    for i in range(tury):
        rzut1 = randint(1,6)
        rzut2 = randint(1,6)
        if rzut1 > rzut2:
            p1 = p1+1
        elif rzut2 > rzut1:
            p2 = p2+1
    if p1>p2:
        print "Wygral gracz 1.",p1 ,"-",p2
    elif p2>p1:
        print "Wygrał gracz 2.",p2 ,"-",p1
    else:
        tury = tury+1
tury = input("Ile tur?: ")
rzut_kostka(tury)

A co myślicie o tym kodzie ? Lepszy od tamtego ? :D

1

Lepiej, ale spróbuj teraz przepisać to dla N graczy zamiast 2 ;)

0

http://4programmers.net/Pastebin/3353

ok już za to się biorę, jak mozesz to sklej moje posty.

0

from random import randint

from random import randint

def rzut_kostka(licz_tur,licz_graczy):
    gracze = {}
    licz_gracz = []
    for i in range(licz_graczy):
        licz_gracz.append("Gracz"+str(i+1))
    for i in range(len(licz_gracz)):
        rzut1 = randint(1,6)
        rzut2 = randint(1,6)
        gracze[licz_gracz[i]] = rzut1 + rzut2 

licz_graczy = input("Liczba graczy: ")
licz_tur = input("Liczba tur: ")
rzut_kostka(licz_tur,licz_graczy)

stoję na tym ... i nie wiem jak teraz to zrobić (wybrać key ze słownika o największej wartości) może tak się nie da zrobić - jeśli można to proszę o wskazówkę .

0

Za bardzo wszystko komplikujesz. Po co ci w ogóle ta lista z niby-graczami? Ja bym zrobił tak:

from random import randint
from builtins import range, input, sum, max, int


def roll(turns):
    return [randint(1, 6) for _i in range(turns)]


def dice_rolls(turns, players):
    return {"%s_%d" % ("Gracz", i): roll(turns) for i in range(players)}


def get_winner(results):
    rolls_sum = {player: sum(rolls) for (player, rolls) in results.items()}
    return max(rolls_sum.items(), key=lambda x: x[1])


def main():
    players = int(input("Liczba graczy: "))
    turns = int(input("Liczba tur: "))
    results = dice_rolls(turns, players)
    winner = get_winner(results)
    print(winner)

main()

roll zwraca nam listę wylosowanych oczek w zadanej liczbie tur.
dice_rolls zwraca słownik który mapuje gracza na jego wynik
get_winner sumuje liczbę oczek dla każdego gracza a potem wybiera tego który ma najwięcej

0

Dobra, ja dziękuje ci za pomoc - jutro przeanalizuje twój kod z rana bo już dziś idę spać 1:22 u nas :D

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