在python中的另一个函数中打印变量

时间:2017-10-10 22:06:44

标签: python function global

我有输入原始分数(可能获得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, '%')

5 个答案:

答案 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()变量类型的初步回答并不是解决问题的关键。

问题是,xpercent需要在用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()