我是编码的新手(从2天前开始),为了练习,我的一个朋友给我写了一个编写提供第n个斐波那契数或第n个点的序列的程序的任务。我使用input()成功完成了该任务,并直接向用户询问n,现在他扩展了任务,并要求我尝试使用sys.argv获得相同的结果

在广泛使用google之后,我想出了如何打印所有给定参数并计算它们的数量,但是我无法弄清楚在函数中使用这些参数的任何方式。不幸的是,我似乎也找不到适合Google的关键字,这让我有点无所适从。

这是我最近的尝试:

import sys
from math import sqrt
print('Number of arguments:', len(sys.argv), 'arguments.')
print ('Argument List:', str(sys.argv))
Fibonacci = sys.argv[0]
value = sys.argv[1]
sequence = sys.argv[2]
def fib(value): int(1/sqrt(5)*(((1+sqrt(5))/2)**value-(((1-sqrt(5))/2)**value)))

print("The {}. value is".format(value), fib(value))

input("Close")


(很小的细节,尽管不重要:我将字符串从德语翻译成英语,这也是为什么它说“ {}。value”而不是“ {} st / nd / rd / th”的原因,这些情况之间的区别是一个问题稍后再说)。

现在,我希望这里的目标可以实现,但是,使用一些适用于基于input()的代码的表达式几乎是我目前的最后一个想法。谁能给我指点我该如何进行?甚至暗示我应该对Google有所帮助,但到目前为止,我完全没有主意。

编辑:我不知道这是否是您应该执行的操作,但是我已经解决了我的问题,我认为我也应该发布我的代码,以防其他人偶然遇到类似问题。这是我的解决方案。

import sys
from math import sqrt
Fibonacci = sys.argv[0]
Entscheidung = (sys.argv[1])
n = int(sys.argv[2])
sequence = []

if Entscheidung == "Stelle":
    def fib(n): return int(1/sqrt(5)*(((1+sqrt(5))/2)**n-((1-sqrt(5))/2)**n))
    print("Die {}. Stelle beträgt:{}".format(n, fib(n)))
elif Entscheidung == "Folge":
    def fib(n): return int(1/sqrt(5)*(((1+sqrt(5))/2)**n-((1-sqrt(5))/2)**n))
    for i in range(n):
        sequence.append(fib(i + 1))
    print('[%s]' % ', '.join(map(str, sequence)))


input("Schließen")


请注意,我仍然是绝对的初学者,我不知道这种解决方案可能效率不高,编写错误,格式混乱。我所能保证的就是它能完成任务。

最佳答案

是的,n = int(sys.argv[2])是魅力所在。

现在您是破解sys.argv的专家,您可能想要$ pip install click并让该程序包为您做一些解析:https://click.palletsprojects.com/en/7.x/

我想有条件地执行def是一个选项,但是有点奇怪。
将相同的定义粘贴到两个if分支中没有帮助。
只需def一次,向上。

关于python - 我如何通过sys.argv执行函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55427103/

10-12 16:56
查看更多