Найти - Пользователи
Полная версия: Вопрос по переменным
Начало » Python для новичков » Вопрос по переменным
1
kirino
Добрый день!
Я составил небольшую программу, которая должна отсортировать массив А по возростанию(или убыванию решает пользователь), найти все четные числа в исходном массиве А. Однако, на каком-то моменте исходный массив А изменяется, хотя я вроде не присваиваю ему новых значений.
Подскажите, пожалуйста, почему так происходит.

P.s: подскажите как сделать спойлер)

Код:
# -*- coding: cp1251 -*-
import random
def choise (str1, str2, str3):
    print(str1 + str2 + str3)
    f = False
    while f != True:
        auto=str(input())
        if auto == "1" or auto == "0":
            f=True
        else:
            print("Ты идиот? Ответь 1 или 0 уже...")
    return (auto)
#сортирурует массив по убыванию
def sort (a, n):
    maxa = 0
    temp = a[0]
    b = a
    i = 0
    while i <= n-1:
        j = i+1
        while j <= n-1:
            if b[i] < b[j]:
                temp = b[i]
                b[i] = b[j]
                b[j] = temp
            j = j+1
        i = i+1
    print(b)
    return(b)   
#переворачивает массив
def flip (*args):
    b = [0]*n
    for i in range(n):
        b[i] = a[n-1-i]
    return (b)
           
print("Здравствуйте! Данная программа    . Пожалуйста, используйте только ЦЕЛЫЕ НАТУРАЛЬНЫЕ числа!")
print("-----------------------")
print("Введите кол-во строк исходного массива А, i=")
n = input()
a = [0] * n
temp = choise("Сгенерировать массив?", " (Да-1", ", Нет-0)")
if temp == "1":
    i = 0
    while i <= n - 1:
        a[i] = random.randint(0, 15)
        i = i + 1
elif temp == "0":
    i=0
    while i<=n-1:
        print ("Введите А["+str(i+1)+"]:")
        a[i]=input()
        i = i + 1
print("Исходный/Построенный массив:")
print(a)
#СОРТИРОВКА МАССИВА
temp = choise("Как Вы желаете отсортировать массив:", " (По возр-1", ", По убыв.-0)")
if temp == "1":
    b = flip(sort(a, n), n)
    print("Массив отсортирован по возрастанию:")    
elif temp == "0":
    b = sort(a, n)
    print("Массив отсортирован по убыванию:")
print(b)
#############################################Меняется значение а
print("------------------------------------")
print(a)
print("------------------------------------")
#НАХОЖДЕНИЕ ЧЕТНЫХ
print("Четными элементами в массиве являются:")
b = [0]*n
j=0
for i in range(n):
    if a[i] % 2 == 0:
        b[j] = a[i]
        j=j+1
print(b[0:j])
ajib6ept
Списки и словари являются изменяемыми встроенными типами данных. А это значит, если возвращаться к тому с чего мы начали разговор, что, если создать список Y, затем сделать присваивание X=Y, а затем изменить X, то Y тоже изменится. За этим нужно внимательно следить! Для того, чтобы этого не происходило, необходимо создать новый объект эквивалентный исходному, например, так:
X=Y[:]

Источник


In [1]: a = [1,2,3]
In [2]: b = a
In [3]: b.pop()
Out[3]: 3
In [4]: a
Out[4]: [1, 2]
kirino
ajib6ept
Поправил как Вы подсказали и проблема решилась. Большое спасибо!
Сылка интересная, ознакомился)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB