Python Palindrom

0

Cześć poniżej mam szkielet programu , i mam pytanko czemu ciągle wyskakuje pętla nieskończone po jego uruchomieniu ?


a=28
b=str(a)
ile=0
    
while b[0:len(b)]!=b[::-1]:
    ile=ile+1
    print(int(b[0:len(b)])+int(b[::-1]),'za',ile,'razem') 

tak jakby w tej pętli zostawał nie sprawdzając na nowo warunku

0

Nigdzie nie zmieniasz b, więc jak warunek jest spełniony raz, to jest spełniony zawsze.

0
Althorion napisał(a):

Nigdzie nie zmieniasz b, więc jak warunek jest spełniony raz, to jest spełniony zawsze.

jak to zaktualizować ?

0

No… b = cośtam, na przykład. Wszystko zależy od tego, co Ty próbujesz tutaj zrobić, bo z Twojego kodu to nijak nie wynika.

0

To jest "Check palindrom in a hard way" :)

0

W swoim wpisie nie zamieściłem kluczowej informacji , otóż robię takie zadanko :
https://pl.spoj.com/problems/BFN1/

@Pyxis nie chodzi o porównanie stringa
@Althorion Zadanie ze spoja :)

0

Lepiej póżno niż wcale :) Masz tylko tyle co w pierwszym poście?

0
lion137 napisał(a):

Lepiej póżno niż wcale :) Masz tylko tyle co w pierwszym poście?

Tak do kodu jeszcze nie siadałem , a pociąg aby wam odpisać jest silniejszy :D tylko jak zaktualizować to B ?

0

Spróbuj czytelniej:

def is_palindrom(s):
	return s == s[::-1]


def sum_left_right(s):
	return str(int(s) + int(s[::-1]))


def find_sum_palindrom(s):
	cnt = 0
	while not is_palindrom(s):
		# TODO
	return s, cnt


print(find_sum_palindrom("234")) # -> ("666", 1), slowo, nie planowałem tego :-D
0

Postanowiłem to wszystko zamknąć w jednej funkcji , spoj wywala błędną odpowiedź


def palindrom(a,count=0):
    num1=str(a)
    num2=int(num1[::-1])
    num3=num2+a
    count+=1
    
    if num3==int(str(num3)[::-1]):
        return (num3,count)
    
    else: 
        return palindrom(num3,count=count)
    

ile=int(input())

for x in range(ile):
    daj=int(input())
    print(palindrom(daj))
0

Przeczytałeś i przeanalizowałeś mój post? Rozumiesz w ogóle problem? Przecież musi tam być jakaś iteracja albo rekurencja, (sumujemy kolejne liczby); u Ciebie nic takiego nie widać, więc nie może działać. BTW, rozwiązanie, które podałem jest poprawne, (przynajmniej do 80 ;-))

0

Błędna odpowiedź, na 47 wyskakuje dobry palindrom 121 ale dla 1 kroku. Tak jakby robił tylko jeden obieg pętli , i sumował tylko raz


zestaw=int(input())

for x in range(zestaw):
    liczba1=int(input())
    liczba2=str(liczba1)
    liczba3=0
    ile=0
    
    if liczba2==liczba2[::-1]:
        break
    else:
        m=int(liczba2[::-1])
        m+=int(liczba2)
        ile+=1
        print(m)
0

Oczywiście, bo dla każdej liczby z wejścia powinna być jeszcze jedna pętla, a Ty masz tam if.

0

Robi więcej niż 1 obieg pętli :) ale znów nie dochodzi do końca rozwiązania

zestaw=int(input())

for x in range(zestaw):
    liczba1=int(input())
    liczba2=str(liczba1)
    ile=0
    for i in liczba2:
        if int(liczba2)==(liczba2[::-1]):
            break
        else:
            m=int(liczba2[::-1])
            n=int(liczba2)
            n+=m
            ile+=1
    print(n,ile)
1

Czemu wewnętrzna pętla iteruje tyle razy ile badana liczba? Może wystarczyć, ale nie musi, skąd to wytrzasnąłeś? Po else trzeba podmienić liczbę, liczba na swoją sumę od lewej i od prawej, a Ty tworzysz jakieś n.

0

Coś takiego spłodziłem , tylko po pierwszej iteracji nie chce indeksować zmiennej liczba2


zestaw=int(input())
for x in range(zestaw):
    liczba1=int(input())
    liczba2=str(liczba1)
    ile=0
    suma=0
    while int(liczba2)!=int(liczba2[::-1]):
        ile+=1
        suma=int(liczba2)+int(liczba2[::-1])
        a=suma
        liczba2=a
        print(liczba2,ile)
        
0

Żeby warunek pętli działał liczba2 musi być stringiem.

0
lion137 napisał(a):

Żeby warunek pętli działał liczba2 musi być stringiem.

No tak tak , domyślam się ale podpowiedz mi proszę , w którym miejscu podmienić to ? bo w warunku str też nic nie daje, podstawienie zmiennej liczby3 i dopisanie do niej str(liczba2) ? Bo chyba ogólna logika tego programu jest dobra.

0

Tam gdzie dodawanie na przykład:

	zestaw=int(input())
	for x in range(zestaw):
		liczba2 = input()
		ile=0
		while int(liczba2)!=int(liczba2[::-1]):
			liczba2 = str(int(liczba2)+int(liczba2[::-1]))
			ile += 1
			print(liczba2,ile)
0

Dzięki.

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