Véletlenszerű D20 számgenerátor
On február 9, 2021 by adminÉn magam tanítok kódot Zed Shaw használatával “s Python megismerése A kemény út , és untam az egyik memorizálási leckét, így gondoltam, hogy egy véletlenszerű D20 számgenerátort készítek, amikor RPGS-t játszok.
Hogyan javíthatom ezt a kódot? Van valami hülyeség, amit csinálok?
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)
Végül szívesen adnék funkcionalitást, hogy megkérdezzem, milyen és hány kockát szeretne szerepelni , de egyelőre valóban segítene egy áttekintés arról, amit eddig tettem.
Hozzászólások
- Esetleg beépítsen néhány dolgot ebbe a válaszba : gamedev.stackexchange.com/questions/24656/…
Válasz
Itt van a véleményem:
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)
Változások az Önéhez képest verzió:
- közvetlenül importál
randint
, mert ez az egyetlen funkció, amelyet arandom
; / li> - használja az új karakterlánc-formázási módszert (
str.format
); - vegye át a felső korlátot a felhasználótól a 20-as kódolás helyett;
- vegye el a tekercsek számát a felhasználótól ahelyett, hogy többször megkérdezné, hogy ez elegendő-e;
- használjon ciklust az ismétléshez valójában dolgozni. Az önismétlő kód, amely megkérdezi a felhasználót, hogy folytatnánk-e, már eltűnt.
Megjegyzések
- Köszönjük! Ez klassz, játszani fogok vele úgy, hogy továbbra is kérdezzen téged, ha további kockákat akarsz dobni, néhány új dolgot itt még nem láttam. ne felejtsd el megkérdezni, hogy mit csinál a _ az x-tartományban (n)? A többit valamilyen módon fel tudom ismerni.
- @lerugray Itt ‘ s a
xrange
. Csak a ciklustörzsn
futtatására használom. - @lerugray, _ a haskellben üres nevet jelent (akkor használod, amikor változót kell megadnod ami haszontalan – mint ebben a hurokban). Feltételezem, hogy ugyanaz a jelentése a pythonban.
- @Aleksandar Technikailag ‘ teljesen legitim név, tehát lehet használták a hurok belsejében, de az ötlet helyes. Nem tudtam ‘ nem tudtam, hogy Haskelltől származik (és nem tudom, hogy Haskell származik), de sok értelme van.
Válasz
A stílus oldalon nincs sok mondanivalóm, ami jó. Azt hiszem, az egyetlen Az igazi megjegyzés az lenne, hogy személy szerint az újsoros karakterek használata egyszerűbb, mint a hármas idézetek a többsoros karakterláncoknál, különösen, ha csak a sorok közötti távolságról akarsz megbizonyosodni.
Tetszik, hogy a randint
a tekercsekhez, a randrange
vagy más struktúra helyett: kezdetnek és leállításnak, és ez pontosan megfelel a való világnak függvényt, amelyet itt hoz létre újra, így nincs szükség a paraméterek vagy az eredmények +1-es összemosására.
Tervezésileg elosztanám a front-end cuccokat, amelyek a felhasználónak ad vissza információkat a tényleges kockadobásból. Ez lehetővé tenné a kockahenger más célokra történő újrafelhasználását (a a fejem tetejére, egy véletlenszerű kincsgenerátor), bővítse az interfész logikáját további funkciókkal, vagy dolgozza át a logikáját anélkül, hogy széttépné az egész szerkezetet.
És amíg ezt csinálja, addig gondolkodjon nagyobb – a “d20-at kell dobnom” csak egyetlen eset: “dobnom kell egy kis kockát”, és ezt a problémát nem sokkal nehezebb megoldani. Tehát itt állok hozzá:
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)]
Az egyik funkció, amelyet valószínűleg hozzá szeretne adni, az roll_dice()
egy módosító elfogadásához (+ vagy – valamilyen összeg). És ha igazán szeretnél kedvet kapni, elkezdheted ellenőrizni az eredményeket, hogy kiemelhesd az 1-es vagy a 20-as számot, vagy más roll eredményeket, amelyek különleges értékekkel rendelkeznek a játékodban.
Vélemény, hozzászólás?