习题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)