字符串和整数作为while循环中的多个条件的问题? (蟒蛇)

时间:2015-10-15 12:39:56

标签: python

我是语言python的初学者,并且在编写包含while循环的代码时出现了一些问题,我希望检查多个条件,其中一个条件没有被检查,并且有字符串/整数问题。

原始代码(第二个代码示例)是我第一次写的但它的问题是,在一个键满足第一个循环的条件后,它会转到第二个循环,这样如果我什么都没输入到程序中当它运行它只会出现错误而不是请输入一个键。我想到解决这个问题的唯一方法是改变代码,以便用一个while循环检查多个条件中的一个。但是我对每个条件的变量键有一些问题是不同的类型(整数/字符串),当我尝试使用int()和str()时它没有被修复。除此之外,代码似乎没有检查所有条件。改变代码的一个主要缺点是它将不再告诉用户他们究竟做错了什么,例如没有输入任何内容,输入的字符不是数字

守则:

def Key(key):
    while len(key) < 1 or key.isalpha() == True or ((key > 25) or (key < -25)):
        print("The key must be a number between numbers 26 and -26")
        key = int(input("What is the key: "))
    print (key)

key = input("What is the key: ")
Key(key)

原始代码:

def Key(key):
    while len(key) < 1:
        print("Please enter a key")
        key = int(input("What is the key: "))
    while key.isalpha() == True :
        print("Please enter a number!")
        key = int(input("What is the key: "))
    key=int(key)
    while (key > 25) or (key < -25):
        print("The key must be in between numbers 26 and -26")
        key = int(input("What is the key: "))
    print key

key = input("What is the key: ")
Key(key)

任何帮助,改进和更好的方法都会非常有帮助 对不起那篇可笑的长篇文章感到抱歉 三江源

3 个答案:

答案 0 :(得分:0)

从用户那里获取输入时存在问题。 key期待一个int,但是如果你输入characters,它就会失败。在获取输入时删除(int(...))

while len(key) < 1:
     print("Please enter a key")
     key = int(input("What is the key: "))

如果您在try...except中运行代码,则会发现此错误

Python 3.3 programming. ValueError: invalid literal for int () with base 10

Demo您的工作代码

答案 1 :(得分:0)

程序员应该是懒惰的。善良的懒惰。例如,遵循“不要重复自己”的原则(DRY),不要重复数据和/或代码,如呼叫和提示,要求用户输入密钥。

Python没有DO ... WHILE类型的循环,所以这通常被写为“无限”循环,当满足正确的条件时,该循环留有breakreturn

def ask_for_key(lower_limit=-25, upper_limit=25):
    while True:
        try:
            result = int(raw_input('What is the key: '))
        except ValueError:
            pass  # Intentionally ignored.
        else:
            if lower_limit <= result <= upper_limit:
                return result
        print 'The key must be a number between {0} and {1}'.format(
            lower_limit, upper_limit
        )

答案 2 :(得分:-1)

正如您所描述的那样,您的原始代码存在一些重大问题。也就是说你可以通过一个特定的测试,但是在稍后的循环中,你仍然会得到一个错误的输入,这个输入被检查了#39;在之前的while循环中。

一起检查这个是一个好主意。我建议使用检查功能,检查密钥是否适合。如果有,则返回True,如果不是False,则返回def check_key(key): if len(key) < 1: print("Please enter a key") return False if key.isalpha() == True : print("Please enter a number!") return False if (int(key) > 25) or (int(key) < -25): print("The key must be in between numbers 26 and -26") return False return True def main(): key = raw_input("What is the key: ") while check_key(key) == False: key = raw_input("What is the key: ") if __name__ == "__main__": main() 。这样你就不会一遍又一遍地重复自己,只需要一个while循环来持续检查输入,直到它正确为止。

类似的东西:

@Autowired
private UsersDAO usersDAO;

@Autowired
private OtherDAO otherDAO;

@Override
@Transactional
public UserDetails loadUserByUsername(final String username) throws UsernameNotFoundException {

    Users user = usersDAO.find(username);
    Other oth  = otherDAO.find(username);

    // your queries

    if(check if your desire is correct based on user){
        List<GrantedAuthority> authorities = buildUserAuthority(user.getUserRole());
        return buildUserForAuthentication(user, authorities);
    } else {
        //...
    }
}