我们必须编写一个程序,就像一个男人去割草的孩子押韵。我们必须使用列表来完成此操作。我的老师并不那么担心男人和男人的正确英语。
这是押韵http://www.kididdles.com/lyrics/o105.html
的链接这就是我到目前为止......
men = input ('enter how many men you would like to mow the meadow')
menmow = 1
menlist = []
while menmow <men:
print str(menmow) + ' man went to mow'
print 'went to mow a meadow'
print 'one man and his dog'
print 'went to mow a meadow'
menlist.insert [0.2]
if menmow >men:
print 'your meadow has been mowed'
答案 0 :(得分:1)
首先,你有一个无限循环(while循环永远不会终止)。
答案 1 :(得分:1)
你很喜欢这个。一些细节是错误的,您将在测试时发现。缺少的是“一个人和他的狗”这条线的正确实施。这应该改变每个对联。
你可以做的是创建第二个循环来输出一个人,两个人等。提示:print "text",
将打印文本,但是压制换行符。
作为替代方法,您可以使用for循环将文本构建为列表,然后输出。就像在主循环中一样,您可以保留一个计数器并将str(counter) + " man"
附加到列表中。
要将此列表作为字符串输出,请使用' '.join(list)
。
答案 2 :(得分:0)
如果您使用的是Python 2.x,那么input()
函数将执行该语句,就好像它是Python代码一样。这可能不是你想要的。此外,您尝试执行menmow < men
,这将是int和String之间无效的比较。
将输入语句更改为:
men = int(raw_input ('enter how many men you would like to mow the meadow'))
您还需要一个语句来结束循环。它将无限期地运行,因为循环条件不关心menlist
。
最后,menlist.insert [0.2]
是无效的语法。请务必检查如何将值插入列表。
答案 3 :(得分:0)
menlist.insert[0.2]
无效;你最终会得到像'builtin_function_or_method' object has no attribute '__getitem__'
这样的神秘错误。
由于insert
是一个函数,请使用函数调用语法:menlist.insert(0, 2)
在列表的开头插入2
(在索引0
处)。
答案 4 :(得分:0)
while
循环和for
对象即可简化range()
循环。', '.join(your_list)
以下是我如何解决这个问题:
def lyrics(men):
verses = []
verses.append(str(len(men)) + ' men went to mow,')
verses.append('Went to mow a meadow,')
verses.append(', '.join(reversed(men)) + ' and his dog,')
return '\n'.join(verses)
num_men = int(raw_input('How many men will mow the meadow? '))
song = []
men = []
for man in range(1, num_men + 1):
men.append(str(man) + ' men')
song.append(lyrics(men))
print '\n\n'.join(song)
print
print 'your meadow has been mowed'
要实际让你的代码吐出真实的歌曲(带有拼写的数字),请使用字典将数字映射到单词:
num_men = int(raw_input('How many men will mow the meadow? '))
def lyrics(men):
return '{num_men} went to mow,\nWent to mow a meadow,\n{men} and his dog'.format(
num_men=len(men),
men=', '.join(reversed(men)).capitalize()
)
song = []
men = []
numbers = {
1: 'one',
2: 'two',
3: 'three',
4: 'four',
5: 'five',
6: 'six',
7: 'seven',
8: 'eight',
9: 'nine'
}
for man in range(1, num_men + 1):
men.append('{} {}'.format(numbers[man], 'man' if man == 1 else 'men'))
song.append(lyrics(men))
print '\n\n'.join(song)
print
print 'your meadow has been mowed'
答案 5 :(得分:0)
我看到了这个问题,并决定尝试一下,只是为了哎呀。这就是我想出来的。
由于用户输入必须是数字,因此您需要创建字典以将数字映射到数字(在单词中,例如1变为 1 )。要创建字典,您需要知道用户将输入的最大值。
或
使用这样的数字,而不是单词中的数字。
我选择了第二种选择;这是代码;随意捣乱它。
def one_man(): return """ One man went to mow,\n Went to mow a meadow, \n One man and his dog, \n Went to mow a meadow.\n""";
def many_men(num_of_men, collated_men): return """ {0} men went to mow,\n Went to mow a meadow, \n {1} 1 man and his dog, \n Went to mow a meadow.\n """ . format(num_of_men, collated_men);
def collate_men(num_of_men): result = ""; while num_of_men > 1: result += "{0} men, " . format(num_of_men); num_of_men -= 1; return result;
if name == "main": preamble = """ To exit this program, type y or n when prompted"""; print preamble;
loop = True; while loop: preamble = raw_input("""Want to exit the program? y/n : """); if preamble == "y": loop = False; break; else: num_of_men_value = raw_input("""Enter the number of men you would like to mow the meadow with?: """); try: num_of_men = int(num_of_men_value); if num_of_men < 1: print "Digit must be greater than 0"; elif num_of_men == 1: print one_man(); else: collated_men = collate_men(num_of_men); print many_men(num_of_men, collated_men); continue; except: print "Number must be a valid digit"; continue;