我有输入原始分数(可能获得30分的分数)并计算百分比分数的功能。我想要一个单独的函数来打印百分比,但以下代码不起作用
def percentage():
global x
x = int(input('Please input the score out of 30'))
percent = x/30*100
def printpercentage():
print(x,'out of 30 gives a percentage of', percent, '%')
答案 0 :(得分:1)
执行此操作的首选方法是将所需的值传递到例程中。 此外,重构这一点,以便您的功能实现单一目的。任何全球声明都是一个危险的标志(a.k.a。“代码味道”)
# Given a raw score, return the percentage score
def compute_percentage(x):
return x/30*100
# Print the score and percentage
def print_percentage(x, percent):
print(x,'out of 30 gives a percentage of', percent, '%')
# Main program
score = int(input('Please input the score out of 30'))
print_percentage(score, compute_percentage(score))
答案 1 :(得分:0)
好的,改变你的功能:
def percentage():
global x
x = int(input('Please input the score out of 30'))
return x / 30 * 100
def printpercentage():
percent = percentage()
print(x,'out of 30 gives a percentage of', percent, '%')
答案 2 :(得分:0)
编辑:
我对print()
变量类型的初步回答并不是解决问题的关键。
问题是,x
和percent
需要在用global x
引用之前在外部范围内实例化。以下代码应该有效:
x=0
percent=0
def percentage():
global x
global percent
x = int(input('Please input the score out of 30'))
percent = x/30*100
def printpercentage():
print(x,'out of 30 gives a percentage of', percent, '%')
percentage()
printpercentage()
使用global
的劝阻仍然有效:)
对问题的初步回答是:
在您的打印功能中您正在将字符串与整数混合。虽然print()可以同时进行字符串和整数打印,但它不能同时解决这两种问题。 所以你应该这样做:
print(str(i),'out of 30 gives a percentage of', str(percent), '%')
另外,如果百分比不够整洁,你可以round(percent)
使其更好。
另外,您应该global percent
percentage()
printpercentage()
使global
看到变量。
此外,由于安全性和污染名称空间原因,社区不鼓励使用{{1}},因此请考虑通过使百分比函数返回x和百分比而不是写入全局变量来重构代码!
答案 3 :(得分:0)
(无法添加评论,所以我必须回答) 如果您正在使用Python 2,@ Prune给出的答案将导致0或100,对于0到30之间的任何输入。为此,您必须使用以下导入来强制除法得到一个浮点数:
from __future__ import division
这将在使用Python 2时为您提供一个百分比。
来源:values-list
答案 4 :(得分:0)
根据你评论的第一个解决方案:
当我使用此代码运行printpercentage函数时,它会要求我 像第一个函数一样输入30分,但我想要的只是 它要做的是打印字符串
percent_list=[]
def percentage():
global x
x = int(input('Please input the score out of 30'))
percent_list.append(x/30*100)
percentage()
def printpercentage():
print(x,'out of 30 gives a percentage of', "".join(map(str,percent_list)), '%')
printpercentage()
实际上是这样做的第二种解决方案:
def percentage():
global x
x = int(input('Please input the score out of 30'))
return x/30*100
def printpercentage():
print('out of 30 gives a percentage of', percentage(), '%')
printpercentage()