2013-09-16 1 views
3

У меня есть назначение в моем классе Data Structures, и я использую Python, чтобы попытаться его решить. Я действительно застрял и ржавый в Python, поэтому, пожалуйста, несите меня.Разделите предложение на слова, используя символ пробела в качестве разделителя в Python

Проблема

Read a sentence from the console. 
Break the sentence into words using the space character as a delimiter. 
Iterate over each word, if the word is a numeric 
value then print its value doubled, otherwise print out the word, 
with each output on its own line. 

Sample Run: 
Sentence: Hello world, there are 3.5 items. 

Output: 
Hello 
world, 
there 
are 
7 
items. 

мой код до сих пор ...

import string 
import re 

def main(): 
    string=input("Input a sentence: ") 
    wordList = re.sub("[^\w]", " ", string).split() 
    print("\n".join(wordList)) 
main() 

Это дает мне этот выход:

>>> 
Input a sentence: I like to eat 7 potatoes at a time 
I 
like 
to 
eat 
7 
potatoes 
at 
a 
time 
>>> 

Так что моя задача выяснить, как извлекая числовой и затем удваивает его. Я не знаю, с чего начать.

Любая обратная связь всегда приветствуется. Спасибо!

+0

Вы можете проверить, является ли строка числом в Python: http://stackoverflow.com/questions/354038/how-do-i-check-if-a-string-is-a-number-in-python –

ответ

2

В здесь:

print("\n".join(wordList)) 

Вы можете использовать список понимание, чтобы определить слово, является ли число или нет. Может быть что-то вроде:

print('\n'.join(str(int(i)*2) if i.isdigit() else i for i in wordList) 

Это находит строки, которые кажутся целыми числами с помощью str.isdigit, преобразует его в целое число, поэтому мы можем умножить его на 2, а затем превратить его обратно в строку.


Для поплавков, то try/except структура полезно здесь:

try: 
    print('\n'.join(str(int(i)*2) if i.isdigit() else i for i in wordList) 
except ValueError: 
    print('\n'.join(str(float(i)*2) if i.isdigit() else i for i in wordList) 
+2

Как показывает его пример, значения могут быть поплавками. '' "3.5" .isdigit() == False''. Вероятно, не будет вписываться в одну строку, но '' try: num = float (s) \\ except: ... '' будет более надежным. – fjarri

+0

Это работает! Большое спасибо! –

+0

@litebread Добро пожаловать! – TerryA

4

Просто попытайтесь привести значение к поплавку. Если он терпит неудачу, предположите, что это не поплавок. :)

def main(): 
    for word in input("Input a sentence: ").split(): 
     try: 
      print(2 * float(word)) 
     except ValueError: 
      print(word) 

выше по-прежнему печатать 7.0 вместо 7, которая не является строго по чертежу. Вы можете исправить это с помощью простого условного и метода is_integer для плавания.

+0

Это тоже здорово! Спасибо! –

Смежные вопросы