#python
#python
Вопрос:
Я тренируюсь сравнивать компоненты кортежа в Python, чтобы найти самый большой и самый маленький, но мой код просто возвращает два последних компонента набора, и я понятия не имею, почему:
numbers="4 5 29 54 4 0 -214 542 -64 1 -3 6 -6"
numbers2=numbers.split()
numbers2=tuple(numbers2)
i=0
gran=numbers2[0]
petit=numbers2[0]
for i in range (len(numbers2)):
if numbers2[i]>gran:
gran=numbers2[i]
print(gran)
j=0
for j in range (len(numbers2)):
if numbers[j]<petit:
petit=numbers2[j]
print(petit)
resultat= gran " " petit
print(resultat)
В ответ я получил «6 -6». Любая помощь? Спасибо
Комментарии:
1. Ваш кортеж — это не кортеж целых чисел, а кортеж строк. преобразуйте кортеж в кортеж целых чисел.
Ответ №1:
Другие уже упоминали, что элементы должны быть преобразованы в целые числа. Я хотел также упомянуть, что есть min
и max
доступные функции.
>>> numbers="4 5 29 54 4 0 -214 542 -64 1 -3 6 -6"
>>> numbers_tuple=tuple(int(i) for i in numbers.split())
>>> min(numbers_tuple)
-214
>>> max(numbers_tuple)
542
Это также позволяет избежать создания начального списка, подобного многим предыдущим ответам, но с использованием выражения генератора в tuple()
создании экземпляра, а не понимания списка.
Комментарии:
1. Я не знал, что существует выражение генератора для кортежей, подобных спискам. Приятно:D
2. Выражения генератора — это нечто само по себе. попробуйте
print (i for i in range(10))
илиprint (i for i in range(10)).next()
Ответ №2:
Преобразуйте разделенную строку в целые числа, прежде чем превращать ее в кортеж.
numbers="4 5 29 54 4 0 -214 542 -64 1 -3 6 -6"
numbers2=[int(x) for x in numbers.split()]
numbers2=tuple(numbers2)
...
Вы также можете объединить эти две операции в одну строку.
numbers="4 5 29 54 4 0 -214 542 -64 1 -3 6 -6"
numbers2=tuple([int(x) for x in numbers.split()])
...
Ответ №3:
Ваш кортеж — это кортеж строк, а не кортеж целых чисел. Вам нужно преобразовать ваш кортеж в кортеж целых чисел:
numbers="4 5 29 54 4 0 -214 542 -64 1 -3 6 -6"
numbers2=numbers.split()
numbers2 = [int(i) for i in numbers2] # convert tuple of strs to tuple of ints
Полностью рабочая программа:
numbers="4 5 29 54 4 0 -214 542 -64 1 -3 6 -6"
numbers2=numbers.split()
numbers2 = [int(i) for i in numbers2] # convert tuple of strs to tuple of ints
numbers2=tuple(numbers2)
i=0
gran=numbers2[0]
petit=numbers2[0]
for i in range (len(numbers2)):
if numbers2[i]>gran:
gran=numbers2[i]
print(gran)
j=0
for j in range (len(numbers2)):
if numbers2[j]<petit:
petit=numbers2[j]
print(petit)
resultat= str(gran) " " str(petit)
print(resultat)
Вывод:
542
-214
542 -214
>>>
Я должен отметить, что ваша программа могла бы быть написана намного проще, чем то, что у вас есть в настоящее время:
numbers="4 5 29 54 4 0 -214 542 -64 1 -3 6 -6"
# convert the numbers string to a tuple of integers
num_lst = tuple([int(i) for i in numbers.split()])
# take a guess and say the
# highest and lowest are both
# the first element in num_lst
lowest = num_lst[0]
highest = num_lst[0]
# iterate through the
# num_lst. No need to
# initizalize i beforehand
for i in num_lst:
# if we find a higher number
# then our guess of the highest
# number, reassign highest to that number
if i > highest:
highest = i
# if we find a lower number
# then our guess of the lowest
# number, reassign lowest to that number
elif i < lowest:
lowest = i
# print the highest and lowest number
print("Highest:", highest, " Lowest:", lowest)
Ответ №4:
Это можно свести к простым двум строкам:
numbers=tuple([int (a) for a in "4 5 29 54 4 0 -214 542 -64 1 -3 6 -6".split()])
print(str(max(numbers)) ' ' str(min(numbers)))
Значения изначально вставляются в виде строки, поэтому для выполнения сравнения их необходимо преобразовать в целое число. При печати результатов, если вы хотите, чтобы они были напечатаны в одной строке с пробелом между ними, вы можете преобразовать числа обратно в строки
Более элегантным способом сделать это было бы не использовать строку для указания чисел, вместо этого использовать массив:
numbers=tuple([4, 5, 29, 54, 4, 0, -214, 542, -64, 1, -3, 6, -6])
print(str(max(numbers)) ' ' str(min(numbers)))