0

我们必须编写一个程序,就像一个人去割草的孩子们的押韵。我们必须使用列表来做到这一点。我的老师并不担心男人和男人的正确英语。

这是韵的链接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'
4

6 回答 6

1

对于初学者,您有一个无限循环(while 循环永远不会终止)。

于 2012-09-16T18:12:44.037 回答
1

你离这个很远。有些细节是错误的,你会在测试时发现。缺少的是正确执行“一个人和他的狗”这句话。这应该针对每个对联进行更改。

你可以做的是创建第二个循环来输出一个人,两个人等。提示:print "text",将打印文本,但抑制换行符。

作为替代方案,您可以使用 for 循环将文本构建为列表,然后将其输出。就像在您的主循环中一样,您可以保留一个计数器并附str(counter) + " man"加到列表中。要将此列表输出为字符串,请使用' '.join(list).

于 2012-09-16T18:14:48.320 回答
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'
于 2012-09-16T18:23:37.617 回答
0

我看到了问题,并决定尝试一下,只是为了见鬼。这就是我想出的。
由于用户输入必须是数字,因此您需要创建一个字典来将数字映射到数字(在单词中,例如 1 变为one)。为了创建字典,您需要知道用户将输入的最大值。
或者
像那样使用数字,而不是单词中的数字。
我选择了第二个选项;这是代码;随意弄乱它。

def one_man():
    返回 ”””
            一个人去割草,\n
            去割草场,\n
            一个男人和他的狗,\n
            去割草。\n

      """;

def many_men(num_of_men,collat​​ed_men): 返回 ””” {0} 名男子去割草,\n 去割草场,\n {1} 1 个人和他的狗,\n 去割草。\n """ . format(num_of_men, collat​​ed_men);

def collat​​e_men(num_of_men): 结果 = ""; 而 num_of_men > 1: 结果 += "{0} 名男子," 。格式(num_of_men); 人数 -= 1; 返回结果;

如果名称== “主要”: preamble = """ 要退出此程序,请在提示时输入 y 或 n"""; 打印序言;

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;

于 2012-09-16T20:02:03.213 回答
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]不是有效的语法。请务必检查如何将值插入列表。

于 2012-09-16T18:13:43.930 回答
0

menlist.insert[0.2]是无效的; 你最终会遇到一个神秘的错误,比如'builtin_function_or_method' object has no attribute '__getitem__'.

作为insert一个函数,使用函数调用语法:在列表的开头(在 index 处)menlist.insert(0, 2)插入。20

于 2012-09-16T18:18:47.027 回答