Satunnainen D20-numerogeneraattori
On helmikuu 9, 2021 by adminOpetan itselleni koodia Zed Shaw: n avulla ”s Pythonin oppiminen Vaikea tie , ja kyllästyin yhdessä muistiopetuksen aikana, joten ajattelin tehdä satunnaisen D20-lukugeneraattorin, kun pelaan RPGS: ää.
Kuinka voin parantaa tätä koodia? Onko jotain tyhmää, mitä teen?
import random name = raw_input("Please Type in your name > ") print "\nHello %s & welcome to the Random D20 Number Generator by Ray Weiss.\n" % (name) first_number = random.randint(1, 20) print first_number prompt = (""" Do you need another number? Please type yes or no. """) answer = raw_input(prompt) while answer == "yes": print random.randint(1, 20) answer = raw_input(prompt) if answer == "no": print "\nThank you %s for using the D20 RNG by Ray Weiss! Goodbye!\n" % (name)
Lopulta haluaisin lisätä toimintoja, jotta se kysyisi sinulta, millaista ja kuinka monta noppaa haluat tehdä , mutta toistaiseksi tähän mennessä tekemäni arvostelu todella auttaisi.
Kommentit
- Ehkä sisällytetään joitain asioita tähän vastaukseen. : gamedev.stackexchange.com/questions/24656/…
Vastaa
Tässä on otan:
from random import randint name = raw_input("Please Type in your name > ") print """ Hello {} & welcome to the Random Number Generator by Ray Weiss. """.format(name) upper = int(raw_input("Enter the upper limit > ")) n = int(raw_input("How many D{} you"d like to roll? ".format(upper))) for _ in xrange(n): print randint(1, upper) print """ Thank you {} for using the D{} RNG by Ray Weiss! Goodbye! """.format(name, upper)
Muutokset verrattuna versio:
- tuoda suoraan
randint
, koska se on ainoa toiminto, jota käytät ryhmässärandom
; - käytä uutta merkkijonon muotoilumenetelmää (
str.format
); - ota käyttäjältä yläraja kovakoodauksen 20 sijaan;
- ota käyttäjältä rullien määrä sen sijaan, että kysytään toistuvasti, riittääkö se;
- käytä toistoa silmukan avulla todella toimivat. Itse toistuva koodi, joka pyytää käyttäjää jatkamaan, on nyt poissa.
Kommentit
- Kiitos! Tämä on siistiä, aion leikkiä sen kanssa niin, että se kysyy edelleen, haluatko heittää enemmän noppaa, joitain uusia juttuja, joita en ole ennen nähnyt. Haluan kysyä mitä _väli (n) tekee? Voin tavallaan erottaa loput.
- @lerugray Tässä ’ s asiakirja
xrange
. Käytän sitä vain silmukan rungon suorittamiseenn
kertaa. - @lerugray, _ haskellissa tarkoittaa tyhjää nimeä (käytät sitä, kun sinun on annettava muuttuja mikä on hyödytöntä – kuten tässä silmukassa). Oletan, että sillä on sama merkitys pythonissa.
- @Aleksandar Teknisesti se ’ on täysin laillinen nimi, joten se voidaan olla käytetään silmukan sisällä, mutta ideasi on oikea. En tiennyt ’ tiennyt, että se tuli Haskellilta (ja en tiedä ’ ei tunne Haskellia), mutta sillä on paljon järkeä.
vastaus
Minulla ei ole paljon sanottavaa tyylipuolella, mikä on hyvä. Luulen, että ainoa todellinen kommentti on, että minusta henkilökohtaisesti on mielestäni yksinkertaista käyttää uuden rivin merkkejä kuin kolmoislainausmerkit monirivijonoille, varsinkin kun haluat vain varmistaa rivien välisen etäisyyden.
Pidän siitä, että käytät randint
rullille randrange
tai jonkin muun rakenteen sijaan: se sisältää alun ja lopun, ja se vastaa tarkalleen reaalimaailmaa toiminto, jonka luodaan uudelleen täällä, joten parametreja tai tuloksia ei tarvitse sekoittaa +1: llä.
Suunnittelun kannalta haluan jakaa käyttöliittymän, joka ottaa syötteen käyttäjälle ja antaa takaisin tietoja todellisesta noppavierityksestä. Sen avulla voit käyttää nopparullaa uudelleen muihin tarkoituksiin (pois pääni huipulla, satunnainen aartegeneraattori), laajenna käyttöliittymälogiikkaa lisätoiminnoilla tai muokkaa logiikkaasi pilkkomatta koko rakennetta.
Ja niin kauan kuin teet niin, ajattele isompi – ”Minun täytyy heittää d20” on vain yksittäinen tapaus ”Minun täytyy heittää noppaa”, eikä tuota ongelmaa ole paljon vaikeampaa ratkaista. Joten tässä lähestyisin sitä:
def play(): """ This function is just the user interface. It handles the input and output, and does not return anything. """ name = raw_input("Please Type in your name > ") print "\nHello {}, & welcome to the Random D20 Number Generator by Ray Weiss.\n".format(name) print "Please type your rolls as "NdX" (N=number of dice, X=size of dice), or "Q" to quit.\n" while True: dice = raw_input("What dice do you want to roll? ").lower() if dice == "q": break else: try: number, size = dice.split("d") results = roll_dice(int(number), int(size)) except ValueError: # This will catch errors from dice.split() or roll_dice(), # but either case means there"s a problem with the user"s input. print "I don"t understand that roll.\n" else: print "You rolled {!s}: {!s}\n".format(sum(results), results) print "\nThank you {} for using the D20 RNG by Ray Weiss! Goodbye!\n".format(name) def roll_dice(number, size): """ number: any int; < 1 is allowed, but returns an empty list. size: any int > 1 Returns: a list with `number` elements, of dice rolls from 1 to `size` """ from random import randint return [randint(1, size) for n in range(number)]
Yksi toiminto, jonka haluat todennäköisesti lisätä, on muokkaus roll_dice()
hyväksyä muokkaaja (+ tai – jokin summa). Ja jos todella haluat saada fancy, voit aloittaa tulosten tarkistamisen korostaaksesi 1s tai 20s tai muita rullatuloksia, joilla on erityisiä arvoja pelissäsi.
Vastaa