Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   ? по Python (https://forum.antichat.xyz/showthread.php?t=85619)

VIP 21.09.2008 17:54

? по Python
 
Не нашёл на сайте раздела для Python, но думаю здесь тема ближе всего.

Я с этого года поступил на программиста в универ. И пока только начинаю программировать. А вопрос у меня возник такой: как запустить исходник на Python?

Я делаю следующим образом:
1. Установил Python 2.5 для Windows.
2. В блокноте напечатал

Цитата:

print 'Please, enter a'
a = input()
print 'Please, enter b'
b = input()
print "%d + %d = %d" (a, b, a+b)
3. Сохранил файл под именем 1.py
4. Запустил Python (command line) (появилось ">>>")
5. Напечатал 1.py (так как файл лежит в папке с Python'ом)
6. Он мне выдал
Цитата:

File "<stdin>", line 1
1.py
SyntaxError: invalid syntax
Как мне запустить исполнение проги из файла. Главное если я печатаю всё в самом Python построчно, то всё работает.

Заранее спасибо!

P.S. Почему на этом форуме не обсуждается Python? Ведь это, как я понял, тоже довольно сильный язык?

Rejjin 21.09.2008 18:04

Traceback (innermost last):
File "\1.py", line 5, in <module>
print "%d + %d = %d" (a, b, a+b)
<type 'exceptions.TypeError'>: 'str' object is not callable
у меня короче такая ошибка, но 2 окна ввода появляются

0x0c0de 21.09.2008 18:07

>> А вопрос у меня возник такой: как запустить исходник на Python?

В командной строке windows cd c:\Python25 (или где там у вас python)

а потом набираете

python.exe 1.py

>> (появилось ">>>")

просто вы не ввели с первого раза при запуске имя файла. я выше написала как по-нормальному запустить. а чем не устраивает просто открыть файл с расширением *.py? обязательно хотите через командную строку. ну как хотите

и вообще

print '%d + %d = %d' % (a, b, a+b)

так надо, а то не проробит

Rejjin 21.09.2008 18:15

print 'Please, enter a'
a = input()
print 'Please, enter b'
b = input()
print "%d + %d = %d" %(a, b, a+b)
держи

VIP 21.09.2008 18:24

Цитата:

Сообщение от 0x0c0de
>> А вопрос у меня возник такой: как запустить исходник на Python?

В командной строке windows cd c:\Python25 (или где там у вас python)

а потом набираете

python.exe 1.py

>> (появилось ">>>")

просто вы не ввели с первого раза при запуске имя файла. я выше написала как по-нормальному запустить. а чем не устраивает просто открыть файл с расширением *.py? обязательно хотите через командную строку. ну как хотите

и вообще

print '%d + %d = %d' % (a, b, a+b)

так надо, а то не проробит

Большое спасибо! Помогло! А через командную строку мне надо, так как иначе он выдаёт ответ действия и тут же закрывает окно (то есть я не успеваю просмотреть результат).

Ещё раз БОЛЬШОЕ спасибо!

0x0c0de 21.09.2008 18:30

чтобы успевали в конце кода напишите

input()

и запускайте py-файл


Код:


print 'Please, enter a'
a = input()
print 'Please, enter b'
b = input()
print '%d + %d = %d' % (a, b, a+b)
input()

как вариант застоппить так

iddqd 21.09.2008 18:31

если хочешь запустить именно через cmd, а не интерпретатор питона, просто открой ком.строку и закинь туда файл drag'n'drop-ом

VIP 21.09.2008 18:43

Цитата:

Сообщение от iddqd
если хочешь запустить именно через cmd, а не интерпретатор питона, просто открой ком.строку и закинь туда файл drag'n'drop-ом

Большое спасибо за совет! Дейстивтельно гораздо удобнее! :)

VIP 21.09.2008 18:47

У меня возникло ещё два вопроса. Дело в том, что нам сказали в начале каждой программы добавлять две строки:

Цитата:

#! /usr/bin/env python
# -*- coding: utf-8 -*-
Первая нужна только для Linux, а вот вторая для назначения кодировки. Вот только не могу никак сделать, чтобы эти строчки заработали. Думаю, что я напутал с пробелами (где-то не хватает, где-то лишние). :confused:

Подскажите, пожалуйста, как правильно!

Digimortal 21.09.2008 19:04

Если ты под виндой, то и кодировку соответствующую ставь:
Код:

#!/usr/bin/python
# -*- coding: cp1251 -*-


Larionich 21.09.2008 23:08

Цитата:

>> А вопрос у меня возник такой: как запустить исходник на Python?
Один способ.
cd <папка с исходниками>
Запускаешь в командной строке python2.5 (например c:\python2.5, как у тебя сам знаешь)
Пишешь >>> execfile('test.py')
Другой способ.
(Для более частого использования)
В твой test.py записываешь:
Код:

def main():
  print 'Please, enter a'
  a = input()
  print 'Please, enter b'
  b = input()
  print '%d + %d = %d' % (a, b, a+b)

Это уже твой модуль. Из него можно вызывать функцию main()
cd <папка с исходниками>
Запускаешь в командной строке python2.5
>>> import test.py
>>> test.main() #Вот так мы вызываем нашу функцию
Если же нужно быстро вызвать фунцию, можно сделать следующее (но перед этим повторить шаги "Другого способа"):
>>> z=test.main #Присвоить локальное имя
>>> z() #вызываем нашу функцию
Написал, как можно понятнее, разберешься.

VIP 22.09.2008 19:01

У меня ещё один вопрос:

Мне нужно задать в программе Гравитационную постоянную G = 6.672*10^(-11). Как мне это сделать. Нам объясняли на лекциях, что в питоне не нужно объявлять типы переменных, что мол они всегда определяются сами. Но как мне присвоить переменной G значение 6.672*10^(-11)?

Digimortal 22.09.2008 19:29

G = 6.672*10**-11

VIP 23.09.2008 03:36

Цитата:

Сообщение от Digimortal
G = 6.672*10**-11

Большое спасибо!

У меня снова вопрос: В чём ошибка кода???

Цитата:

#!/usr/bin/python
# -*- coding: utf-8 -*-

print 'Enter m1:'
m1=input()
print 'Enter m2:'
m2=input()
print 'Enter r:'
r=input()

g = 6.672*10**-11

print 'F = G * (%d * %d)/%d^2 = %d' %(m1, m2, r, (g*m1*m2)/r^2)
Пишет, что мол неподдерживаемая операция над переменными такого типа (это я так прочитал)

Это программа для расчёта силы взаимного притяжения. G - это гравитационная постоянная.

P.S. Может быть существует в питоне какой-нить список констант (типа пи, g или G)??? И если да то как его вызвать?

nerezus 23.09.2008 07:31

а зачем ты ксоришь на 2? о_О
Может тебе нужно возведение в степень?

VIP 23.09.2008 13:59

Цитата:

Сообщение от nerezus
а зачем ты ксоришь на 2? о_О
Может тебе нужно возведение в степень?

а что значит ксорить?

nitx 23.09.2008 14:17

Цитата:

P.S. Может быть существует в питоне какой-нить список констант (типа пи, g или G)??? И если да то как его вызвать?
в модуле math было что то.
Цитата:

print 'F = G * (%d * %d)/%d^2 = %d' %(m1, m2, r, (g*m1*m2)/r^2)
я может уже не помню, но возведение в степень не ^ а **

VIP 23.09.2008 14:32

Цитата:

Сообщение от nerezus
а зачем ты ксоришь на 2? о_О
Может тебе нужно возведение в степень?

а что значит ксорить?

Digimortal 23.09.2008 16:01

>> а что значит ксорить?

Не знаю, что это, но слышал, что тру хеккеры умеють ксорить в уме целые дворды! Только не спрашуй, что такое "дворды" - все равно тут никто не знает. И в гугле хрен найдешь значения этих слов. )

Может, тебе книжку про программированию на пайтоне стоит почитать для начала? )

nerezus 23.09.2008 21:35

Цитата:

а что значит ксорить?
http://ru.wikipedia.org/wiki/Xor

VIP 24.09.2008 19:45

Спасибо большое! Я разобался с этим, но у меня очередная проблемка:

Когда в прогамме нужно ввести число и вывести его на экран, то я печатаю команды

Цитата:

print 'Enter A, please:'
a=float(raw_input())
print '%f' %(a)
Соответственно если я ввожу число 5, то он мне выводит 5.0000000

Как мне сделать, чтобы он выводил только 5 если после запятой нет знака или со знаками после запятой, если они есть?

t00th 25.09.2008 16:22

Цитата:

Сообщение от VIP
Спасибо большое! Я разобался с этим, но у меня очередная проблемка:

Когда в прогамме нужно ввести число и вывести его на экран, то я печатаю команды


Соответственно если я ввожу число 5, то он мне выводит 5.0000000

Как мне сделать, чтобы он выводил только 5 если после запятой нет знака или со знаками после запятой, если они есть?

Если ты ограничиваешься только выводом на экран то оставь raw_input,пусть значение так и будет в string.Т.е a=raw_input().Если это не подходит то попробуй что-нибудь с try,exсept(офф дока - http://docs.python.org/tut/node10.html )
Код:

>>> while True:
...    try:
...        x = int(raw_input("Please enter a number: "))
...        break
...    except ValueError:
...        print "Oops!  That was no valid number.  Try again..."


Digimortal 25.09.2008 17:05

>> Как мне сделать, чтобы он выводил только 5 если после запятой нет знака или со знаками после запятой, если они есть?

Приведи ее к типу string перед выводом:
Код:

print '%s' % str(a)

VIP 27.09.2008 19:58

Как в питоне можно от числа откинуть дробную часть?

iddqd 27.09.2008 20:37

Если ты про целочисленное деление, то для python 2.* это / , а для 3.0 //

VIP 27.09.2008 21:15

Цитата:

Сообщение от iddqd
Если ты про целочисленное деление, то для python 2.* это / , а для 3.0 //

нет я имею ввиду, чтобы если при делении получилось число а=2.5, а применив к нему какой-нибудь оператор получилось бы 2

nerezus 27.09.2008 22:11

import math
help(math)

Larionich 27.09.2008 23:01

nerezus, аха, в питоне без операций импорта доступно больше сотни встроенных объектов, в частности много функций. Например round(a, exactness) и int(a).
Код:

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).

VIP 28.09.2008 11:34

Цитата:

Сообщение от Larionich
nerezus, аха, в питоне без операций импорта доступно больше сотни встроенных объектов, в частности много функций. Например round(a, exactness) и int(a).
Код:

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).

БОЛЬШОЕ спасибо! Это именно то, что я спрашивал.

VIP 03.11.2008 11:44

С помощью какой функции можно вычислить факториал числа?

astrologer 03.11.2008 12:08

Цитата:

Сообщение от VIP
С помощью какой функции можно вычислить факториал числа?

Код:

def factorial(x):
    if x == 0:
        return 1
    else:
        return x * factorial(x - 1)


VIP 07.11.2008 14:52

Цитата:

Сообщение от astrologer
Код:

def factorial(x):
    if x == 0:
        return 1
    else:
        return x * factorial(x - 1)


Спасибо! Просто я думал там есть, что-то по проще, типа как pow для возведения в степень!

А какую команду нужно написать, чтобы прога остановилась?

H1Z 07.11.2008 15:10

Если выйти, то "exit()"

VIP 07.11.2008 17:56

Цитата:

Сообщение от H1Z
Если выйти, то "exit()"

СПАСИБО! ;)

VIP 08.12.2008 22:05

У меня к вам очередной вопрос:

в чём ошибка в этой программе:

Код:

#! 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 :confused: Почему так происходит?

login999 08.12.2008 22:41

Цитата:

Сообщение от VIP
У меня к вам очередной вопрос:

в чём ошибка в этой программе:

Код:

#! 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 :confused: Почему так происходит?

Все у тебя в порядке с последним циклом, только что попробовал присвоить вручную:
S_A1_B1_C1=3
S_A2_A1_C1=1
S_A2_A1_B1=1
S_A2_C1_B1=1
, результат :Second triangle in first
У тебя просто не выполняется условие

VIP 08.12.2008 22:50

Но почему он тогда с данными значениями не выполняет условие??? Получается у него 36 не равно 36 ?

login999 08.12.2008 23:02

Цитата:

Сообщение от VIP
Но почему он тогда с данными значениями не выполняет условие??? Получается у него 36 не равно 36 ?

Не вижу условий, если честно :), точнее значений

Упс, сорри, увидел :)

Короче, блин в глазах уже рябит от твоих цифр - глянь формулы свои, скорее всего ошибка в них

Короче смотри, сделал
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 вариант- заданные условия не являются подходящими для данной ветки цикла

Цикл у тебя отрабатывает нормально

Блин, и если уж на то пошло, то код у тебя отрабатывает нормально :
Код:

#! 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

VIP 08.12.2008 23:43

Так они перед циклом высчитываются по формулам. В формулах ошибок вроде нет - всё проверял. Дело в том, что в последнем цикле он должен сравнивать два числа, он их почему-то считает различными, а потом выводит их на печать : и это 36 и 36 :confused:

login999 09.12.2008 00:07

Цитата:

Сообщение от VIP
Так они перед циклом высчитываются по формулам. В формулах ошибок вроде нет - всё проверял. Дело в том, что в последнем цикле он должен сравнивать два числа, он их почему-то считает различными, а потом выводит их на печать : и это 36 и 36 :confused:

Короче, читаю твой цикл, как его вижу я :
Код:

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) - где здесь сравнение ?
в первых двух ветках сравнение есть, в третьей же ветке сравнения нету, есть только задание вывода на печать, цикл отрабатывает все так как ему указано, скажи, что должна делать третья ветка ?


Время: 04:33