【问题标题】:Rate Movies in Python用 Python 给电影评分
【发布时间】:2015-04-29 14:04:12
【问题描述】:

我正在尝试编写一个程序来显示用户的电影评分。该应用程序应允许用户输入五部不同电影的评分。每个等级只能是从 1 到 10 的数字。应用程序应使用由一行星号 () 组成的水平条形图绘制评级。每行应包含 1 到 10 个星号 ()。星号的数量取决于电影的评级。我必须使用一个元组来存储 5 部电影的名称。我真的是编程新手,所以请多多关照,哈哈。

这是我目前所拥有的,但我正在苦苦挣扎:

movies = ("Shrek", "Platoon", "Scary Movie II", "Gone With The Wind", "Harvey", "7:4")

rating = int(input ("Enter Movie Rating: "))

for i in range(1,11):

    print ("Rating for movie: ", movies[rating])
    while rating < 0 or rating > 10:
        ratings = int(input("Enter movie rating: ", rating))

    for j in range(rating):
        print ("*"*5,)

【问题讨论】:

  • 您应该询问“如何打印”或“如何存储值”。

标签: python


【解决方案1】:

首先,元组并不适合这个。您可以改用列表。它非常相似,但值得使用 [ 方括号 ] 进行切换

movies = ["Shrek", "Platoon", "Scary Movie II", "Gone With The Wind", "Harvey", "7:4"]

接下来,您想让 for 循环遍历每部电影,而不是允许用户输入的值范围。您可以遍历列表

for movie in movies:
    print ("Rating for movie: ", movie)

所以现在列表的每一部分将在其余代码运行时一个一个地临时存储为“电影”。

接下来,您需要先将评分设置为 0,以便 while 循环在用户给出评分之前至少运行一次。

不要使用输入,因为它会以意想不到的方式运行。 "raw_input" 是您想要使用的,因为它会将任何输入作为字符串接收。

此外,使用 int() 时,如果有人键入无法转换为整数的内容,您会收到错误消息。所以你应该使用一个叫做尝试的东西,除了。这些基本上可以让您的代码预测错误并在出现错误时继续运行。

rating = 0
while rating < 1 or rating > 10:
    try:
        ratings = int(raw_input("Enter movie rating: "))
    except ValueError:
        print ("That's not a valid number.")

最后,您不需要循环进行最终打印,只需将字符串乘以评分即可。

print ("*"*rating)

【讨论】:

  • 没问题,很高兴你能全部关注!
【解决方案2】:

如果我正确理解您的问题,您应该首先迭代电影列表以获取收视率,然后再次迭代以打印电影名称及其收视率:

movies = ("Shrek", "Platoon", "Scary Movie II", "Gone With The Wind", "Harvey", "7:4")
ratings = []

for m in movies:
    ratings.append( input ("Enter Rating for {0}: ".format(m)) )

for m,r in zip(movies,ratings):
    print "{0:<20} : {1}".format(m,'*'*r)

此外,您不需要使用 int() 进行输入,因为存在隐式 eval

【讨论】:

    【解决方案3】:

    如果打印一张漂亮的表格是问题,那么试试这个:

    movies = [“怪物史莱克”、“排”、“恐怖电影 II”、“乱世佳人”、“哈维”]

    评分 = [1,2,3,4,5]

    num = [0,1,2,3,4]

    print "星数限制为 1 到 10"

    对于 x in num:

    my =int(raw_input("stars for  "+movies[x]+"-----"))
    
    
    rating[x]= my
    

    m = ""+movies[x]+"-----"的星号

    打印 30*"_"

    对于 x in num:

    print "|"+movies[x]+(20-len(movies[x]))*" "+"|"+rating[x]*"*"
    
    print 30*"_"
    

    如果你喜欢它,请投票!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 2021-04-10
      • 2021-09-27
      • 2014-04-05
      • 2014-02-02
      • 1970-01-01
      相关资源
      最近更新 更多