Найти - Пользователи
Полная версия: Подскажите ошибку
Начало » Центр помощи » Подскажите ошибку
1 2
Razor
Здраствуйте. Пытался написать скрипт, выдающий квадратные корни от значения a до b, но почему то вычисляет не все. Подскажите ошибку. Заранее спасибо.

# coding: utf-8
print u"Введите начало отсчета"
a = int(input())
i = a
print u"Введите конец отсчета"
b = int(input())
while i < b:
	c = a ** 2
	print u"Квадрат числа", a, u"равен", c
	i = i + 1
	a = i + 1

Результат такой (обратите внимание, что i сначала просчитывается +2, а потом +1):

Введите начало отсчета
3
Введите конец отсчета
6
Квадрат числа 3 равен 9
Квадрат числа 5 равен 25
Квадрат числа 6 равен 36
fata1ex
Квадратные корни это немного другое.

Проблема здесь скорее с месивом из переменных и вычислений. Попробуйте сравнить ваш код и этот:
# coding: utf-8
 
first_num = int(input("Введите начало отсчета: "))
last_num = int(input("Введите конец отсчета: "))
 
print "Начинаем с {0} и заканчиваем {1}:\n".format(first_num, last_num)
 
current_num = first_num
 
while current_num <= last_num:
    print "Квадрат числа {0} равен {1}".format(current_num, current_num ** 2)
    current_num += 1

Тут не возникнет проблем с индексами, сложениями и так далее. Запутаться тут не в чем. Разве что вас может напугать format, про который ни в одном учебнике не пишут :)

Цикл while, в котором в условии стоит некий счетчик, который инкрементируется в теле цикла, называется for:
# coding: utf-8
 
first_num = int(input("Введите начало отсчета: "))
last_num = int(input("Введите конец отсчета: "))
 
print "Начинаем с {0} и заканчиваем {1}:\n".format(first_num, last_num)
 
for current_num in xrange(first_num, last_num + 1):
    print "Квадрат числа {0} равен {1}".format(current_num, current_num ** 2)
Griffon
Нет ничего странного что пропускается элемент a+1 ведь у вас же написано:
    i = i + 1
    a = i + 1
Griffon
В целом это странный код. Обычно при работе с рядом чисел сразу видишь range|xrange
for i in range(a, b+1):
    print(i, i**2)
# или
r = [(x, x**2) for x in range(a, b+1)]
for i, i2 in r:
    print(i, i2)
Razor
Griffon
В целом это странный код. Обычно при работе с рядом чисел сразу видишь range|xrange
for i in range(a, b+1):
    print(i, i**2)
# или
r = [(x, x**2) for x in range(a, b+1)]
for i, i2 in r:
    print(i, i2)
Griffon, я энтузиаст-самоучка. Учусь на третьем курсе юриспруденции, но в детстве очень-очень увлекала математика. Я сейчас всего-то изучаю цикл for, но изучаю основательно (начал обучение где-то дней 5 назад), чтобы запомнить. Наставника, к моему большому сожалению, тоже не имею. Ну разве что это форум. )

А по сабжу, fata1ex описал код, я потом только заметил, что a подразумевает в вычислениях i, а вот i не подразумевает a. Исправил, заработало. Но все равно спасибо, что проявили внимание к теме. ) Обязательно, как изучу язык чуть глубже разберу ваши варианты (сравнение, как можно решать задачи иными способами).

Отдельное огромное спасибо хочу сказать fata1ex, и не только за помощь, а еще и за .format. Отлично упрощает код и повышает читабельность.
py.user.next
Razor
Griffon, я энтузиаст-самоучка. Учусь на третьем курсе юриспруденции, но в детстве очень-очень увлекала математика.
сперва определяется конкретная цель, затем конкретный способ её достижения, а затем уже пишется код

у тебя цель не поставлена
Razor
py.user.next
сперва определяется конкретная цель, затем конкретный способ её достижения, а затем уже пишется код

у тебя цель не поставлена

Что именно вы подразумеваете под целью? Глобальная цель? Я хочу по возможности окончить высшее (возможно и заочное, ради диплома) на программера, а сейчас пытаюсь понять, надо оно мне или нет. Если через год не потеряю интерес - пойду на высшее.

Если вы имели ввиду цель по сабжу, то цель, вроде, ясна: задается начальное число a, конечное число b, а потом вычисляется квадрат всех чисел между a и b. Практического значения эта задание не имеет, а в плане практики - вещь хорошая.
py.user.next
Razor
задается начальное число a, конечное число b, а потом вычисляется квадрат всех чисел между a и b
что такое “квадрат всех чисел” ?
Razor
py.user.next
Razor
задается начальное число a, конечное число b, а потом вычисляется квадрат всех чисел между a и b
что такое “квадрат всех чисел” ?

Я понял к чему вы клоните. Я имел ввиду "Квадрат каждого персонального числа от числа a до числа b". Зачем? Просто потому-что
py.user.next
было
Razor
скрипт, выдающий квадратные корни от значения a до b

стало
Razor
Квадрат каждого персонального числа от числа a до числа b

нужно
Razor
Вывести на экран квадраты всех натуральных чисел от a до b включительно.

один из способов

словесное описание:
1. ввести границы, первое и второе число
2. пока первое число не больше второго:
2.1 вывести квадрат первого числа
2.2 увеличить первое число на единицу

стадия блок-схемы пропущена

стадия псевдокода пропущена

код:
>>> # coding: utf-8
... 
>>> def f():
...     a = int(raw_input("Введите начало отсчета "))
...     b = int(raw_input("Введите конец отсчета "))
...     
...     while a <= b:
...         print u"Квадрат числа", a, u"равен", a * a
...         a += 1
... 
>>> f()
Введите начало отсчета 5
Введите конец отсчета 25
Квадрат числа 5 равен 25
Квадрат числа 6 равен 36
Квадрат числа 7 равен 49
Квадрат числа 8 равен 64
Квадрат числа 9 равен 81
Квадрат числа 10 равен 100
Квадрат числа 11 равен 121
Квадрат числа 12 равен 144
Квадрат числа 13 равен 169
Квадрат числа 14 равен 196
Квадрат числа 15 равен 225
Квадрат числа 16 равен 256
Квадрат числа 17 равен 289
Квадрат числа 18 равен 324
Квадрат числа 19 равен 361
Квадрат числа 20 равен 400
Квадрат числа 21 равен 441
Квадрат числа 22 равен 484
Квадрат числа 23 равен 529
Квадрат числа 24 равен 576
Квадрат числа 25 равен 625
>>>
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