3

我在我的数据结构类中有一个作业,我正在使用 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
>>> 

所以我的问题是弄清楚如何提取数值然后加倍。我不知道从哪里开始。

任何反馈都会受到赞赏。谢谢!

4

2 回答 2

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浮动方法来解决此问题。

于 2013-09-16T01:03:02.117 回答
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)
于 2013-09-16T00:50:56.187 回答