Kezdőoldal » Számítástechnika » Programozás » Számjegyek cseréje egy számban...

Számjegyek cseréje egy számban, Python?

Figyelt kérdés

Hogyha van egy listám csupa háromjegyű számmal, és azt szeretném, hogy mindegyiknél cserélje fel az utolsó és első számjegyét, azt hogy tudom megcsinálni Pythonban?

Tehát pl van egy ilyen listám:

a=[342, 763, 927]

Ilyet szeretnék kapni:

b=[243, 367, 729]


Valami ilyesmire gondoltam, de tudom, hogy ez egészen sok sebből vérzik:

for i in range(len(a)):

str(a[i])[0] = str(a[i])[2]

str(a[i])


Tudna valaki segíteni? köszönöm szépen.



2021. nov. 23. 19:49
1 2 3 4
 21/32 anonim ***** válasza:

#18: > a feladat ugyanis nem tér ki arra, hogy csak és kizárólag az első és utolsó számjegyeket kell felcserélni, vagy felcserélhető a teljes szám is


Attól mert nem tér ki arra, hogy mi legyen a középsö számokkal, az szvsz nem azt jelenti, hogy bármit csinálhatsz vele. Ilyen logika mentén az is valid megoldás lenne, ha kitörölnéd a középsö számokat(hiszen a feladat nem specifikálta, hogy ezekkel mit kell csinálni, tehát BÁRMIT lehet):

[342, 763, 927] -> [23, 37, 79]


Szerintem ezt egyikünk se gondolja helyesnek.


Ami miatt jók a megoldásaid, az az, hogy a kérdezö azt írta: "van egy listám csupa háromjegyű számmal". Erre az esetre tökéletesen müködnek a megoldások. Viszont szerintem az, hogy simán reverseled a számsorrendet, az nem jó generalizált megoldás arra, hogy "cserélje fel az utolsó és első számjegyét", mivel azon kívül, hogy ezt megcsinálja, még mást is csinál(megcseréli a többi szám sorrendjét is).

2021. nov. 24. 12:32
Hasznos számodra ez a válasz?
 22/32 anonim ***** válasza:

#7: A funkcionális megoldást szerintem lehetne egyszerüsíteni: A stringet nem kell karakter listává alakítani ahhoz, hogy indexelhetö legyen. Ha azt elhagyod, akkor a join se kell. Ezen kívül - legalábbis szerintem - a list comprehension 'pythonosabb' megoldás mint a list(map(...)), de ez talán csak ízlés kérdése

[link]

2021. nov. 24. 12:42
Hasznos számodra ez a válasz?
 23/32 anonim ***** válasza:

#22: "A stringet nem kell karakter listává alakítani ahhoz, hogy indexelhetö legyen. Ha azt elhagyod, akkor a join se kell."

A #8-as hozzászólásban szereplő iterációs megoldásnál arra is mutattam példát.


"Ezen kívül - legalábbis szerintem - a list comprehension 'pythonosabb' megoldás mint a list(map(...)), de ez talán csak ízlés kérdése"

Csak a funkcionális megoldásra mutattam ezzel példát (a list-re map előtt a Python3 miatt van szükség, ugyanis a map objektumként adja vissza az eredményt).


"Attól mert nem tér ki arra, hogy mi legyen a középsö számokkal, az szvsz nem azt jelenti, hogy bármit csinálhatsz vele."

Ha az által az első és utolsó számjegy ki lesz cserélve, de a középső szám megmarad, akkor a teljes szám felcserélése is egy opció - nem lehet BÁRMIT megcsinálni vele, mert a példában a középső szám szerepel.


"Viszont szerintem az, hogy simán reverseled a számsorrendet, az nem jó generalizált megoldás arra, hogy "cserélje fel az utolsó és első számjegyét", mivel azon kívül, hogy ezt megcsinálja, még mást is csinál(megcseréli a többi szám sorrendjét is)."

De egy jó megoldás. Ráadásul #12-es hozzászólásod "amik reverselték a számjegyeket csak 3 jegyü számokra müködnek(meg ha a 'középsö' szájegyek palindromok)" helytelen állításával ellentétben működnek többjegyű számokkal is.

2021. nov. 24. 13:41
Hasznos számodra ez a válasz?
 24/32 anonim ***** válasza:

#19 Azt hiszem, végrehajtottam, amit javasoltál.

Íme a javított kód:


-------------------------------------------------------------

print("working...")

numbers = [342,25,2345,763,927,4795,36,95,392,32]

reverse = []


for n in range(len(numbers)):

____strn = str(numbers[n])

____char_start = strn[0]

____char_end = strn[-1]

____st = strn[1:-1]

____str_end = int(char_end + st + char_start)

____reverse.append(str_end)


print(reverse)

print("done...")

-------------------------------------------------------------

2021. nov. 24. 14:39
Hasznos számodra ez a válasz?
 25/32 anonim ***** válasza:

#23

> A #8-as hozzászólásban szereplő iterációs megoldásnál arra is mutattam példát.


Nem az a problémám, hogy mutatsz-e vagy nem példát rá, hanem azt, hogy mivel az indexelés müködik stringekre, így a "".join(list(..blabla..)) felesleges. Nem csinál semmi hasznosat, nem ad hozzá. Olyan, mintha egy számítás végén hozzáadnál nullát, vagy megszoroznád egyel. Ugyanaz lesz az eredmény, csak hosszabb úton jutsz el oda. Ráadásul növeli a kódméretet, csökkenti az olvashatóságot, így objektíven rosszabb minöségü, mintha elhagynád. Ráadásul még a szemléltetéshez sem járul hozzá, mert ugye 'funkcionális' példát akartál, de azt ezek nélkül is hozod, ott a map, meg a lambda...


> Csak a funkcionális megoldásra mutattam ezzel példát

Abszolút jogos...



Ami a reverses problémát illeti:

Szerintem elbeszélünk egymás mellett. Volt az a példám, hogy kitöröljük a köztes számokat. Ezt most felejtsük el, nem volt jó ellenpélda, mivel a kérdésben szereplö számokra nem adta vissza a megfelelöt. Ez helyett tekintsük a következö példát:

Legyen egy olyan függvény, ami azt csinálja, hogy kicseréli az elsö és utolsó számjegyeket, valamint a középen lévö számjegyekböl képzett számot kicseréli úgy, hogy osztási maradékot képez 10-el.

tehát pl

432 -> elsö számjegy 4, utolsó 2, középpen van 3, ezt ha modolod 10-el akkor 3 % 10 == 3. Tehát az eredmény 234

Egy négyjegyü szám esetén:

5432 -> elsö számjegy 5, utolsó 2, középpen van 43, mod 10 = 3. Az eredmény 235.


Ez a függvény telljesíti a kritériumaidat:

- kicseréli az elsö és utolsó számjegyeket

- a példában szereplö összes számra azt adja vissza, amit a kérdezö írt

Ezen kívül müködik több számjegyü számra, bár a középsö szakaszt megváltoztatja, igaz máshogy mint a reverse módszer.


Tehát szerinted ez is egy jó generalizálása a feladatnak több számjegyü számok esetére? Mert szerintem nem, éppen azért nem, ami miatt a reverse sem jó generalizálás: ha a számjegyek száma nagyobb mint 3, megváltoztatja a középsö számokat.



Máshogy kérdezem: Ha a kérdezö példái közt lett volna egy 4 jegyü szám: 1234, akkor vajon milyen eredményt szeretne? 4321? 431? Abból kiindulva, hogy mi volt az eredeti kérdés("cserélje fel az utolsó és első számjegyét"), szerintem a helyes válasz 4231 lenne.

2021. nov. 24. 14:56
Hasznos számodra ez a válasz?
 26/32 anonim ***** válasza:

Szerintem elég egyértemű a feladat.

"azt szeretném, hogy mindegyiknél cserélje fel az utolsó és első számjegyét"

2021. nov. 24. 15:03
Hasznos számodra ez a válasz?
 27/32 anonim ***** válasza:

Példa a #7, #8, #11-es hozzászólásomban említett megoldásokra négy számjegy esetén:

Funkcionális: [link]

Iterációs: [link]

Számjegyenként: [link]


Az eredmény mindegyiknél:

* 3421 -> 1243

* 7632 -> 2367

* 9271 -> 1729

felcserélődött az első és utolsó számjegy? Felcserélődött. A #12-es hozzászólásod "Az eddigi megoldások, amik reverselték a számjegyeket csak 3 jegyü számokra müködnek(meg ha a 'középsö' szájegyek palindromok)."-állítása megdőlt ezzel? Megdőlt.

Q.E.D.

2021. nov. 24. 15:29
Hasznos számodra ez a válasz?
 28/32 anonim ***** válasza:

#27

Á, már értem, hol ment mellé a kommunikáció. A 'müködik' szót máshogy értelmezzük. Hadd fogalmazzam át.


"Az eddigi megoldások, amik reverselték a számjegyeket, nem adnak helyes megoldást minden esetben, ha a számjegyek száma nagyobb mint 3, mivel a középsö számjegyeket módosítják".


Ha most azzal jönnél, hogy a feladat nem szólt a középsö számjegyekröl, akkor: de igen, szólt. Ezt úgy hívják, hogy implicit kontextus. A kommunikációnk nem lehet tökéletesen precíz és minden egyes mondatunk egy csomó kontextust hordoz magában. Ezt nem hagyhatod figyelmen kívül. Ragaszkodni ehhez, hogy márpedig ez egy jó megoldás 3-nál több számjegyü számokra kicsit olyan, mint ez:

- Anya, van valami a hütöben?

- Nincsen semmi kisfiam!

* odamész a hütöhöz *

- Anya, te át akarsz verni? Dehát ez a hütö tele van LEVEGÖVEL.


nyilvánvalóan kajára gondolt anyukád, amikor azt mondta, hogy üres a hütö


Vagy hogy kicsit közelebbi példát is mutassak:

Ha a kliens szeretné, hogy a weboldalára kirakj egy gombot, amit ha megnyom a user, akkor elmentödik egy sor egy adatbázis táblában. Erre te egy olyan implementációt adsz, ami mondjuk beteszi a sort, de utánna módosít egy régebbi sort.


Bekerül a sor? Be. Tehát jól telljesítetted a feladatot? Nem. Attól mert a kliens nem mondta, hogy más ne történjen, attól még neked ezt tudnod kell.


Ugyanez van itt is: Amikor azt írta a kérdezö, hogy "cserélje fel az utolsó és első számjegyét", ebbe bele kellett volna értened azt, hogy a többi számjegyet hagyja érintetlenül. Ez szerintem mindenkinek világos, valószínüleg neked is...

2021. nov. 24. 19:25
Hasznos számodra ez a válasz?
 29/32 anonim ***** válasza:

#28: Ne terelj. Csúnya érvelési hiba.


Az (akármilyen hosszú - hisz a #12-es hozzászólásod ezt firtatta) szám teljes megfordításával felcserélődik az első és utolsó számjegy sorrendje? Fel. Vagyis a feladatot teljesíti.

Három számjegyű szám esetén középső számjegy változatlan marad? Igen, vagyis a példáknak megfelel.


A #12-es hozzászólásod "Az eddigi megoldások, amik reverselték a számjegyeket csak 3 jegyü számokra müködnek(meg ha a 'középsö' szájegyek palindromok)."-állítása továbbra is hibás? Igen.

Q.E.D.

2021. nov. 24. 19:45
Hasznos számodra ez a válasz?
 30/32 anonim ***** válasza:

Szerintem mostmár csak trollkodsz.

Nyilvánvalóan nem azt vitatom, hogy a feladat legszükebb szó szerinti értelmezését telljesíti-e a kódod vagy sem. Világos, hogy telljesíti.


Viszont általános megoldásnak nem jó, mivel az implicit követelményeket(hogy ne változtassa meg a középsö számjegyeket) nem teljesíti.


És igen, az idézett állítás valóban hamis, abban az esetben, ha a 'müködik' szót úgy értelmezed, hogy a legszükebb explicit követelményeket hozza. Viszont abban a kontextusban, ahol ezt az állítást tettem, a generális megoldásról beszéltem, az összes implicit követelményével együtt.


A programod hibás(mind a három), mivel nem teljesíti az összes követelményt általánosan akárhány számjegyü inputra. Ezen az sem változtat, hogyha kiemelsz a hozzászólásomból egy mondatot, azt mondod, hogy hamis és oda írod, hogy Q.E.D.

2021. nov. 24. 20:00
Hasznos számodra ez a válasz?
1 2 3 4

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!