Dzielenie liczby przez 2 i wyświetlenie wyniku w postaci liczby całkowitej

0

Mam taki programik (fragment) w Pythonie. Zwraca on mi dane z 4 kanałów przetwornika analogowo cyfrowego.
Chciałbym aby wartość dla i=1 (i tylko dla i=1) została podzielona przez 2 i wyświetlona jako liczba całkowita. Kompletnie nie znam się na Pythonie. Czy mogę liczyć na pomoc?

values = [0]*4
for i in range(4):
    values[i] = adc.read_adc(i, gain=GAIN, data_rate=128)
# Print the ADC values.
print(', {0:>5} , {1:>5} , {2:>5} , {3:>5}'.format(*values))

0

To będzie coś takiego przed for-em

values[1] = int(values[1] / 2)
1

Czyli chcesz aby podzielić jakąś liczbę (też całkowitą?) przez dwa i wyświetlić wynik, czyli np., gdy będzie to 7, to wynik ma być 3? Do tego służy w pythonie operator //.

15 // 2 # -> 7
0
sig napisał(a):

To będzie coś takiego przed for-em

values[1] = int(values[1] / 2)

No niestety nie dzieli. Wartość dla i=1 pozostaje bez zmian

0
Piotr Mackowiak napisał(a):
sig napisał(a):

To będzie coś takiego przed for-em

values[1] = int(values[1] / 2)

No niestety nie dzieli. Wartość dla i=1 pozostaje bez zmian

wpisz wczesniej
if i == 0:
values[i] = int(values[i] / 2)

0

ja bym to napisał tak:

values = [adc.read_adc(i, gain=GAIN, data_rate=128) for i in range(4)]
values = [val // 2 if val == 1 else val for val in values]
print(', {0:>5} , {1:>5} , {2:>5} , {3:>5}'.format(*values))
0
Crude Monte Carlo napisał(a):

ja bym to napisał tak:

values = [adc.read_adc(i, gain=GAIN, data_rate=128) for i in range(4)]
values = [val // 2 if val == 1 else val for val in values]
print(', {0:>5} , {1:>5} , {2:>5} , {3:>5}'.format(*values))

No niestety też nie dzieli

0
komuher napisał(a):
Piotr Mackowiak napisał(a):
sig napisał(a):

To będzie coś takiego przed for-em

values[1] = int(values[1] / 2)

No niestety nie dzieli. Wartość dla i=1 pozostaje bez zmian

wpisz wczesniej
if i == 0:
values[i] = int(values[i] / 2)

Wyrzuca błąd:

File "/home/pi/Public/ads1015.py", line 25
    values[i] = int(values[i] / 2)
         ^
IndentationError: expected an indented block
0

Źle zrobiłeś wcięcia (za dużo/za mało spacji).

1

głupi błąd powinno być tak:

values = [adc.read_adc(i, gain=GAIN, data_rate=128) for i in range(4)]
values = [values[i] // 2 if i == 0 else values[i] for i in range(len(values))]
print(', {0:>5} , {1:>5} , {2:>5} , {3:>5}'.format(*values))

EDIT wersja z pętlą

values = [0]*4
for i in range(4):
    values[i] = adc.read_adc(i, gain=GAIN, data_rate=128)
    if i == 0:
        values[i] = values[i] // 2
# Print the ADC values.
print(', {0:>5} , {1:>5} , {2:>5} , {3:>5}'.format(*values))

EDIT II z drugiej strony jeżeli to jest dla i == 0 to można też prościej

values = [adc.read_adc(i, gain=GAIN, data_rate=128) for i in range(4)]
values [0] = values [0] // 2

EDIT II widzę, że źle Cię zrozumiałem z indeksami (poprawiam indeksy z 1 na 0)

0
Crude Monte Carlo napisał(a):

głupi błąd powinno być tak:

values = [adc.read_adc(i, gain=GAIN, data_rate=128) for i in range(4)]
values = [values[i] // 2 if i == 1 else values[i] for i in range(len(values))]
print(', {0:>5} , {1:>5} , {2:>5} , {3:>5}'.format(*values))

Też nie dzieli....

0
Pyxis napisał(a):

Źle zrobiłeś wcięcia (za dużo/za mało spacji).

Mój kod wygląda teraz tak:

values = [0]*4
if i == 0:
    values[i] = int(values[i] / 2)
for i in range(4):
    values[i] = adc.read_adc(i, gain=GAIN, data_rate=128)
# Print the ADC values.
print(', {0:>5} , {1:>5} , {2:>5} , {3:>5}'.format(*values))

Ale i tak wyrzuca błąd:

Traceback (most recent call last):
  File "/home/pi/Public/ads1015.py", line 24, in <module>
    if i == 0:
NameError: name 'i' is not defined
0
Crude Monte Carlo napisał(a):

głupi błąd powinno być tak:

values = [adc.read_adc(i, gain=GAIN, data_rate=128) for i in range(4)]
values = [values[i] // 2 if i == 1 else values[i] for i in range(len(values))]
print(', {0:>5} , {1:>5} , {2:>5} , {3:>5}'.format(*values))

EDIT wersja z pętlą

values = [0]*4
for i in range(4):
    values[i] = adc.read_adc(i, gain=GAIN, data_rate=128)
    if i == 1:
        values[i] = values[i] // 2
# Print the ADC values.
print(', {0:>5} , {1:>5} , {2:>5} , {3:>5}'.format(*values))

EDIT II z drugiej strony jeżeli to jest dla i == 1 to można też prościej

values = [adc.read_adc(i, gain=GAIN, data_rate=128) for i in range(4)]
values [1] = values [1] // 2

Dziękuję Kolego. Pomogłeś. Zastosowałem wersję EDIT z pętlą z małą poprawką. tzn i == 0 a nie 1. No ale to drobiazg. Dziękuję wszystkim kolegom !

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