想象一个骰子辊,您要在其中以良好的语法打印结果。
'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}')
答案 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='')