编码练习2

习题1:
设定一个用户名和密码,用户输入正确的用户名和密码,则显示登录成功,否则提示登录失败。
用户最多失败3次,否则退出程序。

提示:使用while或者for来限定重试的次数,使用input获取用户输入,使用==判断用户的用户名和密码。

user_name_in_system = "root"
user_passwd_in_system = "root123"
for i in range(3):
    user_name_input = input("please input username: ")
    user_passwd_input = input("please input passwd: ")
    if user_name_input == user_name_in_system and \
       user_passwd_input == user_passwd_in_system:
        print("login successfully!")
        break
    else:
        print("wrong username or password!")
        if i == 2:
            print("input time is used out!bye!")

执行结果:
在这里插入图片描述
在这里插入图片描述
while的解决方法:

user_name_in_system = "root"
user_passwd_in_system = "root123"
i = 2
while i >=0:
    user_name_input = input("please input username: ")
    user_passwd_input = input("please input passwd: ")
    if user_name_input == user_name_in_system and \
       user_passwd_input == user_passwd_in_system:
        print("login successfully!")
        break
    else:
        print("wrong username or password!")
        if i == 0:
            print("input time is used out!bye!")
        i-=1

习题2:
自己实现一个函数,在一句话中查找某个单词的算法,存在返回索引号,否则返回False

提示:使用句子中的坐标遍历句子的每一个位置,使用查找单词的长度结合使用切片来查找单词。
例如:s[i:i+len(单词)]

sentence = "I am a good boy."

def find_word_index(sentence,word):
    word_length = len(word)
    for i in range(len(sentence)-word_length+1):
        if sentence[i:i+word_length] == word:
            return i
    return -1

print(find_word_index(sentence,"good"))
print(find_word_index(sentence,"good1"))

执行结果:
在这里插入图片描述
如果存在多个重复的单词,比如:
sentence = “I am a good good good boy!”

sentence = "I am a good good good boy!"

def find_word_index(sentence,word):
    position_list = []
    word_length = len(word)
    for i in range(len(sentence)-word_length+1):
        if sentence[i:i+word_length] == word:
            position_list.append(i)
    return position_list

print(find_word_index(sentence,"good"))
print(find_word_index(sentence,"good1"))

执行结果:
在这里插入图片描述
练习3:
随机生成一个整数,1-100之间
你最多猜5次,如果猜大了,提示大了
小了,提示小了
猜对了,提示猜中
5次都没猜中,就没猜中。

 import random
 target_number = random.randint(1,100)
 for i in range(5):
     user_input_number = int(input("请输入你猜的数字: "))
     if target_number == user_input_number:
         print("你猜中了,数字是:",user_input_number)
         print("你猜了%s次" %i+1)
     elif target_number > user_input_number:
         print("你猜小了")
     else:
         print("你猜大了")
     if i == 4:
         print("5次机会用光了!Bye~")

执行结果:
在这里插入图片描述
当你要执行的次数不确定的时候,用while
执行的最大次数很明确的时候,推荐用for,用while也可以。
while 条件:
xxxx
False:0、""、[]、()、{}
练习:
使用while,计算随机数之和,超过100的时候,停止程序。
随机数1-20的范围产生,要求记录一下产生的随机数,以及最后的和,以及随机数的个数。

import random
result = 0
random_num_list = []
while 1:
    random_num = random.randint(1,20)
    random_num_list.append(random_num)
    result+=random_num
    if result > 100:
        break

print("一共产生了%s 个随机数:" %len(random_num_list))
print("产生随机数如下:",random_num_list)
print("最后的随机数之和:",result)

执行结果:
在这里插入图片描述
练习:
遍历一个列表中的嵌套列表和元组的所有元素,将1-12的数字进行输出!
[[[1,2,3],4,5],6,7,8,(9,10,(11,12))]

l=[[[1,2,3],4,5],6,7,8,(9,10,(11,12))]

for item in l:
    if isinstance(item,(list,tuple)):
        for i in item:
            if isinstance(i,(list,tuple)):
                for j in i:
                    print(j)
            else:
                print(i)
    else:
        print(item)

执行结果:
在这里插入图片描述
素数–质数:只能被1和本身所整除。
算法:
13
2-12
2–平方根
import math
math.sqrt
封装到函数里后,找到100以内所有的素数,然后求和。

不封装的方法:

#encoding=utf-8

input_num = int(input("请输入需要判断素数的数字:"))

for i in range(2,input_num):
    if input_num%i == 0:
        print(input_num ,"is not a prime number!")
        break
else:
    print(input_num ,"is a prime number!")

封装到函数里:


def is_prime(num):
    if not isinstance(num,int):
        return False
    for i in range(2,num):
        if num%i == 0:
            return False
    return True

print(is_prime(13))
print(is_prime(101))
print(is_prime(10))

执行结果:
在这里插入图片描述
用math.sqrt方法来判断素数:

import math
def is_prime(num):
    if not isinstance(num,int):
        return Fale
    for i in range(2,int(math.sqrt(num))):
        if num%i == 0:
            return False
    return True

print(is_prime(13))
print(is_prime(101))
print(is_prime(10))

执行结果:
在这里插入图片描述

import math
def is_prime(num):
    if not isinstance(num,int):
        return Fale
    for i in range(2,int(math.sqrt(num)+1)):
        if num%i == 0:
            return False
    return True

print(is_prime(13))
print(is_prime(101))
print(is_prime(10))
print(is_prime(25))
import math
def is_prime(num):
    if not isinstance(num,int):
        return Fale
    if num == 1:
        return False
    if num == 2:
        return True
    for i in range(2,int(math.sqrt(num)+1)):
        if num%i == 0:
            return False
    return True

result = 0
for i in range(1,101):
    if is_prime(i):
        result+=i
        print(i)

print(result)

执行结果:
在这里插入图片描述
练习:
用户输入多个数字,当输入偶数的时候求和,输入奇数不求和,输入.的时候结束求和,打印求和结果

result = 0
while 1:
    user_input = input("please input a number: ")    
    if user_input == ".":
        break
    else:
        if int(user_input) %2 == 0:
            result += int(user_input)

print(result)

执行结果:
在这里插入图片描述
练习:
嵌套循环输出10-50中个位带有1-5的所有数字。
方法1:数字和10取余,判断是否大于0并且小于等于5

for i in range(10,51):
    if i % 10 > 0 and i % 10 <= 5:
        print(i)

执行结果:
在这里插入图片描述
方法2:将数字转换为str,取个位的字符
判断字符是否在1-5内。

for i in range(10,51):
    if str(i)[1] in "12345":
        print(i)

执行结果:
在这里插入图片描述
方法3:嵌套的方式来实现

for i in "1234":
    for j in "12345":
        print(int(i+j))

执行结果:
在这里插入图片描述
直接退出多重循环:
方法1:

 try:
     for i in range(5):
         for j in range(5):
             if i == 3 and j == 3:
                 raise
         print(i)
 except:
     pass

执行结果:
在这里插入图片描述
方法2:函数的实现return

 def fun():
     for i in range(5):
         for j in range(5):
             print(i,j)
             if i == 3 and j == 3:
                 return True

 fun()

执行结果:
在这里插入图片描述
练习:
将列表每个元素向后挪一个位置,末尾的挪到第一个。
a=[1,2,3,4,5]--------->a=[5,1,2,3,4]
方法1:

a=[1,2,3,4,5]
temp=a[-1]
for i in range(len(a),0,-1):
    a[i-1]=a[i-2]

a[0]=temp
print(a)

在这里插入图片描述
方法2:

a=[1,2,3,4,5]
b=[]
b.append(a[-1])
b.extend(a[0:4])
print(b)

在这里插入图片描述
统计所有的数据类型,结果放到字典里。
l = [1,2,“s”,[1,23],{1:2},(1,2),set([1,2]),“b”]

l = [1,2,"s",[1,23],{1:2},(1,2),set([1,2]),"b"]
d={"int":0,"str":0,"list":0,"tuple":0,"set":0,"dict":0}
for i in l:
    if isinstance(i,str):
        d["str"]+=1
    if isinstance(i,int):
        d["int"]+=1
    if isinstance(i,list):
        d["list"]+=1
    if isinstance(i,tuple):
        d["tuple"]+=1
    if isinstance(i,set):
        d["set"]+=1
    if isinstance(i,dict):
        d["dict"]+=1

print(d)

在这里插入图片描述
列表中所有出现的数字求和,包括字符串的数字。
a = [1,2,3,[4,5,6],{1:6,2:8,“a”:“12”}]

a = [1,2,3,[4,5,6],{1:6,2:8,"a":"12"}]
result = 0
for i in a:
    if isinstance(i,int):
        result+=i
    if isinstance(i,list):
        for j in i:
            if isinstance(j,int):
                result+=j
    if isinstance(i,dict):
        for j in i.keys():
            if isinstance(j,int):
                result+=j
        for j in i.values():
            if isinstance(j,int):
                result+=j
            else:
                if j.isdigit():
                    result+=int(j)

print(result)   

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值