Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 28, 2014 12:38:50

molebox
Зарегистрирован: 2014-02-28
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

работа с rstrip

Привет.
Не могу понять свою ошибку. Не удаляется конец строки /n - смотрю в дебаггере в Wing IDE
Да и если раскоментирую #int(line) - то напишут про /n
Что я не правильно делаю?

import io
import random
import math
fn = open("number.txt", mode="w")
i = 0
while i<=10:
  plot = str(random.uniform(-10.00,10.00)) + "\n"
  fn.write(plot)
  i = i+1
  
fn.close()
fn2 = open("number.txt")
for line in fn2:
  line.rstrip()
  #int(line) 
fn2.close

Отредактировано molebox (Фев. 28, 2014 12:47:08)

Офлайн

#2 Фев. 28, 2014 12:56:41

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

работа с rstrip

Строки в питоне это неизменяемая последовательность. Т.е. Вы можете только создать новую строку на основе преобразования старой. Например

new_str = ''.join([line.rstrip() for line in fn2])

Офлайн

#3 Фев. 28, 2014 14:04:08

molebox
Зарегистрирован: 2014-02-28
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

работа с rstrip

Т.е. нужно копировать из line в новую переменную строку, уже без знака /n ?

Сделал так:

fn2 = open("number.txt")
for line in fn2:
  line2 = line.rstrip()  
fn2.close

Работает! В line2 тоже число что и в line, только без \n . Спасибо, dimy44!
Работает также и пересвоение line, т.е. line= line.rstrip()

——-
Возник другой вопрос:
line = -4.5526186318
Как сделать так, чтобы округлить это значение до -5 и сконвертировать в Int ?

Думаю, что нужно сделать что-то типа этого:
line2 = int(line)
line2 = round(line)
Но возникает ошибка на первой строке: ValueError: invalid literal for int() with base 10: ‘-4.5526186318’

UPDATE:
А-а-а, сглупил Нужно было сначала float использовать, чтобы сконвертировать строку в цифровое значение, а затем уже привести float в Int
  line = float(line) 
  line = int(line)

Отредактировано molebox (Фев. 28, 2014 14:43:05)

Офлайн

#4 Фев. 28, 2014 20:24:28

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

работа с rstrip

molebox
Возник другой вопрос:
line = -4.5526186318
Как сделать так, чтобы округлить это значение до -5 и сконвертировать в Int ?
>>> import math
>>> 
>>> n = -4.5526186318
>>> math.floor(n)
-5
>>> type(math.floor(n))
<class 'int'>
>>>



Офлайн

#5 Март 1, 2014 03:08:35

molebox
Зарегистрирован: 2014-02-28
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

работа с rstrip

py.user.next , спасибо. Значит есть несколько способов округления.
Int (n) - округлит до -4
math.floor(n) - округлит до -5
Нужно почитать про них немного.

Я тут вычитал у Марка Лутца, что оказывается, чтобы избавиться от \n , не обязательно использовать rstrip. Когда конвертируешь строковое число с помощью float/int - python автоматом избавляется от \n

Офлайн

#6 Март 1, 2014 04:37:03

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

работа с rstrip

molebox
Int (n) - округлит до -4
int не округляет, просто дробную часть отбрасывает



Офлайн

#7 Март 1, 2014 04:37:45

PanovSergey
От: Екатеринбург
Зарегистрирован: 2013-12-29
Сообщения: 269
Репутация: +  19  -
Профиль   Адрес электронной почты  

работа с rstrip

molebox
Значит есть несколько способов округления.
Еще есть Decimal.quantize()

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version