为了我的功课,坚持在Python中实施“男人去割”押韵

时间:2012-09-16 18:08:30

标签: python

我们必须编写一个程序,就像一个男人去割草的孩子押韵。我们必须使用列表来完成此操作。我的老师并不那么担心男人和男人的正确英语。

这是押韵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'

6 个答案:

答案 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;