Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.11.2014, 12:20   #1
(Нафаня)
Пользователь
 
Аватар для (Нафаня)
 
Регистрация: 08.03.2011
Сообщений: 56
По умолчанию Питон. Проблема с отрицательными числами

Проблема в том, что если в файле написать отрицательные координаты, то программа их не очень хочет принимать. Ошибка следующая:
Код:
Traceback (most recent call last):
  File "C:\Users\Olva\Desktop\Учеба\4 курс\Zadachi_Python\Задачи Python\1\1.py", line 29, in <module>
    x1, y1 = int(float(fd1[i])), int(float(fd1[i+2]))
ValueError: could not convert string to float: -
Не могу понять как исправить и что вообще исправлять



Код:
# -*- coding: utf-8 -*-
import math
k = 0#schetchik povorotov na levo
#putaemsya otkrit file, esli ego net, vudast oshibku
try:
       f = open("1_1.txt","r")
except IOError:
        print ("No file")
#chitaem iz faila        
fd = f.read()
print(fd)
fd1 = []
with open('1_1.txt') as input_file:
         for line in input_file.read():
                fd1.append(line)
                if line == " ":
                      input_file.close()
                if line == "\n":
                      input_file.close()
M=int(float(fd1[0]))
print"Shtraf za odno narushenie ",M,"000 rub"

a = []
j = 2
while j<=len(fd1)-14:
       a = a + [j]
       j = j + 4
for i in a:
        x1, y1 = int(float(fd1[i])), int(float(fd1[i+2]))
        x2, y2 = int(float(fd1[i+4])), int(float(fd1[i+6]))
        x3, y3 = int(float(fd1[i+8])), int(float(fd1[i+10]))
        x4, y4 = int(float(fd1[i+12])), int(float(fd1[i+14]))
        n1 = x2 - x1
        n2 = y2 - y1
        n3 = x4 - x3
        n4 = y4 - y3
        n = n1*n4-n2*n3

        if n>0:
               k = k + 1
print "Soversheno ",k," narushenii"
shtraf = M * k
print "V itoge shtraf sostavlyaet",shtraf,"000 rub"
Условие:
«Штраф за левые повороты». В городе водителям запрещено выполнять левые
повороты. За каждый такой поворот водитель должен уплатить штраф в размере М рублей.
Для слежки за водителями в городе установлена компьютерная система, фиксирующая
координаты автомобиля в начале движения, в конце движения и во время поворота.
Исходные данные (структура входного файла разрабатывается самостоятельно):
M – штраф за выполнение левого поворота,
(xi, yi) – координаты автомобиля в процессе движения, i: 1,2, … N
Требуется по заданной последовательности координат движения вычислить сумму
штрафа водителя.
Справка:
Если вектор a образует с осью Ох угол α, а вектор b – угол β (представьте, что вектора a и b
находятся в одной плоскости), то для векторного произведения справедлива формула [a × b]=
0 ∙ i + 0 ∙ j + (|a| ∙ |b| ∙ sin(β-α ))∙ k, где i, j, k – единичные векторы пространства. Это означает,
что для ненулевых векторов векторное произведение равно нулю тогда и только тогда, когда
векторы параллельны. Если поворот от вектора а к вектору b по наименьшему углу
выполняется против часовой стрелки, то [a × b] > 0, если по часовой стрелке, то [a × b] < 0.
Если бы люди,вдруг,узнали,о чем я думаю... Со мной бы сначала перестали здороваться,а потом,вообще,на костре сожгли бы нафиг
(Нафаня) вне форума Ответить с цитированием
Старый 15.11.2014, 13:10   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

А как файл выглядит? Сама конвертация верная, а вот считывается судя по всему ерунда. Файл приложить можешь?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.11.2014, 16:52   #3
GetMax
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 588
По умолчанию

Попробуй так читать из файла
Код:
for line in input_file.read().split():
Пользователь не знает, чего он хочет, пока не увидит то, что он получил.
Для благодарностей WMR R145235935681
GetMax вне форума Ответить с цитированием
Старый 16.11.2014, 22:39   #4
(Нафаня)
Пользователь
 
Аватар для (Нафаня)
 
Регистрация: 08.03.2011
Сообщений: 56
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А как файл выглядит? Сама конвертация верная, а вот считывается судя по всему ерунда. Файл приложить можешь?
txt файл, в нем след координаты:
2
2 -1
3 2
1 5
5 6
-2 8
Первая 2 - количество левых поворотов
так выглядит путь
C3eKxTtftk8.jpg
Если бы люди,вдруг,узнали,о чем я думаю... Со мной бы сначала перестали здороваться,а потом,вообще,на костре сожгли бы нафиг
(Нафаня) вне форума Ответить с цитированием
Старый 17.11.2014, 08:20   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Опа! Так может твой код символ читает а не число?
Ты бы прописала в коде вывод считанного в консоль питона - посмотришь как он считываает.
А вот совет GetMax стоит опробовать.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.11.2014, 12:10   #6
(Нафаня)
Пользователь
 
Аватар для (Нафаня)
 
Регистрация: 08.03.2011
Сообщений: 56
По умолчанию

Спасибо! Сейчас попробую)
Если бы люди,вдруг,узнали,о чем я думаю... Со мной бы сначала перестали здороваться,а потом,вообще,на костре сожгли бы нафиг
(Нафаня) вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа не работает с отрицательными числами. Почему? I love bellydance Помощь студентам 3 06.11.2013 10:34
разброс с отрицательными и положительными числами Leshiy1 Паскаль, Turbo Pascal, PascalABC.NET 11 03.01.2011 05:31
прога на асемблере не работает с отрицательными числами frankfish Помощь студентам 1 12.03.2009 09:05