? по Python

Discussion in 'PHP' started by VIP, 21 Sep 2008.

  1. VIP

    VIP Elder - Старейшина

    Joined:
    29 Dec 2004
    Messages:
    104
    Likes Received:
    3
    Reputations:
    0
    Спасибо большое! Я разобался с этим, но у меня очередная проблемка:

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

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

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

    t00th Banned

    Joined:
    15 Jul 2007
    Messages:
    37
    Likes Received:
    15
    Reputations:
    6
    Если ты ограничиваешься только выводом на экран то оставь 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..." 
     
  3. Digimortal

    Digimortal Banned

    Joined:
    22 Aug 2006
    Messages:
    471
    Likes Received:
    248
    Reputations:
    189
    >> Как мне сделать, чтобы он выводил только 5 если после запятой нет знака или со знаками после запятой, если они есть?

    Приведи ее к типу string перед выводом:
    Code:
    print '%s' % str(a)
     
    1 person likes this.
  4. VIP

    VIP Elder - Старейшина

    Joined:
    29 Dec 2004
    Messages:
    104
    Likes Received:
    3
    Reputations:
    0
    Как в питоне можно от числа откинуть дробную часть?
     
  5. iddqd

    iddqd Banned

    Joined:
    19 Dec 2007
    Messages:
    637
    Likes Received:
    519
    Reputations:
    19
    Если ты про целочисленное деление, то для python 2.* это / , а для 3.0 //
     
    1 person likes this.
  6. VIP

    VIP Elder - Старейшина

    Joined:
    29 Dec 2004
    Messages:
    104
    Likes Received:
    3
    Reputations:
    0
    нет я имею ввиду, чтобы если при делении получилось число а=2.5, а применив к нему какой-нибудь оператор получилось бы 2
     
  7. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    import math
    help(math)
     
  8. Larionich

    Larionich Member

    Joined:
    21 Sep 2008
    Messages:
    15
    Likes Received:
    5
    Reputations:
    0
    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).
     
  9. VIP

    VIP Elder - Старейшина

    Joined:
    29 Dec 2004
    Messages:
    104
    Likes Received:
    3
    Reputations:
    0
    БОЛЬШОЕ спасибо! Это именно то, что я спрашивал.
     
  10. VIP

    VIP Elder - Старейшина

    Joined:
    29 Dec 2004
    Messages:
    104
    Likes Received:
    3
    Reputations:
    0
    С помощью какой функции можно вычислить факториал числа?
     
  11. astrologer

    astrologer Elder - Старейшина

    Joined:
    30 Aug 2007
    Messages:
    837
    Likes Received:
    267
    Reputations:
    59
    Code:
    def [url=http://tinyurl.com/6geqhe]factorial[/url](x):
        if x == 0:
            return 1
        else:
            return x * factorial(x - 1)
     
  12. VIP

    VIP Elder - Старейшина

    Joined:
    29 Dec 2004
    Messages:
    104
    Likes Received:
    3
    Reputations:
    0
    Спасибо! Просто я думал там есть, что-то по проще, типа как pow для возведения в степень!

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

    H1Z Elder - Старейшина

    Joined:
    23 Mar 2007
    Messages:
    103
    Likes Received:
    61
    Reputations:
    6
    Если выйти, то "exit()"
     
  14. VIP

    VIP Elder - Старейшина

    Joined:
    29 Dec 2004
    Messages:
    104
    Likes Received:
    3
    Reputations:
    0
    СПАСИБО! ;)
     
  15. VIP

    VIP Elder - Старейшина

    Joined:
    29 Dec 2004
    Messages:
    104
    Likes Received:
    3
    Reputations:
    0
    У меня к вам очередной вопрос:

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

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

    login999 Elder - Старейшина

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Все у тебя в порядке с последним циклом, только что попробовал присвоить вручную:
    S_A1_B1_C1=3
    S_A2_A1_C1=1
    S_A2_A1_B1=1
    S_A2_C1_B1=1
    , результат :Second triangle in first
    У тебя просто не выполняется условие
     
  17. VIP

    VIP Elder - Старейшина

    Joined:
    29 Dec 2004
    Messages:
    104
    Likes Received:
    3
    Reputations:
    0
    Но почему он тогда с данными значениями не выполняет условие??? Получается у него 36 не равно 36 ?
     
  18. login999

    login999 Elder - Старейшина

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Не вижу условий, если честно :), точнее значений

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

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

    Короче смотри, сделал
    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
     
    #38 login999, 8 Dec 2008
    Last edited: 8 Dec 2008
  19. VIP

    VIP Elder - Старейшина

    Joined:
    29 Dec 2004
    Messages:
    104
    Likes Received:
    3
    Reputations:
    0
    Так они перед циклом высчитываются по формулам. В формулах ошибок вроде нет - всё проверял. Дело в том, что в последнем цикле он должен сравнивать два числа, он их почему-то считает различными, а потом выводит их на печать : и это 36 и 36 :confused:
     
  20. login999

    login999 Elder - Старейшина

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Короче, читаю твой цикл, как его вижу я :
    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) - где здесь сравнение ?
    в первых двух ветках сравнение есть, в третьей же ветке сравнения нету, есть только задание вывода на печать, цикл отрабатывает все так как ему указано, скажи, что должна делать третья ветка ?