Skriva ut ett ord omringat av punkter och apostrofer (Python)

Permalänk
Medlem

Skriva ut ett ord omringat av punkter och apostrofer (Python)

Kollar på ett gammalt programmeringsprov och första uppgiften är att man ska mata in ett ord som senare skrivs ut som mitt exempel.

Exemplet:

................. |S|N|O|R|L|E|N|A| '''''''''''''''''

Min kod ser ut så här:

ordet = input("Skriv ett ord ") for i in range (len(ordet)*2+1): print('.',end="") print("") for i in range (len(ordet)): print('|'+ ordet.upper()[i],end="") print('|') for i in range (len(ordet)*2+1): print('\'',end="") print("")

Om det går, vad skulle jag kunna ändra på för att göra koden lite mindre?

Visa signatur

i7 4790k | Asus Z97M-Plus | 16gb ram | Asus Strix 970 | Phanteks PH-TC12DX | Samsung 850 Evo 250gb | Corsair Force GS 120gb | Fractal Design Integra M 650w | Fractal Design Define Mini C

Permalänk
Medlem
Skrivet av Snorlena:

Kollar på ett gammalt programmeringsprov och första uppgiften är att man ska mata in ett ord som senare skrivs ut som mitt exempel.

Exemplet:

................. |S|N|O|R|L|E|N|A| '''''''''''''''''

Min kod ser ut så här:

ordet = input("Skriv ett ord ") for i in range (len(ordet)*2+1): print('.',end="") print("") for i in range (len(ordet)): print('|'+ ordet.upper()[i],end="") print('|') for i in range (len(ordet)*2+1): print('\'',end="") print("")

Om det går, vad skulle jag kunna ändra på för att göra koden lite mindre?

Istället för att loopa igenom ordet för att stoppa in '|' symboler, så hade jag använt följande funktioner:
list()
join()
upper()
för att korta ner koden

Visa signatur

| EVGA Z170 FTW | i7 6700k | ASUS RTX 3070 | 16GB DDR4 3200MHz | Cooler Master V850 | Samsung 840 Evo 250GB + 2x WD Black 500GB + Seagate 2TB SSHD + Samsung 970 Evo M.2 500GB |

Permalänk
Hedersmedlem

Jag hoppas det här är lite för skojs skull och inte för att du tror kortare kod automatiskt är bättre kod.

Permalänk
Medlem

Du blir av med en hel del om du utnyttjar att sträng-heltal-multiplikation är en grej i Python.

>>> "."*10 '..........'

Visa signatur

Spela Swemantle! Du vet att du vill.

Ibland har jag fel, men då är det någon annans fel.

Permalänk
Medlem

@Snorlena:

Ett exempel på hur du kan få ner SLOC:

ordet = input("Skriv ditt ord: ") dotted_line = "." * (len(ordet) * 2 + 1) dashed_name = "|%s|" % "|".join(ordet.upper()) print(dotted_line) print(dashed_name) print(dotted_line)

Vill man spejsa till det kan du göra en enda print av allt, men då börjar det bli oläsligt på riktigt...

print("%s\n|%s|\n%s" % ("." * (len(ordet) * 2 + 1), "|".join(ordet.upper()) ,"." * (len(ordet) * 2 + 1)))

Viktigt att notera är att detta är inte exakt samma kod som din. Din kod, med tom input sträng ger:

|

min ger:

||

Visa signatur

Jag är en optimist; det är aldrig så dåligt så att det inte kan bli sämre.

Permalänk
Medlem
Skrivet av zyberzero:

@Snorlena:

Ett exempel på hur du kan få ner SLOC:

ordet = input("Skriv ditt ord: ") dotted_line = "." * (len(ordet) * 2 + 1) dashed_name = "|%s|" % "|".join(ordet.upper()) print(dotted_line) print(dashed_name) print(dotted_line)

Vill man spejsa till det kan du göra en enda print av allt, men då börjar det bli oläsligt på riktigt...

print("%s\n|%s|\n%s" % ("." * (len(ordet) * 2 + 1), "|".join(ordet.upper()) ,"." * (len(ordet) * 2 + 1)))

Viktigt att notera är att detta är inte exakt samma kod som din. Din kod, med tom input sträng ger:

|

min ger:

||

Intressant med %s. Vad betyder det och hur fungerar det?

Visa signatur

i7 4790k | Asus Z97M-Plus | 16gb ram | Asus Strix 970 | Phanteks PH-TC12DX | Samsung 850 Evo 250gb | Corsair Force GS 120gb | Fractal Design Integra M 650w | Fractal Design Define Mini C

Permalänk
Medlem
Skrivet av Snorlena:

Intressant med %s. Vad betyder det och hur fungerar det?

s står för string. Det är C-stil strängar i python. Du kan se det som en parameter. När du skriver |%s| så säger du att du ska stoppa in en sträng mellan två |. Delen efter andra % är vad du kommer stoppa in där. Sen är det en extra grej som händer här. "|".join(ordet.upper()) säger att du mellan varje 'character' i strängen kommer ha en |. så om ordet är "bla.2j" so blir det "b|l|a|.|2|j"

https://python-reference.readthedocs.io/en/latest/docs/str/fo...