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

2017-10-17 21:48
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))
edytowany 1x, ostatnio: furious programming, 2017-10-17 22:57

Pozostało 580 znaków

2017-10-17 22:52
sig
0

To będzie coś takiego przed for-em

values[1] = int(values[1] / 2)
edytowany 1x, ostatnio: sig, 2017-10-17 22:53
Na pewno przed forem (kiedy wszystkie próbki są równe 0)? - jackweb 2017-10-17 23:04

Pozostało 580 znaków

2017-10-17 22:53
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

Pozostało 580 znaków

2017-10-17 23:12
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

Pozostało 580 znaków

2017-10-17 23:14
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)

Pozostało 580 znaków

2017-10-17 23:16
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))

Pozostało 580 znaków

2017-10-17 23:23
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

Pozostało 580 znaków

2017-10-17 23:24
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

Pozostało 580 znaków

2017-10-17 23:27
0

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

Pozostało 580 znaków

2017-10-17 23:29

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)

edytowany 3x, ostatnio: Crude Monte Carlo, 2017-10-17 23:39

Pozostało 580 znaków

2017-10-17 23:32
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....

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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