在句子中正确使用

时间:2019-05-17 18:11:06

标签: python python-3.x

想象一个骰子辊,您要在其中以良好的语法打印结果。

  • 'You rolled a 18'是错误语法的一个例子。
  • 'You rolled an 18'是一个好的语法的例子。
  • 'You rolled an 5'是错误的语法。

我可以定义一个函数,该函数执行一堆if语句,但看起来似乎不像Python。

#ideally something like this 
print(f'You rolled {a-or-an} {someint}')

3 个答案:

答案 0 :(得分:3)

基于discussion中的comments,我认为以下内容适用于您:

def getDiceRollString(someint):
    a_or_an = "an" if someint in (11, 18) or str(someint)[0] == '8' else "a"
    return "You rolled %s %d" % (a_or_an, someint)

您可以尝试:

for i in [1, 5, 8, 11, 15, 18, 28, 81, 88, 800]:
    print(getDiceRollString(i))
#You rolled a 1
#You rolled a 5
#You rolled an 8
#You rolled an 11
#You rolled a 15
#You rolled an 18
#You rolled a 28
#You rolled an 81
#You rolled an 88
#You rolled an 800

答案 1 :(得分:2)

如果您使用num2word(由pip install num2word安装)

import num2word
a-or-an ='an' if numtoword.to_card(someint)[0] == 'e' else 'a'

不幸的是,由于它是基于声音的,而声音是基于单词的,所以我认为没有办法通过检查整数来做到这一点,因此该解决方案并不是很Python。

(我不知道)也可以随时对此进行反驳

先前的内容在11下面的注释中被驳回,现在应予以解决。

答案 2 :(得分:2)

这是我未优化的想法。从其他答案转为英语,然后如果是元音,则根据第一个字母更改文章(a / an)。 o中的one除外,因为单词one实际上听起来像won,其中第一个声音是辅音w

任何人,这是我的主意。

from random import randint

import inflect # python -m pip install inflect

p = inflect.engine()

numlist = [1,7,8,10,11,12,11000000]

#for i in range(0, 10):
for i in numlist:
    article = 'a'
    num = i #randint(0, 10000000000)
    numword = p.number_to_words(num)
    if numword[:1] in 'aeiu':
        article = 'an'

    print("You rolled ", article, " ", num, " (", numword, ")", sep='')