Спасибо большое! Я разобался с этим, но у меня очередная проблемка: Когда в прогамме нужно ввести число и вывести его на экран, то я печатаю команды Соответственно если я ввожу число 5, то он мне выводит 5.0000000 Как мне сделать, чтобы он выводил только 5 если после запятой нет знака или со знаками после запятой, если они есть?
Если ты ограничиваешься только выводом на экран то оставь raw_input,пусть значение так и будет в string.Т.е a=raw_input().Если это не подходит то попробуй что-нибудь с try,exсept(офф дока - http://docs.python.org/tut/node10.html ) Code: >>> while True: ... try: ... x = int(raw_input("Please enter a number: ")) ... break ... except ValueError: ... print "Oops! That was no valid number. Try again..."
>> Как мне сделать, чтобы он выводил только 5 если после запятой нет знака или со знаками после запятой, если они есть? Приведи ее к типу string перед выводом: Code: print '%s' % str(a)
нет я имею ввиду, чтобы если при делении получилось число а=2.5, а применив к нему какой-нибудь оператор получилось бы 2
nerezus, аха, в питоне без операций импорта доступно больше сотни встроенных объектов, в частности много функций. Например round(a, exactness) и int(a). Code: print 'Enter a' a = input() a = int(a) #a = round(a,0) print '%g' % (a) #да, действительно отбросили целую часть print '%d' % (a) #теперь выводим нормально input() Можно вместо преобразования типа (к целому- a=int(a)) можно оставить число вещественным, просто округлить число до заданного знака (a=round(a,0) - в данном случае точность 0).
Code: def [url=http://tinyurl.com/6geqhe]factorial[/url](x): if x == 0: return 1 else: return x * factorial(x - 1)
Спасибо! Просто я думал там есть, что-то по проще, типа как pow для возведения в степень! А какую команду нужно написать, чтобы прога остановилась?
У меня к вам очередной вопрос: в чём ошибка в этой программе: Code: #! usr/bin/env python #! -*- coding: utf-8 -*- print "Enter x1 of first triangle, please:" x11=raw_input() print "Enter y1 of first triangle, please:" y11=raw_input() print "Enter x2 of first triangle, please:" x21=raw_input() print "Enter y2 of first triangle, please:" y21=raw_input() print "Enter x3 of first triangle, please:" x31=raw_input() print "Enter y3 of first triangle, please:" y31=raw_input() print "Enter x1 of second triangle, please:" x12=raw_input() print "Enter y1 of second triangle, please:" y12=raw_input() print "Enter x2 of second triangle, please:" x22=raw_input() print "Enter y2 of second triangle, please:" y22=raw_input() print "Enter x3 of second triangle, please:" x32=raw_input() print "Enter y3 of second triangle, please:" y32=raw_input() x11=3 x21=7 x31=12 x12=5 x22=7 x32=8 y11=1 y21=9 y31=1 y12=3 y22=5 y32=3 try: x11=float(x11) x21=float(x21) x31=float(x31) x12=float(x12) x22=float(x22) x32=float(x32) y11=float(y11) y21=float(y21) y31=float(y31) y12=float(y12) y22=float(y22) y32=float(y32) except ValueError: print "Error!" ## проверка существования треугольников A1_B1=((x21-x11)**2+(y21-y11)**2)**0.5 ## нахождение длины AB в первом треугольнике B1_C1=((x31-x21)**2+(y31-y21)**2)**0.5 ## нахождение длины BC в первом треугольнике A1_C1=((x31-x11)**2+(y31-y11)**2)**0.5 ## нахождение длины AC в первом треугольнике A2_B2=((x22-x12)**2+(y22-y12)**2)**0.5 ## нахождение длины AB вo втором треугольнике B2_C2=((x32-x22)**2+(y32-y22)**2)**0.5 ## нахождение длины BC во втором треугольнике A2_C2=((x32-x12)**2+(y32-y12)**2)**0.5 ## нахождение длины AC во втором треугольнике if A1_B1+B1_C1<=A1_C1 or A1_B1+A1_C1<=B1_C1 or A1_C1+B1_C1<=A1_B1: print "Error" elif A2_B2+B2_C2<=A2_C2 or A2_B2+A2_C2<=B2_C2 or A2_C2+B2_C2<=A2_B2: print "Error" else: a=0 ## построение отрезков от вершины второго к вершинам первого A2_A1=((x11-x12)**2+(y11-y12)**2)**0.5 A2_B1=((x21-x12)**2+(y21-y12)**2)**0.5 A2_C1=((x31-x12)**2+(y31-y12)**2)**0.5 ## вычисление площадей треугольников S_A1_B1_C1=(((A1_B1+B1_C1+A1_C1)/2)*(((A1_B1+B1_C1+A1_C1)/2)-A1_B1)*(((A1_B1+B1_C1+A1_C1)/2)-B1_C1)*(((A1_B1+B1_C1+A1_C1)/2)-A1_C1))**0.5 ## площадь первого треугольника по формуле Герона S_A2_B2_C2=(((A2_B2+B2_C2+A2_C2)/2)*(((A2_B2+B2_C2+A2_C2)/2)-A2_B2)*(((A2_B2+B2_C2+A2_C2)/2)-B2_C2)*(((A2_B2+B2_C2+A2_C2)/2)-A2_C2))**0.5 ## площадь второго треугольника по формуле Герона S_A2_A1_C1=(((A2_A1+A1_C1+A2_C1)/2)*(((A2_A1+A1_C1+A2_C1)/2)-A2_A1)*(((A2_A1+A1_C1+A2_C1)/2)-A1_C1)*(((A2_A1+A1_C1+A2_C1)/2)-A2_C1))**0.5 ## площадь треугольника A2_A1_C1 по формуле Герона S_A2_A1_B1=(((A2_A1+A1_B1+A2_B1)/2)*(((A2_A1+A1_B1+A2_B1)/2)-A2_A1)*(((A2_A1+A1_B1+A2_B1)/2)-A1_B1)*(((A2_A1+A1_B1+A2_B1)/2)-A2_B1))**0.5 ## площадь треугольника A2_A1_B1 по формуле Герона S_A2_C1_B1=(((A2_C1+B1_C1+A2_B1)/2)*(((A2_C1+B1_C1+A2_B1)/2)-A2_C1)*(((A2_C1+B1_C1+A2_B1)/2)-B1_C1)*(((A2_C1+B1_C1+A2_B1)/2)-A2_B1))**0.5 ## площадь треугольника A2_C1_B1 по формуле Герона ## построение отрезков от вершины первого к вершинам второго A2_A1=((x11-x12)**2+(y11-y12)**2)**0.5 A1_B2=((x11-x22)**2+(y11-y22)**2)**0.5 A1_C2=((x11-x32)**2+(y11-y32)**2)**0.5 ## вычисление площадей треугольников S_A1_A2_B2=(((A2_A1+A1_B2+A2_B2)/2)*(((A2_A1+A1_B2+A2_B2)/2)-A2_A1)*(((A2_A1+A1_B2+A2_B2)/2)-A1_B2)*(((A2_A1+A1_B2+A2_B2)/2)-A2_B2))**0.5 ## площадь треугольника A2_A1_B2 по формуле Герона S_A1_B2_C2=(((A1_B2+A1_C2+B2_C2)/2)*(((A1_B2+A1_C2+B2_C2)/2)-A1_B2)*(((A1_B2+A1_C2+B2_C2)/2)-A1_C2)*(((A1_B2+A1_C2+B2_C2)/2)-B2_C2))**0.5 ## площадь треугольника A1_B2_C2 по формуле Герона S_A1_A2_C2=(((A2_A1+A1_C2+A2_C2)/2)*(((A2_A1+A1_C2+A2_C2)/2)-A2_A1)*(((A2_A1+A1_C2+A2_C2)/2)-A1_C2)*(((A2_A1+A1_C2+A2_C2)/2)-A2_C2))**0.5 ## площадь треугольника A1_A2_C2 по формуле Герона ## сравнение площадей треугольников if S_A1_B1_C1==S_A2_A1_C1+S_A2_A1_B1+S_A2_C1_B1: print "Second triangle in first" elif S_A2_B2_C2==S_A1_A2_B2+S_A1_B2_C2+S_A1_A2_C2: print "First triangle in second" else: print "%f | %f" %(S_A2_B2_C2, S_A1_A2_B2+S_A1_B2_C2+S_A1_A2_C2) Программа должна определять вложен ли один треугольник в другой. Но меня интересуют последний цик if. Если выполнить программу, то она выводит на печать значения S_A2_B2_C2 и S_A1_A2_B2+S_A1_B2_C2+S_A1_A2_C2 = 36, то есть они одинаковы, но само то, что он печатает эти значения говорит о том, что он уходит не в первую ветку цикла, а в ELSE Почему так происходит?
Все у тебя в порядке с последним циклом, только что попробовал присвоить вручную: S_A1_B1_C1=3 S_A2_A1_C1=1 S_A2_A1_B1=1 S_A2_C1_B1=1 , результат :Second triangle in first У тебя просто не выполняется условие
Не вижу условий, если честно , точнее значений Упс, сорри, увидел Короче, блин в глазах уже рябит от твоих цифр - глянь формулы свои, скорее всего ошибка в них Короче смотри, сделал S_A2_B2_C2=3 S_A1_A2_B2=1 S_A1_B2_C2=1 S_A1_A2_C2=1 результат: First triangle in second Значит: 1 вариант - ошибка в формулах 2 вариант- заданные условия не являются подходящими для данной ветки цикла Цикл у тебя отрабатывает нормально Блин, и если уж на то пошло, то код у тебя отрабатывает нормально : Code: #! usr/bin/env python #! -*- coding: utf-8 -*- print "Enter x1 of first triangle, please:" x11=raw_input() print "Enter y1 of first triangle, please:" y11=raw_input() print "Enter x2 of first triangle, please:" x21=raw_input() print "Enter y2 of first triangle, please:" y21=raw_input() print "Enter x3 of first triangle, please:" x31=raw_input() print "Enter y3 of first triangle, please:" y31=raw_input() print "Enter x1 of second triangle, please:" x12=raw_input() print "Enter y1 of second triangle, please:" y12=raw_input() print "Enter x2 of second triangle, please:" x22=raw_input() print "Enter y2 of second triangle, please:" y22=raw_input() print "Enter x3 of second triangle, please:" x32=raw_input() print "Enter y3 of second triangle, please:" y32=raw_input() x11=3 x21=7 x31=12 x12=5 x22=7 x32=8 y11=1 y21=9 y31=1 y12=3 y22=5 y32=3 try: x11=float(x11) x21=float(x21) x31=float(x31) x12=float(x12) x22=float(x22) x32=float(x32) y11=float(y11) y21=float(y21) y31=float(y31) y12=float(y12) y22=float(y22) y32=float(y32) except ValueError: print "Error!" ## проверка существования треугольников A1_B1=((x21-x11)**2+(y21-y11)**2)**0.5 ## нахождение длины AB в первом треугольнике B1_C1=((x31-x21)**2+(y31-y21)**2)**0.5 ## нахождение длины BC в первом треугольнике A1_C1=((x31-x11)**2+(y31-y11)**2)**0.5 ## нахождение длины AC в первом треугольнике A2_B2=((x22-x12)**2+(y22-y12)**2)**0.5 ## нахождение длины AB вo втором треугольнике B2_C2=((x32-x22)**2+(y32-y22)**2)**0.5 ## нахождение длины BC во втором треугольнике A2_C2=((x32-x12)**2+(y32-y12)**2)**0.5 ## нахождение длины AC во втором треугольнике if A1_B1+B1_C1<=A1_C1 or A1_B1+A1_C1<=B1_C1 or A1_C1+B1_C1<=A1_B1: print "Error" elif A2_B2+B2_C2<=A2_C2 or A2_B2+A2_C2<=B2_C2 or A2_C2+B2_C2<=A2_B2: print "Error" else: a=0 ## построение отрезков от вершины второго к вершинам первого A2_A1=((x11-x12)**2+(y11-y12)**2)**0.5 A2_B1=((x21-x12)**2+(y21-y12)**2)**0.5 A2_C1=((x31-x12)**2+(y31-y12)**2)**0.5 ## вычисление площадей треугольников S_A1_B1_C1=(((A1_B1+B1_C1+A1_C1)/2)*(((A1_B1+B1_C1+A1_C1)/2)-A1_B1)*(((A1_B1+B1_C1+A1_C1)/2)-B1_C1)*(((A1_B1+B1_C1+A1_C1)/2)-A1_C1))**0.5 ## площадь первого треугольника по формуле Герона S_A2_B2_C2=(((A2_B2+B2_C2+A2_C2)/2)*(((A2_B2+B2_C2+A2_C2)/2)-A2_B2)*(((A2_B2+B2_C2+A2_C2)/2)-B2_C2)*(((A2_B2+B2_C2+A2_C2)/2)-A2_C2))**0.5 ## площадь второго треугольника по формуле Герона S_A2_A1_C1=(((A2_A1+A1_C1+A2_C1)/2)*(((A2_A1+A1_C1+A2_C1)/2)-A2_A1)*(((A2_A1+A1_C1+A2_C1)/2)-A1_C1)*(((A2_A1+A1_C1+A2_C1)/2)-A2_C1))**0.5 ## площадь треугольника A2_A1_C1 по формуле Герона S_A2_A1_B1=(((A2_A1+A1_B1+A2_B1)/2)*(((A2_A1+A1_B1+A2_B1)/2)-A2_A1)*(((A2_A1+A1_B1+A2_B1)/2)-A1_B1)*(((A2_A1+A1_B1+A2_B1)/2)-A2_B1))**0.5 ## площадь треугольника A2_A1_B1 по формуле Герона S_A2_C1_B1=(((A2_C1+B1_C1+A2_B1)/2)*(((A2_C1+B1_C1+A2_B1)/2)-A2_C1)*(((A2_C1+B1_C1+A2_B1)/2)-B1_C1)*(((A2_C1+B1_C1+A2_B1)/2)-A2_B1))**0.5 ## площадь треугольника A2_C1_B1 по формуле Герона ## построение отрезков от вершины первого к вершинам второго A2_A1=((x11-x12)**2+(y11-y12)**2)**0.5 A1_B2=((x11-x22)**2+(y11-y22)**2)**0.5 A1_C2=((x11-x32)**2+(y11-y32)**2)**0.5 ## вычисление площадей треугольников S_A1_A2_B2=(((A2_A1+A1_B2+A2_B2)/2)*(((A2_A1+A1_B2+A2_B2)/2)-A2_A1)*(((A2_A1+A1_B2+A2_B2)/2)-A1_B2)*(((A2_A1+A1_B2+A2_B2)/2)-A2_B2))**0.5 ## площадь треугольника A2_A1_B2 по формуле Герона S_A1_B2_C2=(((A1_B2+A1_C2+B2_C2)/2)*(((A1_B2+A1_C2+B2_C2)/2)-A1_B2)*(((A1_B2+A1_C2+B2_C2)/2)-A1_C2)*(((A1_B2+A1_C2+B2_C2)/2)-B2_C2))**0.5 ## площадь треугольника A1_B2_C2 по формуле Герона S_A1_A2_C2=(((A2_A1+A1_C2+A2_C2)/2)*(((A2_A1+A1_C2+A2_C2)/2)-A2_A1)*(((A2_A1+A1_C2+A2_C2)/2)-A1_C2)*(((A2_A1+A1_C2+A2_C2)/2)-A2_C2))**0.5 ## площадь треугольника A1_A2_C2 по формуле Герона ## сравнение площадей треугольников S_A2_B2_C2=3 S_A1_A2_B2=1 S_A1_B2_C2=1 S_A1_A2_C2=1 if S_A1_B1_C1==S_A2_A1_C1+S_A2_A1_B1+S_A2_C1_B1: print "Second triangle in first" elif S_A2_B2_C2==S_A1_A2_B2+S_A1_B2_C2+S_A1_A2_C2: print "First triangle in second" else: print "%f | %f" %(S_A2_B2_C2, S_A1_A2_B2+S_A1_B2_C2+S_A1_A2_C2) Результат: First triangle in second
Так они перед циклом высчитываются по формулам. В формулах ошибок вроде нет - всё проверял. Дело в том, что в последнем цикле он должен сравнивать два числа, он их почему-то считает различными, а потом выводит их на печать : и это 36 и 36
Короче, читаю твой цикл, как его вижу я : Code: if S_A1_B1_C1==S_A2_A1_C1+S_A2_A1_B1+S_A2_C1_B1: print "Second triangle in first" elif S_A2_B2_C2==S_A1_A2_B2+S_A1_B2_C2+S_A1_A2_C2: print "First triangle in second" else: print "%f | %f" %(S_A2_B2_C2, S_A1_A2_B2+S_A1_B2_C2+S_A1_A2_C2) ЕСЛИ S_A1_B1_C1==S_A2_A1_C1+S_A2_A1_B1+S_A2_C1_B1, то : напечатать "Second triangle in first" ЕЩЕ ЕСЛИ S_A2_B2_C2==S_A1_A2_B2+S_A1_B2_C2+S_A1_A2_C2, то : напечатать "First triangle in second" ЕЩЕ (во всех остальных случаях) НАПЕЧАТАТЬ "%f | %f" %(S_A2_B2_C2, S_A1_A2_B2+S_A1_B2_C2+S_A1_A2_C2) - где здесь сравнение ? в первых двух ветках сравнение есть, в третьей же ветке сравнения нету, есть только задание вывода на печать, цикл отрабатывает все так как ему указано, скажи, что должна делать третья ветка ?