Python 3 nenahradzuje spravne string

Python 3 nenahradzuje spravne string
« kdy: 23. 02. 2021, 16:10:50 »
Zdravim.

V Pythone som napisal funkciu ktora by mala hlupo nahradzovat string v retazci ale deje sa nieco zvlastne.
Vzdy ked je hodnota rovna maximalnej dlzke nespocita to spravne znaky pred.
Kód: [Vybrat]
def Position_in_Array (string,Position,array):
  Start_Position = Position
  string = string   
  Data_lenght = len(string)
 
  Data_after_position = int(Data_lenght)
  #data after position
  array_after_inserted_data = array[Position:]
  #data before position actual position -
  Data_before_pos = Start_Position - Data_lenght
  array_before_inserted_data = array[:Data_before_pos]
 
  output = array_before_inserted_data + string + array_after_inserted_data
  return output


print(Position_in_Array('1000',32, 'ABCDERTAGSHDJFKWORKDBANDREDBVAD'))

Priklad je string : ABCDERTAGSHDJFKWORKDBANDREDBVAD
Ak napisem
Kód: [Vybrat]
print(Position_in_Array('1000',4, 'ABCDERTAGSHDJFKWORKDBANDREDBVAD'))
vysledok je 1000ERTAGSHDJFKWORKDBANDREDBVAD teda vsetko OK.
Ak napisem
Kód: [Vybrat]
print(Position_in_Array('1000',32, 'ABCDERTAGSHDJFKWORKDBANDREDBVAD'))tak vysledok je
ABCDERTAGSHDJFKWORKDBANDREDB1000 co je zle lebo uz je to mimo dlzku originalneho stringu. Preco sa tak deje?
Malo by to pekne pocitat ale pri 32 to nejde.


Re:Python 3 nenahradzuje spravne string
« Odpověď #1 kdy: 23. 02. 2021, 16:54:02 »
Ten kód je příšerný, ale jestli dobře chápu problém, pak je to zřejmě klasická chyba off-by-one. Ten kód dělá přesně to, co je v něm napsané:

Kód: [Vybrat]
>>> str = 'ABCDERTAGSHDJFKWORKDBANDREDBVAD'
>>> len(str)
31
>>> 32-4
28
>>> str[:28]
'ABCDERTAGSHDJFKWORKDBANDREDB'
>>> str[:28] + '1000'
'ABCDERTAGSHDJFKWORKDBANDREDB1000'

Takže si pořádně spočítej písmena a případně doplň nějaké kontroly.

A když už to budeš přepisovat, věz, že length se píše takhle a ne jinak a že string = string k ničemu není, stejně jako není k ničemu používat náhodně Start_Position a Position. A v neposlední řadě by bylo fajn psát všechny proměnné stejným stylem. PEP-8 doporučuje malá písmena a podtržítka.

Re:Python 3 nenahradzuje spravne string
« Odpověď #2 kdy: 23. 02. 2021, 17:07:11 »
Ok moja chyba.
Teda takto.
Kód: [Vybrat]
def Position_in_Array (string,Position,array):
  print('Dlzka Array')
  print(len(array))
  Start_Position = Position
  print('Dlzka Stringu')
  print(len(string)) 
  Data = len(string)
  #data after position
  array_after_inserted_data = array[Data:]
  print('Kolko ostalo potom')
  print(len(array_after_inserted_data)) 
  #data before position actual position -
 
  Data_before_pos = Start_Position - Data
  print('Kolko pozicii vpred uchovaj')
  print(Data_before_pos) 
  array_before_inserted_data = array[:Data_before_pos]
 
  output = array_before_inserted_data + string + array_after_inserted_data
  print('Dlzka Vystupu')
  print(len(output))
  return output


print(Position_in_Array('1000',32, '00000000000000000000000000000000'))
Vysledok
Kód: [Vybrat]
Dlzka Array
32
Dlzka Stringu
4
Kolko ostalo potom
28
Kolko pozicii vpred uchovaj
28
Dlzka Vystupu
60
000000000000000000000000000010000000000000000000000000000000

Co chcem je odstrihnut s tych 32 posledne 4 pridat string ale nieco je zle.
Lebo ak zadam

print(Position_in_Array('1000',10, '00000000000000000000000000000000'))

Dlzka Array
32
Dlzka Stringu
4
Kolko ostalo potom
28
Kolko pozicii vpred uchovaj
6
Dlzka Vystupu
38
00000010000000000000000000000000000000

tecka

Re:Python 3 nenahradzuje spravne string
« Odpověď #3 kdy: 23. 02. 2021, 19:38:18 »
Když to neumíš popsat slovy, tak to třeba nakresli, nebo něco.
Tohle?
Kód: [Vybrat]
def replaceat(original, replacement, replacement_end):
    replacement_start = replacement_end - len(replacement)
    return original[:replacement_start] + replacement + original[replacement_end:]

print(replaceat('00000000000000000000000000000000', '1000', 32))
print(replaceat('00000000000000000000000000000000', '1000', 10))

Re:Python 3 nenahradzuje spravne string
« Odpověď #4 kdy: 26. 02. 2021, 00:42:22 »
Citace
..........
Co chcem je odstrihnut s tych 32 posledne 4 pridat string ale nieco je zle.
.............
musíš udělat veselej xiftík :-4 :-4 ;D ;D ;) ;)
Kód: [Vybrat]
#!/usr/bin/env python3

wangaraduv_string = '0' * 32

print(wangaraduv_string)

wangaraduv_string = wangaraduv_string[:-4] + '1234'

print(wangaraduv_string)

btw celý to vipadá jako nějaký divný dělání s bitama/bytama :o ;)
víc rychlejší to bude když jakoby použiješ misto stringů bitový voperace hele a eště vo mocmocmoc strašně víc rychlejší když nato jako vemeš cffi hele  :o :o :D ;)


Re:Python 3 nenahradzuje spravne string
« Odpověď #5 kdy: 28. 02. 2021, 22:09:03 »
Prosim, neznasilnujte takhle ten Python ;) string = string je fakt priserny, ale z toho, co jste napsal, to je to nejhezci. Taky si obcas na papir napisu, ze 4 = 4 nebo π = π, abych nezapomnel a zaroven se trochu procvicil v matematice ;)

Pokud i presto, co jsem napsal, chcete poradit, napiste cele zadani. Nevypada to, ze bude slozite, jen nechapu, ceho chcete docilit.