【问题标题】:For, if, else statementsFor、if、else 语句
【发布时间】:2023-04-02 01:06:01
【问题描述】:

所以我有一个多层次的问题。我正在尝试如果 raw_input 是“jack”并且将“tries”减去 1,我试图仅打印出“input was jack”,然后再次运行该函数并在末尾打印出“tries”的数量第一个“if”语句和“else”语句,如果 raw_input 不是“jack”,它会将 1 添加到“tries”,如果“tries”总共达到 4,则函数打印停止。我遇到了几个不同的问题。要么计数器似乎每次都重置,所以它总是只有“1”,或者我不能继续运行该功能。它似乎并没有遵循我认为的“如果或其他”理论。所以我有以下代码:

tries = 0
def usrinfo():
    name = raw_input('input name ')
    a = ('jill','jack',name,'meg')

    for element in a:
        if element == 'jack':
            print('input was jack')
            tries =-1
            print(tries)
            usrinfo()
    else:
        if element != 'jack':
            tries =+ 1
            return tries
            print(tries)
            usrinfo()
            if tries == 4:
                print('stopped')
usrinfo()

如果我输入“jack”,我会得到:

Nothing...as in a blank output

我想要:

input was jack
-1 

然后我希望函数再次运行......并得到

input was jack
-2

等等。

如果我输入除“jack”以外的任何内容,我会得到:

Nothing...as in a blank output

我想得到:

1

然后让函数再次运行....并得到

2

然后,如果我输入除“jack”以外的任何内容。我希望每次尝试打印从 1 到 4 的不断增加的尝试级别,如下所示:

1
2
3
4

然后当它达到 4 时,它会打印 'stopped' 或运行任何命令。我想基本上保持代码运行并根据输入是“jack”还是其他东西来控制“tries”的值。因为即使我创建了这样一个更简单的代码:

def userinput():
    tries = 0
    username = raw_input('input username ')

    if username == 'jack':
        tries -=1
        print(username + ' '+ str(tries) + ' success')
        userinput()

    else:
        if username != 'jack':
            tries +=1
        print('tries ' + str(tries))
        userinput()
userinput()

我在这段代码上输入“f”的结果是:

input username f
tries 1
input username f
tries 1
input username f

相反,我想得到:

input username f
tries 1
input username f
tries 2
input username f
tries 3

我想要输入“杰克”:

input username jack
jack -1 success
input username jack
jack -2 success
input username jack
jack -3 success
input username jack
jack -4 success

等等。任何帮助深表感谢。我不确定我做错了什么。似乎“尝试”在不断地自我重置。

希望这很清楚...我花了很多时间尝试编写代码,以便能够向更了解我的误解的人展示...

谢谢大家。

【问题讨论】:

  • 你的 else 语句需要与 if 语句对齐,而不是与 for 循环在同一缩进上
  • 另外,在第二个代码块中...是的,您再次调用该函数,并重置一个新的tries = 0。请使用while循环。永远不要在其内部调用函数。 (这称为递归,在这种简单的情况下重复一个动作是一种不好的方式)
  • 还有一个else 子句用于for-loop
  • @NickolasKent 你在找break吗?
  • @abarnert 是的!我想到了。我很新,所以我试图避免“这在这里工作得很好,所以让我把它扔到任何地方”模式,但我想这只是一个典型的代码片段,如果你想完成我正在尝试的事情完成。

标签: python python-2.7 for-loop if-statement


【解决方案1】:

这是我想出的,不需要循环

#!python3

from os import sys

def usrinfo(tries):
    name = input('input name: ')

    if tries == 4:
        print('end of program because tries equals 4')
        sys.exit()

    elif name == 'jack':
        tries -= 1
        print('input was jack')
        print('tries ' + str(tries) + '\n')
        usrinfo(tries)

    elif name != 'jack':
        tries += 1
        print('tries ' + str(tries) + '\n')
        usrinfo(tries)

usrinfo(0) # 'tries' will be initialized to zero

【讨论】:

    【解决方案2】:

    当您接受用户输入时,它存储在名称变量中,因此您需要使用“名称”而不是“元素”。检查条件后调用该函数

    if tries == 4:
                print('stopped')
                return
            usrinfo()
    

    这是正确的代码:

    tries = 0
    def usrinfo():
        global tries
        name = raw_input('input name ')
        a = ('jill','jack','meg')
        #to check the input against the strings of list a go for
        #if name in a: 
        if name == 'jack':
            print('input was jack')
            tries =-1
            print(tries)
            usrinfo()
        else:
            tries+=1
            print(tries)
            if tries == 4:
                print('stopped')
                return
            usrinfo()
    usrinfo()
    

    【讨论】:

      猜你喜欢
      • 2019-04-09
      • 1970-01-01
      • 2022-01-24
      • 2018-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-05
      相关资源
      最近更新 更多